From 4918cfde7c47d923001325a5e9b12ddff8db4f8b Mon Sep 17 00:00:00 2001 From: zcn1123 <2363211205@qq.com> Date: Sun, 30 Aug 2020 13:52:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=BE=93=E5=85=A5=E6=93=8D?= =?UTF-8?q?=E4=BD=9C=E6=95=B0=E9=87=8F=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 | 66 +++++++++++++++++++++- Modbus_communication/Modbus_TCP/main.cpp | 28 +++++---- 2 files changed, 83 insertions(+), 11 deletions(-) diff --git a/Modbus_communication/Modbus_TCP/common.cpp b/Modbus_communication/Modbus_TCP/common.cpp index a4fdd9e..aaabf5a 100644 --- a/Modbus_communication/Modbus_TCP/common.cpp +++ b/Modbus_communication/Modbus_TCP/common.cpp @@ -83,7 +83,7 @@ void Input_IP(string& IP, unsigned int *Port_number) * 功能    : 选择功能码 * 描述   : 在功能码 0x01 0x03 0x0F 0x10中选择一个功能码 * 输入 : 无 -* 输出 : 选择的功能码 +* 输出 : Function_code 选择的功能码 *********************************************************************************************/ int Input_Function_code(void) { @@ -107,3 +107,67 @@ int Input_Function_code(void) } while (Function_code != 0x01 && Function_code != 0x03 && Function_code != 0x0F && Function_code != 0x10); return Function_code; } + +/********************************************************************************************* +* 功能    : 输入操作起始地址码 +* 描述   : 起始地址码,最大值65535 +* 输入 : 无 +* 输出 : Starting_address 操作起始地址码 +*********************************************************************************************/ +unsigned int Input_Starting_address(void) +{ + unsigned int Starting_address; + int i = 1; + printf("请输入操作(十进制)起始地址 \n"); + do + { + if (i == 1) + { + i = 0; + cout << "请输入操作(十进制)起始地址:"; + } + else + cout << "请重新输入操作(十进制)起始地址"; + cin >> Starting_address; + cin.clear(); + cin.sync(); + } while (Starting_address > 65535 || Starting_address < 0); + return Starting_address; +} + +/********************************************************************************************* +* 功能    : 输入操作数量 +* 描述   : 操作数量,0x01 1-200 0x03 1-125 0x0xF 1-1968 0x10 1-123 +* 输入 : Function_code 选择的功能码类型 +* 输出 : Operations_Number 对应功能码类型的操作数量 +*********************************************************************************************/ +unsigned int Input_Operations_Number(int Function_code) +{ + unsigned int Operations_Number; + int i = 1; + bool flage = true; + printf(" 功能码 0x01 0x03 0x0F 0x10\n"); + printf("操作数量 1-2000 1-125 1-1968 1-123\n"); + do + { + if (i == 1) + { + i = 0; + cout << "请输入操作(十进制)数量:"; + } + else + cout << "请重新输入操作(十进制)数量"; + cin >> Operations_Number; + cin.clear(); + cin.sync(); + if (Function_code == 0x01 && Operations_Number >= 1 && Operations_Number <= 2000) + flage = false; + if (Function_code == 0x03 && Operations_Number >= 1 && Operations_Number <= 125) + flage = false; + if (Function_code == 0x0F && Operations_Number >= 1 && Operations_Number <= 1968) + flage = false; + if (Function_code == 0x10 && Operations_Number >= 1 && Operations_Number <= 123) + flage = false; + } while (flage); + return Operations_Number; +} \ No newline at end of file diff --git a/Modbus_communication/Modbus_TCP/main.cpp b/Modbus_communication/Modbus_TCP/main.cpp index bd2a329..b25b3c6 100644 --- a/Modbus_communication/Modbus_TCP/main.cpp +++ b/Modbus_communication/Modbus_TCP/main.cpp @@ -6,28 +6,36 @@ int main() //unsigned int Port_number; //Input_IP(IP, &Port_number); //Tcp_client(IP, Port_number); - - int Function_code; + int Function_code = 0x01; + unsigned int Operations_Number; while (1) { - cin >> hex; int i = 1; - printf(" 0x01 0x03 0x0F 0x10 \n"); - printf("˵ Ȧ Ĵ дȦ дĴ\n"); + bool flage = true; + printf(" 0x01 0x03 0x0F 0x10\n"); + printf(" 1-2000 1-125 1-1968 1-123\n"); do { if (i == 1) { i = 0; - cout << "ѡĹ룺"; + cout << "(ʮ)"; } else - cout << "빦ѡĹ"; - cin >> Function_code; + cout << "(ʮ)"; + cin >> Operations_Number; cin.clear(); cin.sync(); - } while (Function_code != 0x01 && Function_code != 0x03 && Function_code != 0x0F && Function_code != 0x10); - printf("%02X", Function_code); + if (Function_code == 0x01 && Operations_Number >= 1 && Operations_Number <= 2000) + flage = false; + if (Function_code == 0x03 && Operations_Number >= 1 && Operations_Number <= 125) + flage = false; + if (Function_code == 0x0F && Operations_Number >= 1 && Operations_Number <= 1968) + flage = false; + if (Function_code == 0x10 && Operations_Number >= 1 && Operations_Number <= 123) + flage = false; + } while (flage); + printf("%02X", Operations_Number); getchar(); } getchar();