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 {