|
@@ -246,11 +246,26 @@ void Create_0x10_Response_Message(UINT8 *Requst_Message, UINT8 *Response_Message |
|
|
* 输入 : *Requst_Message 请求报文 *Response_Message响应报文 |
|
|
* 输入 : *Requst_Message 请求报文 *Response_Message响应报文 |
|
|
* 返回值 : 无 |
|
|
* 返回值 : 无 |
|
|
**********************************************************************************************/ |
|
|
**********************************************************************************************/ |
|
|
void Create_Abnormal_Function_Code_Response_Message(UINT8 *Requst_Message, UINT8 *Response_Message) |
|
|
|
|
|
|
|
|
void Create_Abnormal_Code_01_Response_Message(UINT8 *Requst_Message, UINT8 *Response_Message) |
|
|
{ |
|
|
{ |
|
|
Response_Message[0] = Device_ID; |
|
|
Response_Message[0] = Device_ID; |
|
|
Response_Message[1] = Requst_Message[1] + 0x80; |
|
|
Response_Message[1] = Requst_Message[1] + 0x80; |
|
|
Response_Message[2] = 0x01; |
|
|
Response_Message[2] = 0x01; |
|
|
|
|
|
Response_Message_Len = 3; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/********************************************************************************************* |
|
|
|
|
|
* 功能 : 生成异常码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; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/********************************************************************************************* |
|
|
/********************************************************************************************* |
|
@@ -270,11 +285,11 @@ bool Check_Requst_Message_CRC(UINT8 *Requst_Message, DWORD Read_len) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/********************************************************************************************* |
|
|
/********************************************************************************************* |
|
|
* 功能 : CRC校验 |
|
|
|
|
|
* 描述 : 对请求报文中的数据进行CRC校验 |
|
|
|
|
|
|
|
|
* 功能 : 异常码03判定--请求报文长度校验 |
|
|
|
|
|
* 描述 : 对请求报文的字节长度进行计算校验 |
|
|
* 输入 : *Requst_Message 请求报文 Read_len 接收到到的字节数 |
|
|
* 输入 : *Requst_Message 请求报文 Read_len 接收到到的字节数 |
|
|
* 返回值 : true CRC校验通过 |
|
|
|
|
|
* false CRC校验不通过 |
|
|
|
|
|
|
|
|
* 返回值 : true 长度校验通过 |
|
|
|
|
|
* false 长度校验不通过 |
|
|
**********************************************************************************************/ |
|
|
**********************************************************************************************/ |
|
|
bool Check_Requst_Message_Len(UINT8 *Requst_Message, DWORD Read_len) |
|
|
bool Check_Requst_Message_Len(UINT8 *Requst_Message, DWORD Read_len) |
|
|
{ |
|
|
{ |
|
@@ -293,6 +308,38 @@ bool Check_Requst_Message_Len(UINT8 *Requst_Message, DWORD Read_len) |
|
|
return true; |
|
|
return true; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/********************************************************************************************* |
|
|
|
|
|
* 功能 : 异常码03判定--请求报文中的操作数量判定 |
|
|
|
|
|
* 描述 : 对请求报文中的操作数量进行判定 |
|
|
|
|
|
* 输入 : *Requst_Message 请求报文 Read_len 接收到到的字节数 |
|
|
|
|
|
* 返回值 : true 校验通过 |
|
|
|
|
|
* false 校验不通过 |
|
|
|
|
|
**********************************************************************************************/ |
|
|
|
|
|
bool Check_Operation_Number_Requst_Message(UINT8 *Requst_Message) |
|
|
|
|
|
{ |
|
|
|
|
|
unsigned int Operation_Number = Requst_Message[4] << 8 | Requst_Message[5]; |
|
|
|
|
|
if (Requst_Message[1] == 0x01) |
|
|
|
|
|
{ |
|
|
|
|
|
if (Operation_Number == 0 || Operation_Number > 2000) |
|
|
|
|
|
return false; |
|
|
|
|
|
} |
|
|
|
|
|
if (Requst_Message[1] == 0x03) |
|
|
|
|
|
{ |
|
|
|
|
|
if (Operation_Number == 0 || Operation_Number > 125) |
|
|
|
|
|
return false; |
|
|
|
|
|
} |
|
|
|
|
|
if (Requst_Message[1] == 0x0F) |
|
|
|
|
|
{ |
|
|
|
|
|
if (Operation_Number < 2 || Operation_Number > 1968) |
|
|
|
|
|
return false; |
|
|
|
|
|
} |
|
|
|
|
|
if (Requst_Message[1] == 0x10) |
|
|
|
|
|
{ |
|
|
|
|
|
if (Operation_Number < 2 || Operation_Number > 123) |
|
|
|
|
|
return false; |
|
|
|
|
|
} |
|
|
|
|
|
return true; |
|
|
|
|
|
} |
|
|
/********************************************************************************************* |
|
|
/********************************************************************************************* |
|
|
* 功能 : 生成响应报文 |
|
|
* 功能 : 生成响应报文 |
|
|
* 描述 : 检查设备请求报文来生成对应功能的响应报文 |
|
|
* 描述 : 检查设备请求报文来生成对应功能的响应报文 |
|
@@ -302,19 +349,22 @@ bool Check_Requst_Message_Len(UINT8 *Requst_Message, DWORD Read_len) |
|
|
**********************************************************************************************/ |
|
|
**********************************************************************************************/ |
|
|
bool Create_Response_Message(UINT8 *Requst_Message, UINT8 *Response_Message, DWORD Read_len) |
|
|
bool Create_Response_Message(UINT8 *Requst_Message, UINT8 *Response_Message, DWORD Read_len) |
|
|
{ |
|
|
{ |
|
|
if (!Check_Requst_Message_Len(Requst_Message, Read_len))//检查请求报文长度是否正确 |
|
|
|
|
|
|
|
|
if (Requst_Message[0] != Device_ID) //检查设备ID一致 |
|
|
return false; |
|
|
return false; |
|
|
if (!Check_Requst_Message_CRC(Requst_Message, Read_len))//CRC校验报文是否正确 |
|
|
if (!Check_Requst_Message_CRC(Requst_Message, Read_len))//CRC校验报文是否正确 |
|
|
return false; |
|
|
return false; |
|
|
if (Requst_Message[0] != Device_ID) //检查设备ID一致 |
|
|
|
|
|
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); |
|
|
|
|
|
return true; |
|
|
|
|
|
} |
|
|
switch (Requst_Message[1]) |
|
|
switch (Requst_Message[1]) |
|
|
{ |
|
|
{ |
|
|
case 0x01:Create_0x01_Response_Message(Requst_Message, Response_Message); break; |
|
|
case 0x01:Create_0x01_Response_Message(Requst_Message, Response_Message); break; |
|
|
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_Function_Code_Response_Message(Requst_Message, Response_Message); |
|
|
|
|
|
|
|
|
default: Create_Abnormal_Code_01_Response_Message(Requst_Message, Response_Message); |
|
|
} |
|
|
} |
|
|
return true; |
|
|
return true; |
|
|
} |
|
|
} |
|
|