|
@@ -1,4 +1,38 @@ |
|
|
#include "main.h" |
|
|
#include "main.h" |
|
|
|
|
|
//#include <stdlib.h> |
|
|
|
|
|
|
|
|
|
|
|
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; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
int main() |
|
|
int main() |
|
|
{ |
|
|
{ |
|
@@ -6,35 +40,37 @@ int main() |
|
|
//unsigned int Port_number; |
|
|
//unsigned int Port_number; |
|
|
//Input_IP(IP, &Port_number); |
|
|
//Input_IP(IP, &Port_number); |
|
|
//Tcp_client(IP, Port_number); |
|
|
//Tcp_client(IP, Port_number); |
|
|
int Function_code = 0x01; |
|
|
|
|
|
unsigned int Operations_Number; |
|
|
|
|
|
|
|
|
int Function_code = 0x0F; |
|
|
|
|
|
unsigned int Operations_Number = 30; |
|
|
|
|
|
unsigned int Write_date_number ; |
|
|
while (1) |
|
|
while (1) |
|
|
{ |
|
|
{ |
|
|
|
|
|
if (Function_code == 0x01 || Function_code == 0x03) |
|
|
|
|
|
return 0;//读线圈不需要输入改变数据 |
|
|
int i = 1; |
|
|
int i = 1; |
|
|
bool flage = true; |
|
|
|
|
|
printf(" 功能码 0x01 0x03 0x0F 0x10\n"); |
|
|
|
|
|
printf("操作数量 1-2000 1-125 1-1968 1-123\n"); |
|
|
|
|
|
|
|
|
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 |
|
|
do |
|
|
{ |
|
|
{ |
|
|
if (i == 1) |
|
|
if (i == 1) |
|
|
{ |
|
|
{ |
|
|
i = 0; |
|
|
i = 0; |
|
|
cout << "请输入操作(十进制)数量:"; |
|
|
|
|
|
|
|
|
printf("请输入%d组写入数据 :", Write_date_number); |
|
|
} |
|
|
} |
|
|
else |
|
|
else |
|
|
cout << "请重新输入操作(十进制)数量"; |
|
|
|
|
|
cin >> Operations_Number; |
|
|
|
|
|
|
|
|
printf("请重新输入%d组写入数据 :",Write_date_number); |
|
|
|
|
|
getline(cin, Write_date); |
|
|
cin.clear(); |
|
|
cin.clear(); |
|
|
cin.sync(); |
|
|
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); |
|
|
|
|
|
|
|
|
} while (!Check_Write_date(Write_date, Write_date_number)); |
|
|
printf("%02X", Operations_Number); |
|
|
printf("%02X", Operations_Number); |
|
|
getchar(); |
|
|
getchar(); |
|
|
} |
|
|
} |
|
|