From cdf5978b0e04ae0d8786e8745674e55782396f4c Mon Sep 17 00:00:00 2001 From: zcn1123 <2363211205@qq.com> Date: Mon, 31 Aug 2020 08:34:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=94=9F=E6=88=90MBAP?= =?UTF-8?q?=E6=A8=A1=E5=9D=97=EF=BC=8C=E6=9C=AA=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Modbus_communication/Modbus_TCP/common.cpp | 22 ++++++ Modbus_communication/Modbus_TCP/main.cpp | 83 ++++------------------ 2 files changed, 36 insertions(+), 69 deletions(-) diff --git a/Modbus_communication/Modbus_TCP/common.cpp b/Modbus_communication/Modbus_TCP/common.cpp index 9056633..5928588 100644 --- a/Modbus_communication/Modbus_TCP/common.cpp +++ b/Modbus_communication/Modbus_TCP/common.cpp @@ -211,6 +211,7 @@ bool Check_Write_date(string Write_date, int Write_date_number) return true; } + /********************************************************************************************* * 功能    : 输入写入数据 * 描述   : 根据写入数量和功能码类型输入相应的数据 @@ -248,4 +249,25 @@ string Write_date(int Function_code, unsigned int Operations_Number) } while (!Check_Write_date(Write_date, Write_date_number)); return Write_date; +} + +/********************************************************************************************* +* 功能    : 生成MBAP报头 +* 描述 : MBAP报文头的包括的内容: +* +-------------+---------+--------+--------+------------------------------+ +* | 域 | 长度 | 客户机 | 服务器 | 描述 | +* +-------------+---------+--------+--------+------------------------------+ +* |事务元标识符 | 2个字节 | 启动 | 复制 |请求/响应事务处理的识别码 | +* +-------------+---------+--------+--------+------------------------------+ +* |协议标识符 | 2个字节 | 启动 | 复制 |0=MODBUS 协议 | +* +-------------+---------+--------+--------+------------------------------+ +* | 长度 | 2个字节 | 启动 | 启动 |以下字节的数量 | +* +-------------+---------+--------+--------+------------------------------+ +* |单元标识符 | 1个字节 | 启动 | 复制 |连接的远程从站的识别码 | +* 输入 : 无 +* 输出 : MBAP报文头内容 +*********************************************************************************************/ +void Crate_MBAP() +{ + } \ No newline at end of file diff --git a/Modbus_communication/Modbus_TCP/main.cpp b/Modbus_communication/Modbus_TCP/main.cpp index 72a9431..b63786d 100644 --- a/Modbus_communication/Modbus_TCP/main.cpp +++ b/Modbus_communication/Modbus_TCP/main.cpp @@ -1,79 +1,24 @@ #include "main.h" //#include - -bool Check_Write_date(string Write_date, int Write_date_number) -{ - int Write_date_len = 2 * Write_date_number + Write_date_number - 1; - if (Write_date.length() != Write_date_len) - return false; - int Space_number = 0; - int j = -1; - for (unsigned int i = 0; i < Write_date.length(); i++) - { - if (Write_date[i] == 0x20)//ոλж - { - if (i - j == 3) - { - Space_number++; - j = i; - } - else - return false; - } - if ((Write_date[i] >= 0x30 && Write_date[i] <= 0x39)) // 1-9 - continue; - else if ((Write_date[i] >= 0x41 && Write_date[i] <= 0x5A)) //A-Z - continue; - else if ((Write_date[i] >= 0x61 && Write_date[i] <= 0x7A)) //a-z - continue; - else - return false; - } - if (Space_number != Write_date_number - 1) - return false; - return true; -} +#define DEVICE_ID 0x10 int main() { - //string IP; - //unsigned int Port_number; - //Input_IP(IP, &Port_number); - //Tcp_client(IP, Port_number); - int Function_code = 0x0F; - unsigned int Operations_Number = 30; - unsigned int Write_date_number ; - while (1) + int Operations_Number = 4; + UINT8 Message[260]; + Message[0] = 0x00; + Message[1] = 0x00; + Message[2] = 0x00; + Message[3] = 0x00; + + Message[4] = 0x00; + Message[5] = Operations_Number; + Message[6] = DEVICE_ID; + for (int i = 0; i < 7; i++) { - if (Function_code == 0x01 || Function_code == 0x03) - return 0;//ȦҪı - int i = 1; - string Write_date; - if (Function_code == 0x0F) //Ȧ - { - Write_date_number = Operations_Number / 8; - if (Operations_Number % 8) - Write_date_number++; - } - if (Function_code == 0x10) - Write_date_number = Operations_Number * 2; - printf("Nдݣ2λ16Ϊһ飬ո磺00 00 01 00 20 05\n"); - do - { - if (i == 1) - { - i = 0; - printf("%dд ", Write_date_number); - } - else - printf("%dд ",Write_date_number); - getline(cin, Write_date); - cin.clear(); - cin.sync(); - } while (!Check_Write_date(Write_date, Write_date_number)); - printf("%02X", Operations_Number); - getchar(); + printf("%02X", Message[i]); } + getchar(); return 0; } \ No newline at end of file