From cc1e3a82d72273eab0ef8c05f1ec043c5075c10b Mon Sep 17 00:00:00 2001 From: zcn1123 <2363211205@qq.com> Date: Thu, 3 Sep 2020 21:53:10 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=BC=82=E5=B8=B8=E7=A0=81?= =?UTF-8?q?=E7=94=9F=E6=88=90=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Modbus_RTU_Salve/RTU_Salve.cpp | 88 +++++-------------- 1 file changed, 24 insertions(+), 64 deletions(-) diff --git a/Modbus_communication/Modbus_RTU_Salve/RTU_Salve.cpp b/Modbus_communication/Modbus_RTU_Salve/RTU_Salve.cpp index 0443b90..c2ba0c1 100644 --- a/Modbus_communication/Modbus_RTU_Salve/RTU_Salve.cpp +++ b/Modbus_communication/Modbus_RTU_Salve/RTU_Salve.cpp @@ -49,6 +49,24 @@ UINT8 Bitset_to_Uint8(unsigned int Bitset_Address, unsigned int Read_Number) 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对应的响应报文 @@ -79,13 +97,7 @@ void Create_0x01_Response_Message(UINT8 *Requst_Message, UINT8 *Response_Message } 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 //地址超限 { - 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 //地址超限 { - 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 //地址超限 { - 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校验 @@ -362,7 +322,7 @@ bool Create_Response_Message(UINT8 *Requst_Message, UINT8 *Response_Message, DWO return false; 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; } 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 0x0F:Create_0x0F_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; }