Browse Source

修改异常码生成模块

Modbus_RTU
zcn1123 4 years ago
parent
commit
cc1e3a82d7
1 changed files with 24 additions and 64 deletions
  1. +24
    -64
      Modbus_communication/Modbus_RTU_Salve/RTU_Salve.cpp

+ 24
- 64
Modbus_communication/Modbus_RTU_Salve/RTU_Salve.cpp View File

@@ -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;
}


Loading…
Cancel
Save