Browse Source

添加输入操作数量模块

Modbus_TCP
zcn1123 4 years ago
parent
commit
4918cfde7c
2 changed files with 83 additions and 11 deletions
  1. +65
    -1
      Modbus_communication/Modbus_TCP/common.cpp
  2. +18
    -10
      Modbus_communication/Modbus_TCP/main.cpp

+ 65
- 1
Modbus_communication/Modbus_TCP/common.cpp View File

@@ -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;
}

+ 18
- 10
Modbus_communication/Modbus_TCP/main.cpp View File

@@ -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();


Loading…
Cancel
Save