From 2cd2fae78fd35d734d1c8214ffb6355963ae12fa Mon Sep 17 00:00:00 2001 From: zcn1123 <2363211205@qq.com> Date: Mon, 31 Aug 2020 10:34:26 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=86=99=E5=85=A5=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E6=A8=A1=E5=9D=97=EF=BC=8C=E6=B7=BB=E5=8A=A0=E8=AE=A1?= =?UTF-8?q?=E7=AE=97=E5=86=99=E5=85=A5=E6=95=B0=E6=8D=AE=E5=AD=97=E8=8A=82?= =?UTF-8?q?=E6=95=B0=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Modbus_communication/Modbus_TCP/common.cpp | 34 +++++++++++++++------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/Modbus_communication/Modbus_TCP/common.cpp b/Modbus_communication/Modbus_TCP/common.cpp index 9056633..5b4fa3e 100644 --- a/Modbus_communication/Modbus_TCP/common.cpp +++ b/Modbus_communication/Modbus_TCP/common.cpp @@ -171,6 +171,7 @@ unsigned int Input_Operations_Number(int Function_code) } while (flage); return Operations_Number; } + /********************************************************************************************* * 功能    : 检测写入数据 * 描述   : 检测写入数据格式是否正确 @@ -212,18 +213,14 @@ bool Check_Write_date(string Write_date, int Write_date_number) } /********************************************************************************************* -* 功能    : 输入写入数据 -* 描述   : 根据写入数量和功能码类型输入相应的数据 -* 输入 : Function_code 选择的功能码类型 Operations_Number对应 功能码类型的操作数量 -* 输出 : Write_date 写入的数据 +* 功能    : 计算写入数据的字节数 +* 描述   : 通过对应的功能码和操作数量计算对应的数据字节数 +* 输入 : Function_code 选择的功能码类型 Operations_Number对应功能码类型的操作数量 +* 输出 : Write_date_number 写入数据的字节数 *********************************************************************************************/ -string Write_date(int Function_code, unsigned int Operations_Number) +unsigned int Count_Write_date_number(int Function_code, unsigned int Operations_Number) { - int i = 1; - string Write_date; - unsigned int Write_date_number; - if (Function_code == 0x01 || Function_code == 0x03) - return Write_date;//读线圈不需要输入写入数据 + unsigned int Write_date_number = 0; if (Function_code == 0x0F) //读线圈 { Write_date_number = Operations_Number / 8; @@ -232,6 +229,23 @@ string Write_date(int Function_code, unsigned int Operations_Number) } if (Function_code == 0x10) Write_date_number = Operations_Number * 2; + return Write_date_number; +} + +/********************************************************************************************* +* 功能    : 输入写入数据 +* 描述   : 根据写入数量和功能码类型输入相应的数据 +* 输入 : Function_code 选择的功能码类型 Operations_Number对应功能码类型的操作数量 +* 输出 : Write_date 写入的数据 +*********************************************************************************************/ +string Write_date(int Function_code, unsigned int Operations_Number) +{ + int i = 1; + string Write_date; + unsigned int Write_date_number = Count_Write_date_number(Function_code, Operations_Number); + if (Function_code == 0x01 || Function_code == 0x03) + return Write_date;//读线圈/寄存器不需要输入写入数据 + printf("请输入N组写入数据(2位16进制为一组,空格间隔)例如:00 00 01 00 20 05\n"); do {