| @@ -49,6 +49,24 @@ UINT8 Bitset_to_Uint8(unsigned int Bitset_Address, unsigned int Read_Number) | |||||
| return Date; | return Date; | ||||
| } | } | ||||
| /********************************************************************************************* | |||||
| * 功能 : 生成异常码响应报文 | |||||
| * 描述 : 对不支持的功能码生成对应的异常响应报文 | |||||
| * 输入 : *Requst_Message 请求报文 *Response_Message响应报文 | |||||
| * 返回值 : 无 | |||||
| **********************************************************************************************/ | |||||
| void Create_Abnormal_Code_Response_Message(UINT8 *Requst_Message, UINT8 *Response_Message, UINT8 Abnormal_Code) | |||||
| { | |||||
| Response_Message[0] = Device_ID; | |||||
| Response_Message[1] = Requst_Message[1] + 0x80; | |||||
| Response_Message[2] = Abnormal_Code; | |||||
| Response_Message_Len = 3; | |||||
| UINT16 CRC_date = CRC_16(Response_Message, 3); | |||||
| Response_Message[3] = CRC_date >> 8;//CRC_H | |||||
| Response_Message[4] = (UINT8)CRC_date; //CRC_L | |||||
| Response_Message_Len = 5; | |||||
| } | |||||
| /********************************************************************************************* | /********************************************************************************************* | ||||
| * 功能 : 生成0x01功能码响应报文 | * 功能 : 生成0x01功能码响应报文 | ||||
| * 描述 : 通过判断地址范围生成0x01对应的响应报文 | * 描述 : 通过判断地址范围生成0x01对应的响应报文 | ||||
| @@ -79,13 +97,7 @@ void Create_0x01_Response_Message(UINT8 *Requst_Message, UINT8 *Response_Message | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| Response_Message[0] = Device_ID; | |||||
| Response_Message[1] = Requst_Message[1] + 0x80; | |||||
| Response_Message[2] = 0x02;//地址超限异常码02 | |||||
| UINT16 CRC_date = CRC_16(Response_Message,3); | |||||
| Response_Message[3] = CRC_date >> 8;//CRC_H | |||||
| Response_Message[4] = (UINT8)CRC_date; //CRC_L | |||||
| Response_Message_Len = 5; | |||||
| Create_Abnormal_Code_Response_Message(Requst_Message, Response_Message,0x02); | |||||
| } | } | ||||
| } | } | ||||
| @@ -120,13 +132,7 @@ void Create_0x03_Response_Message(UINT8 *Requst_Message, UINT8 *Response_Message | |||||
| } | } | ||||
| else //地址超限 | else //地址超限 | ||||
| { | { | ||||
| Response_Message[0] = Device_ID; | |||||
| Response_Message[1] = Requst_Message[1] + 0x80; | |||||
| Response_Message[2] = 0x02; | |||||
| UINT16 CRC_date = CRC_16(Response_Message, 3); | |||||
| Response_Message[3] = CRC_date >> 8;//CRC_H | |||||
| Response_Message[4] = (UINT8)CRC_date; //CRC_L | |||||
| Response_Message_Len = 5; | |||||
| Create_Abnormal_Code_Response_Message(Requst_Message, Response_Message, 0x02); | |||||
| } | } | ||||
| } | } | ||||
| @@ -189,13 +195,7 @@ void Create_0x0F_Response_Message(UINT8 *Requst_Message, UINT8 *Response_Message | |||||
| } | } | ||||
| else //地址超限 | else //地址超限 | ||||
| { | { | ||||
| Response_Message[0] = Device_ID; | |||||
| Response_Message[1] = Requst_Message[1] + 0x80; | |||||
| Response_Message[2] = 0x02; | |||||
| UINT16 CRC_date = CRC_16(Response_Message, 3); | |||||
| Response_Message[3] = CRC_date >> 8;//CRC_H | |||||
| Response_Message[4] = (UINT8)CRC_date; //CRC_L | |||||
| Response_Message_Len = 5; | |||||
| Create_Abnormal_Code_Response_Message(Requst_Message, Response_Message, 0x02); | |||||
| } | } | ||||
| } | } | ||||
| @@ -230,50 +230,10 @@ void Create_0x10_Response_Message(UINT8 *Requst_Message, UINT8 *Response_Message | |||||
| } | } | ||||
| else //地址超限 | else //地址超限 | ||||
| { | { | ||||
| Response_Message[0] = Device_ID; | |||||
| Response_Message[1] = Requst_Message[1] + 0x80; | |||||
| Response_Message[2] = 0x02; | |||||
| UINT16 CRC_date = CRC_16(Response_Message, 3); | |||||
| Response_Message[3] = CRC_date >> 8;//CRC_H | |||||
| Response_Message[4] = (UINT8)CRC_date; //CRC_L | |||||
| Response_Message_Len = 5; | |||||
| Create_Abnormal_Code_Response_Message(Requst_Message, Response_Message, 0x02); | |||||
| } | } | ||||
| } | } | ||||
| /********************************************************************************************* | |||||
| * 功能 : 生成异常码01响应报文 | |||||
| * 描述 : 对不支持的功能码生成对应的异常响应报文 | |||||
| * 输入 : *Requst_Message 请求报文 *Response_Message响应报文 | |||||
| * 返回值 : 无 | |||||
| **********************************************************************************************/ | |||||
| void Create_Abnormal_Code_01_Response_Message(UINT8 *Requst_Message, UINT8 *Response_Message) | |||||
| { | |||||
| Response_Message[0] = Device_ID; | |||||
| Response_Message[1] = Requst_Message[1] + 0x80; | |||||
| Response_Message[2] = 0x01; | |||||
| UINT16 CRC_date = CRC_16(Response_Message, 3); | |||||
| Response_Message[3] = CRC_date >> 8;//CRC_H | |||||
| Response_Message[4] = (UINT8)CRC_date; //CRC_L | |||||
| Response_Message_Len = 5; | |||||
| } | |||||
| /********************************************************************************************* | |||||
| * 功能 : 生成异常码03响应报文 | |||||
| * 描述 : 对不支持的功能码生成对应的异常响应报文 | |||||
| * 输入 : *Requst_Message 请求报文 *Response_Message响应报文 | |||||
| * 返回值 : 无 | |||||
| **********************************************************************************************/ | |||||
| void Create_Abnormal_Code_03_Response_Message(UINT8 *Requst_Message, UINT8 *Response_Message) | |||||
| { | |||||
| Response_Message[0] = Device_ID; | |||||
| Response_Message[1] = Requst_Message[1] + 0x80; | |||||
| Response_Message[2] = 0x03; | |||||
| Response_Message_Len = 3; | |||||
| UINT16 CRC_date = CRC_16(Response_Message, 3); | |||||
| Response_Message[3] = CRC_date >> 8;//CRC_H | |||||
| Response_Message[4] = (UINT8)CRC_date; //CRC_L | |||||
| Response_Message_Len = 5; | |||||
| } | |||||
| /********************************************************************************************* | /********************************************************************************************* | ||||
| * 功能 : CRC校验 | * 功能 : CRC校验 | ||||
| @@ -362,7 +322,7 @@ bool Create_Response_Message(UINT8 *Requst_Message, UINT8 *Response_Message, DWO | |||||
| return false; | return false; | ||||
| if (!Check_Requst_Message_Len(Requst_Message, Read_len) || !Check_Operation_Number_Requst_Message(Requst_Message))//检查请求报文长度是否正确 | if (!Check_Requst_Message_Len(Requst_Message, Read_len) || !Check_Operation_Number_Requst_Message(Requst_Message))//检查请求报文长度是否正确 | ||||
| { | { | ||||
| Create_Abnormal_Code_03_Response_Message(Requst_Message, Response_Message); | |||||
| Create_Abnormal_Code_Response_Message(Requst_Message, Response_Message, 0x03); | |||||
| return true; | return true; | ||||
| } | } | ||||
| switch (Requst_Message[1]) | switch (Requst_Message[1]) | ||||
| @@ -371,7 +331,7 @@ bool Create_Response_Message(UINT8 *Requst_Message, UINT8 *Response_Message, DWO | |||||
| case 0x03:Create_0x03_Response_Message(Requst_Message, Response_Message); break; | case 0x03:Create_0x03_Response_Message(Requst_Message, Response_Message); break; | ||||
| case 0x0F:Create_0x0F_Response_Message(Requst_Message, Response_Message); break; | case 0x0F:Create_0x0F_Response_Message(Requst_Message, Response_Message); break; | ||||
| case 0x10:Create_0x10_Response_Message(Requst_Message, Response_Message); break; | case 0x10:Create_0x10_Response_Message(Requst_Message, Response_Message); break; | ||||
| default: Create_Abnormal_Code_01_Response_Message(Requst_Message, Response_Message); | |||||
| default: Create_Abnormal_Code_Response_Message(Requst_Message, Response_Message,0x01); | |||||
| } | } | ||||
| return true; | return true; | ||||
| } | } | ||||