From 95bb23b6de6b555870c4b8d8a1a7a33e2af8eff7 Mon Sep 17 00:00:00 2001 From: zcn1123 <2363211205@qq.com> Date: Wed, 2 Sep 2020 13:53:06 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E9=83=A8=E5=88=86=E5=93=8D?= =?UTF-8?q?=E5=BA=94=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 | 84 +++++++++++++++---- .../Modbus_RTU_Salve/RTU_Salve.h | 2 + .../Modbus_RTU_Salve/common.cpp | 22 ----- 3 files changed, 71 insertions(+), 37 deletions(-) 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) -{ - - -}