diff --git a/Modbus_communication/Modbus_RTU_Salve/RTU_Salve.cpp b/Modbus_communication/Modbus_RTU_Salve/RTU_Salve.cpp index 058c43b..2188b48 100644 --- a/Modbus_communication/Modbus_RTU_Salve/RTU_Salve.cpp +++ b/Modbus_communication/Modbus_RTU_Salve/RTU_Salve.cpp @@ -1,28 +1,82 @@ #include "RTU_Salve.h" - +#include char read_buf[MAX_NUMBER]; +bitset 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; } diff --git a/Modbus_communication/Modbus_RTU_Salve/RTU_Salve.h b/Modbus_communication/Modbus_RTU_Salve/RTU_Salve.h index 33396fb..b2f0d44 100644 --- a/Modbus_communication/Modbus_RTU_Salve/RTU_Salve.h +++ b/Modbus_communication/Modbus_RTU_Salve/RTU_Salve.h @@ -2,5 +2,7 @@ #define __RTU_SALVE_H #include "common.h" +#define Device_ID 0x09 +#define MAX_Address 9999 #endif \ No newline at end of file diff --git a/Modbus_communication/Modbus_RTU_Salve/common.cpp b/Modbus_communication/Modbus_RTU_Salve/common.cpp index a250225..8963703 100644 --- a/Modbus_communication/Modbus_RTU_Salve/common.cpp +++ b/Modbus_communication/Modbus_RTU_Salve/common.cpp @@ -302,28 +302,6 @@ BYTE Input_Parity(void) return Parity; } -/********************************************************************************************* -* 功能     :  生成正常响应报文 -* 描述    : 经过校验后请求报文可以正常响应 -* 输入 : *Requst_Message 请求报文 *Normal_Response_Message 正常响应报文 -* 返回值 : 无 -**********************************************************************************************/ -void Crate_Normal_Response_Message(UINT8 *Requst_Message, UINT8 *Normal_Response_Message) -{ - - -} -/********************************************************************************************* -* 功能     :  生成异常响应报文 -* 描述    : 经过校验后请求报文可以正常响应 -* 输入 : *Requst_Message 请求报文 *Normal_Response_Message 异常响应报文 -* 返回值 : 无 -**********************************************************************************************/ -void Crate_Abnormal_Response_Message(UINT8 *Requst_Message, UINT8 *Abnormal_Response_Message) -{ - - -}