|
|
@@ -1,28 +1,82 @@ |
|
|
|
#include "RTU_Salve.h" |
|
|
|
|
|
|
|
#include <bitset> |
|
|
|
char read_buf[MAX_NUMBER]; |
|
|
|
|
|
|
|
bitset<MAX_Address> Coil_date; //0-9999 |
|
|
|
UINT16 Register[MAX_Address]; // 0-9999 |
|
|
|
|
|
|
|
/********************************************************************************************* |
|
|
|
* 功能 : 生成正常响应报文 |
|
|
|
* 描述 : 经过校验后请求报文可以正常响应 |
|
|
|
* 输入 : *Requst_Message 请求报文 *Normal_Response_Message 正常响应报文 |
|
|
|
* 返回值 : 无 |
|
|
|
**********************************************************************************************/ |
|
|
|
void Create_Normal_Response_Message(UINT8 *Requst_Message, UINT8 *Normal_Response_Message) |
|
|
|
{ |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
/********************************************************************************************* |
|
|
|
* 功能 : 获取串口读取缓存区中数据的字节数 |
|
|
|
* 描述 : 向串口写入数据 |
|
|
|
* 返回值 : 缓存区中数据的字节数 |
|
|
|
* m_hComm : 串口句柄 |
|
|
|
********************************************************************************************/ |
|
|
|
unsigned int GetBytesInCOM(HANDLE m_hComm) |
|
|
|
* 功能 : 生成异常响应报文 |
|
|
|
* 描述 : 经过校验后请求报文可以正常响应 |
|
|
|
* 输入 : *Requst_Message 请求报文 *Normal_Response_Message 异常响应报文 |
|
|
|
* 返回值 : 无 |
|
|
|
**********************************************************************************************/ |
|
|
|
void Create_Abnormal_Response_Message(UINT8 *Requst_Message, UINT8 *Abnormal_Response_Message) |
|
|
|
{ |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void Create_0x01_Response_Message(UINT8 *Requst_Message, UINT8 *Response_Message, unsigned int Address_range) |
|
|
|
{ |
|
|
|
DWORD dwError = 0; /** 错误码 */ |
|
|
|
COMSTAT comstat; /** COMSTAT结构体,记录通信设备的状态信息 */ |
|
|
|
memset(&comstat, 0, sizeof(COMSTAT)); |
|
|
|
if (Address_range > MAX_Address) |
|
|
|
{ |
|
|
|
int Read_Number = Requst_Message[4] << 8 | Requst_Message[5]; |
|
|
|
|
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
|
|
|
|
unsigned int BytesInQue = 0; |
|
|
|
/** 在调用ReadFile和WriteFile之前,通过本函数清除以前遗留的错误标志 */ |
|
|
|
if (ClearCommError(m_hComm, &dwError, &comstat)) |
|
|
|
} |
|
|
|
} |
|
|
|
void Create_0x03_Response_Message(UINT8 *Requst_Message, UINT8 *Response_Message, unsigned int Address_range) |
|
|
|
{ |
|
|
|
|
|
|
|
} |
|
|
|
void Create_0x0F_Response_Message(UINT8 *Requst_Message, UINT8 *Response_Message, unsigned int Address_range) |
|
|
|
{ |
|
|
|
|
|
|
|
} |
|
|
|
void Create_0x10_Response_Message(UINT8 *Requst_Message, UINT8 *Response_Message, unsigned int Address_range) |
|
|
|
{ |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/********************************************************************************************* |
|
|
|
* 功能 : 生成响应报文 |
|
|
|
* 描述 : 检查设备请求报文来生成对应功能的响应报文 |
|
|
|
* 输入 : *Requst_Message 请求报文 *Response_Message响应报文 |
|
|
|
* 返回值 : true 生成响应报文 |
|
|
|
* false 不生成响应报文 |
|
|
|
**********************************************************************************************/ |
|
|
|
bool Create_Response_Message(UINT8 *Requst_Message, UINT8 *Response_Message) |
|
|
|
{ |
|
|
|
if (Requst_Message[0] != Device_ID) //检查设备ID一致 |
|
|
|
return false; |
|
|
|
unsigned int Address_range = (Requst_Message[2] << 8 | Requst_Message[3]) + (Requst_Message[4] << 8 | Requst_Message[5]); |
|
|
|
switch (Requst_Message[1]) |
|
|
|
{ |
|
|
|
BytesInQue = comstat.cbInQue; /** 获取在输入缓冲区中的字节数 */ |
|
|
|
case 0x01:Create_0x01_Response_Message(Requst_Message, Response_Message, Address_range); break; |
|
|
|
case 0x03:Create_0x03_Response_Message(Requst_Message, Response_Message, Address_range); break; |
|
|
|
case 0x0F:Create_0x0F_Response_Message(Requst_Message, Response_Message, Address_range); break; |
|
|
|
case 0x10:Create_0x10_Response_Message(Requst_Message, Response_Message, Address_range); break; |
|
|
|
default: |
|
|
|
} |
|
|
|
return BytesInQue; |
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|