|
|
@@ -1,79 +1,24 @@ |
|
|
|
#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; |
|
|
|
} |
|
|
|
#define DEVICE_ID 0x10 |
|
|
|
|
|
|
|
int main() |
|
|
|
{ |
|
|
|
//string IP; |
|
|
|
//unsigned int Port_number; |
|
|
|
//Input_IP(IP, &Port_number); |
|
|
|
//Tcp_client(IP, Port_number); |
|
|
|
int Function_code = 0x0F; |
|
|
|
unsigned int Operations_Number = 30; |
|
|
|
unsigned int Write_date_number ; |
|
|
|
while (1) |
|
|
|
int Operations_Number = 4; |
|
|
|
UINT8 Message[260]; |
|
|
|
Message[0] = 0x00; |
|
|
|
Message[1] = 0x00; |
|
|
|
Message[2] = 0x00; |
|
|
|
Message[3] = 0x00; |
|
|
|
|
|
|
|
Message[4] = 0x00; |
|
|
|
Message[5] = Operations_Number; |
|
|
|
Message[6] = DEVICE_ID; |
|
|
|
for (int i = 0; i < 7; i++) |
|
|
|
{ |
|
|
|
if (Function_code == 0x01 || Function_code == 0x03) |
|
|
|
return 0;//读线圈不需要输入改变数据 |
|
|
|
int i = 1; |
|
|
|
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 |
|
|
|
{ |
|
|
|
if (i == 1) |
|
|
|
{ |
|
|
|
i = 0; |
|
|
|
printf("请输入%d组写入数据 :", Write_date_number); |
|
|
|
} |
|
|
|
else |
|
|
|
printf("请重新输入%d组写入数据 :",Write_date_number); |
|
|
|
getline(cin, Write_date); |
|
|
|
cin.clear(); |
|
|
|
cin.sync(); |
|
|
|
} while (!Check_Write_date(Write_date, Write_date_number)); |
|
|
|
printf("%02X", Operations_Number); |
|
|
|
getchar(); |
|
|
|
printf("%02X", Message[i]); |
|
|
|
} |
|
|
|
|
|
|
|
getchar(); |
|
|
|
return 0; |
|
|
|
} |