| @@ -2,7 +2,7 @@ | |||||
| #define __RTU_SALVE_H | #define __RTU_SALVE_H | ||||
| #include "common.h" | #include "common.h" | ||||
| #define Device_ID 0x01 | |||||
| #define Device_ID 0x09 | |||||
| #define MAX_Address 9999 | #define MAX_Address 9999 | ||||
| #define MAX_NUMBER 256 | #define MAX_NUMBER 256 | ||||
| @@ -107,3 +107,89 @@ | |||||
| 2020-9-10 19:43:18 Send:00 00 00 00 00 06 01 01 00 00 00 01 | 2020-9-10 19:43:18 Send:00 00 00 00 00 06 01 01 00 00 00 01 | ||||
| 2020-9-10 19:43:18 Recv:00 00 00 00 00 04 01 02 01 00 | 2020-9-10 19:43:18 Recv:00 00 00 00 00 04 01 02 01 00 | ||||
| 2020-9-10 19:52:36 Send:00 00 00 00 00 06 01 01 00 00 00 01 | 2020-9-10 19:52:36 Send:00 00 00 00 00 06 01 01 00 00 00 01 | ||||
| 2020-9-10 20:34:25 Send:00 00 00 00 00 06 01 01 00 00 00 0A | |||||
| 2020-9-10 20:35:9 Send:00 00 00 00 00 06 01 01 00 00 00 0A | |||||
| 2020-9-10 20:35:12 Recv:00 00 00 00 00 03 01 83 04 | |||||
| 2020-9-10 20:35:38 Send:00 00 00 00 00 06 01 01 00 00 00 0A | |||||
| 2020-9-10 20:35:40 Recv:00 00 00 00 00 03 01 83 04 | |||||
| 2020-9-10 20:36:11 Send:00 00 00 00 00 06 09 01 00 00 00 0A | |||||
| 2020-9-10 20:36:13 Recv:00 00 00 00 00 05 09 01 02 00 00 | |||||
| 2020-9-10 20:37:32 Send:00 00 00 00 00 07 09 0F 00 00 00 01 01 01 | |||||
| 2020-9-10 20:37:34 Recv:00 00 00 00 00 03 09 83 04 | |||||
| 2020-9-11 9:41:11 Send:00 00 00 00 00 06 09 01 00 00 07 D0 | |||||
| 2020-9-11 9:41:12 Recv:00 00 00 00 00 FD 09 01 FA 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | |||||
| 2020-9-11 9:41:40 Send:00 00 00 00 00 08 09 0F 00 00 00 0A 02 55 03 | |||||
| 2020-9-11 9:41:40 Recv:00 00 00 00 00 05 09 0F 02 00 00 | |||||
| 2020-9-11 9:41:52 Send:00 00 00 00 00 06 09 01 00 00 00 0A | |||||
| 2020-9-11 9:41:52 Recv:00 00 00 00 00 05 09 01 02 00 00 | |||||
| 2020-9-11 9:43:32 Send:00 00 00 00 00 06 09 01 00 00 00 0A | |||||
| 2020-9-11 9:43:32 Recv:00 00 00 00 00 05 09 01 02 00 00 | |||||
| 2020-9-11 9:43:49 Send:00 00 00 00 00 08 09 0F 00 00 00 0A 02 FF FF | |||||
| 2020-9-11 9:43:49 Recv:00 00 00 00 00 05 09 0F 02 00 00 | |||||
| 2020-9-11 9:43:54 Send:00 00 00 00 00 06 09 01 00 00 00 0A | |||||
| 2020-9-11 9:43:54 Recv:00 00 00 00 00 05 09 01 02 00 00 | |||||
| 2020-9-11 9:45:19 Send:00 00 00 00 00 06 09 01 00 00 00 01 | |||||
| 2020-9-11 10:43:2 Send:00 00 00 00 00 06 09 01 00 00 07 D0 | |||||
| 2020-9-11 10:43:37 Send:00 00 00 00 00 06 01 01 00 00 07 D0 | |||||
| 2020-9-11 10:43:37 Recv:00 00 00 00 00 FD 01 01 FA 80 01 CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC | |||||
| 2020-9-11 10:44:9 Send:00 00 00 00 00 07 01 0F 00 00 00 02 01 01 | |||||
| 2020-9-11 10:44:9 Recv:00 00 00 00 00 06 01 0F 00 00 00 02 | |||||
| 2020-9-11 10:44:18 Send:00 00 00 00 00 06 01 03 00 00 00 02 | |||||
| 2020-9-11 10:44:18 Recv:00 00 00 00 00 07 01 03 04 CC CC 00 06 | |||||
| 2020-9-11 10:44:51 Send:00 00 00 00 00 06 01 01 00 00 00 03 | |||||
| 2020-9-11 10:44:59 Send:00 00 00 00 00 06 01 03 00 00 00 01 | |||||
| 2020-9-11 10:45:18 Send:00 00 00 00 00 06 01 01 00 00 07 D0 | |||||
| 2020-9-11 10:45:39 Send:00 00 00 00 00 06 01 01 00 00 07 D0 | |||||
| 2020-9-11 10:49:56 Send:00 00 00 00 00 06 01 01 00 00 00 01 | |||||
| 2020-9-11 10:49:57 Recv:00 00 00 00 00 04 01 01 01 01 | |||||
| 2020-9-11 10:50:46 Send:00 00 00 00 00 06 01 01 00 00 07 D0 | |||||
| 2020-9-11 10:50:47 Recv:00 00 00 00 00 FD 01 01 FA FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF | |||||
| 2020-9-11 10:51:19 Send:00 00 00 00 00 06 01 01 0F 9F 00 01 | |||||
| 2020-9-11 10:51:19 Recv:00 00 00 00 00 04 01 01 01 01 | |||||
| 2020-9-11 10:51:31 Send:00 00 00 00 00 06 01 01 0F 9F 00 02 | |||||
| 2020-9-11 10:51:31 Recv:00 00 00 00 00 04 01 01 01 03 | |||||
| 2020-9-11 14:30:53 Send:00 00 00 00 00 06 01 01 00 00 00 01 | |||||
| 2020-9-11 14:31:47 Send:00 00 00 00 00 06 01 01 00 00 00 01 | |||||
| 2020-9-11 15:3:3 Send:00 00 00 00 00 06 01 01 00 00 00 01 | |||||
| 2020-9-11 15:3:12 Send:00 00 00 00 00 06 01 03 00 00 00 0A | |||||
| 2020-9-11 15:3:28 Send:00 00 00 00 00 06 01 01 00 00 00 01 | |||||
| 2020-9-11 15:3:28 Recv:00 00 00 00 00 06 09 01 00 00 00 0A 00 00 00 00 00 06 09 01 00 00 00 0A 00 00 00 00 00 06 09 01 00 00 00 0A 00 00 00 00 00 06 09 01 00 00 00 0A 00 00 00 00 00 06 09 01 00 00 00 0A 00 00 00 00 00 06 09 01 00 00 00 0A 00 00 00 00 00 06 09 01 00 00 00 0A 00 00 00 00 00 06 09 01 00 00 00 0A | |||||
| 2020-9-11 15:4:6 Send:00 00 00 00 00 06 01 01 00 00 00 01 | |||||
| 2020-9-11 15:4:57 Send:00 00 00 00 00 06 01 01 00 00 00 01 | |||||
| 2020-9-11 15:40:39 Send:00 00 00 00 00 06 01 01 00 00 00 01 | |||||
| 2020-9-11 15:40:39 Recv:00 00 00 00 00 03 01 81 01 | |||||
| 2020-9-11 15:40:49 Send:00 00 00 00 00 06 01 03 00 00 00 01 | |||||
| 2020-9-11 15:40:49 Recv:00 00 00 00 00 05 01 03 02 00 00 | |||||
| 2020-9-11 15:41:1 Send:00 00 00 00 00 08 01 10 00 00 00 01 02 FF FF | |||||
| 2020-9-11 15:41:1 Recv:00 00 00 00 00 06 01 10 00 00 00 01 | |||||
| 2020-9-11 15:41:7 Send:00 00 00 00 00 06 01 03 00 00 00 01 | |||||
| 2020-9-11 15:42:7 Send:00 00 00 00 00 08 01 10 00 00 00 01 02 FF FF | |||||
| 2020-9-11 15:42:7 Recv:00 00 00 00 00 06 01 10 00 00 00 01 | |||||
| 2020-9-11 15:42:20 Send:00 00 00 00 00 06 01 03 00 00 00 01 | |||||
| 2020-9-11 15:43:6 Send:00 00 00 00 00 08 01 10 00 00 00 01 02 FF FF | |||||
| 2020-9-11 15:43:6 Recv:00 00 00 00 00 06 01 10 00 00 00 01 | |||||
| 2020-9-11 15:43:15 Send:00 00 00 00 00 0A 01 10 00 00 00 02 04 FF FF FF FF | |||||
| 2020-9-11 16:3:43 Send:00 00 00 00 00 08 01 0F 00 00 00 01 01 01 | |||||
| 2020-9-11 16:4:35 Send:00 00 00 00 00 14 01 0F 00 00 00 64 0D FF FF FF FF FF FF FF FF FF FF FF FF FF | |||||
| 2020-9-11 16:27:48 Send:00 00 00 00 00 08 01 0F 00 00 00 01 01 01 | |||||
| 2020-9-11 16:27:48 Recv:00 00 00 00 00 03 01 8F 01 | |||||
| 2020-9-11 16:28:6 Send:00 00 00 00 00 09 01 10 00 00 00 01 02 11 11 | |||||
| 2020-9-11 16:28:6 Recv:00 00 00 00 00 06 01 10 00 00 00 01 | |||||
| 2020-9-11 16:28:28 Send:00 00 00 00 00 09 01 10 00 01 00 01 02 11 11 | |||||
| 2020-9-11 16:28:28 Recv:00 00 00 00 00 06 01 10 00 01 00 01 | |||||
| 2020-9-11 16:30:43 Send:00 00 00 00 00 11 01 10 00 06 00 05 0A 11 11 11 11 11 11 11 11 11 11 | |||||
| 2020-9-11 16:49:47 Send:00 00 00 00 00 06 01 01 00 00 00 01 | |||||
| 2020-9-11 16:49:47 Recv:00 00 00 00 00 03 01 81 01 | |||||
| 2020-9-11 16:49:52 Send:00 01 00 00 00 06 01 01 00 00 00 0A | |||||
| 2020-9-11 16:49:52 Recv:00 01 00 00 00 03 01 81 01 | |||||
| 2020-9-11 17:17:10 Send:00 02 00 00 00 06 01 01 00 00 00 01 | |||||
| 2020-9-11 17:19:2 Send:00 00 00 00 00 06 01 01 00 00 00 0A | |||||
| 2020-9-11 17:19:2 Recv:00 00 00 00 00 03 01 81 01 | |||||
| 2020-9-11 17:19:7 Send:00 01 00 00 00 06 01 01 00 00 00 01 | |||||
| 2020-9-11 17:19:7 Recv:00 01 00 00 00 03 01 81 01 | |||||
| 2020-9-11 17:19:13 Send:00 02 00 00 00 06 01 01 00 01 00 01 | |||||
| 2020-9-11 17:19:13 Recv:00 02 00 00 00 03 01 81 01 | |||||
| 2020-9-11 17:19:30 Send:00 03 00 00 00 09 01 10 00 00 00 01 02 FF FF | |||||
| 2020-9-11 17:19:30 Recv:00 03 00 00 00 06 01 10 00 00 00 01 | |||||
| 2020-9-11 17:19:38 Send:00 04 00 00 00 06 01 03 00 00 00 01 | |||||
| 2020-9-11 17:19:38 Recv:00 04 00 00 00 05 01 03 02 FF FF | |||||
| @@ -96,9 +96,10 @@ SOCKET Init_client(string IP, unsigned int Port_number) | |||||
| Serversock_in.sin_addr.S_un.S_addr = inet_addr(IP.c_str()); | Serversock_in.sin_addr.S_un.S_addr = inet_addr(IP.c_str()); | ||||
| Serversock_in.sin_family = AF_INET; | Serversock_in.sin_family = AF_INET; | ||||
| Serversock_in.sin_port = htons(Port_number); | Serversock_in.sin_port = htons(Port_number); | ||||
| while (SOCKET_ERROR == connect(ClientSocket, (SOCKADDR*)&Serversock_in, sizeof(SOCKADDR))) | |||||
| if(SOCKET_ERROR == connect(ClientSocket, (SOCKADDR*)&Serversock_in, sizeof(SOCKADDR))) | |||||
| { | { | ||||
| cout << "尝试连接TCP从站失败" << endl; | cout << "尝试连接TCP从站失败" << endl; | ||||
| return INVALID_SOCKET; | |||||
| } | } | ||||
| cout << "连接TCP从站成功" << endl; | cout << "连接TCP从站成功" << endl; | ||||
| TIMEVAL timeout; | TIMEVAL timeout; | ||||
| @@ -108,36 +109,6 @@ SOCKET Init_client(string IP, unsigned int Port_number) | |||||
| return ClientSocket; | return ClientSocket; | ||||
| } | } | ||||
| /********************************************************************************************* | |||||
| * 功能 : 清除接收缓冲区中的数据和异常连接状态检测 | |||||
| * 描述 : 每一次发送请求前清空缓存区数据,检测当前套接字连接状态 | |||||
| * 输入 : ClientSocket 客户端套接字 | |||||
| * 输出 : true 连接正常 false 连接异常 | |||||
| *********************************************************************************************/ | |||||
| bool Clear_recv_buf(SOCKET clientSocket) | |||||
| { | |||||
| TIMEVAL timeout; | |||||
| timeout.tv_sec = 0; | |||||
| timeout.tv_usec = 0; | |||||
| fd_set reads; | |||||
| char tmp[100]; | |||||
| memset(tmp, 0, sizeof(tmp)); | |||||
| while (1) | |||||
| { | |||||
| FD_ZERO(&reads); | |||||
| FD_SET(clientSocket, &reads); | |||||
| int len = recv(clientSocket, tmp, 50, 0); | |||||
| int a = select(0, &reads, 0, 0, &timeout); | |||||
| if ( a == 1 && len == 0) | |||||
| return false; | |||||
| if ( a == 1&& len == (-1)) | |||||
| return false; | |||||
| if ( a == 0 && len == (-1)) | |||||
| return true; | |||||
| } | |||||
| } | |||||
| /********************************************************************************************* | /********************************************************************************************* | ||||
| * 功能 : 打印读取从站的线圈状态 | * 功能 : 打印读取从站的线圈状态 | ||||
| * 描述 : 对响应报文中的数据进行解析和显示 | * 描述 : 对响应报文中的数据进行解析和显示 | ||||
| @@ -207,24 +178,33 @@ void Printf_Anomaly_date(UINT8 *Response_Message) | |||||
| *********************************************************************************************/ | *********************************************************************************************/ | ||||
| bool Analysis_Response_Message(UINT8 *Response_Message, UINT8 *Request_Message, int Response_Message_len) | bool Analysis_Response_Message(UINT8 *Response_Message, UINT8 *Request_Message, int Response_Message_len) | ||||
| { | { | ||||
| if (Response_Message[7] == Request_Message[7] + 0x80 && Response_Message_len == 9)//先处理异常响应 | |||||
| for (int i = 0; i < 7; i++) | |||||
| { | { | ||||
| Printf_Anomaly_date(Response_Message); | |||||
| return true; | |||||
| if (i == 4 || i == 5) //后续字节长度 | |||||
| continue; | |||||
| if (Response_Message[i] != Request_Message[i]) //0 1 传输标识,2 3 协议标识,6设备ID | |||||
| return false; //一旦不一致,判定为异常报文 | |||||
| } | } | ||||
| else if (Response_Message[6] == Request_Message[6]) //判断是否是正常响应帧 | |||||
| if (Response_Message[4] != 0x00 || (Response_Message_len - 6) != Response_Message[5]) //4 固定0x00 帧长度判定 | |||||
| return false; | |||||
| if (Response_Message[7] == Request_Message[7] + 0x80 && Response_Message_len == 9)//先处理异常响应 | |||||
| { | { | ||||
| if (Response_Message[7] == 0x01 && Response_Message_len - 6 == Response_Message[5]) | |||||
| Printf_Coil_date(Response_Message, Request_Message); | |||||
| if (Response_Message[7] == 0x03 && Response_Message_len - 6 == Response_Message[5]) | |||||
| Printf_Register_date(Response_Message, Request_Message); | |||||
| if (Response_Message[7] == 0x0F) | |||||
| printf("成功写入从站线圈%d个\n", ((Request_Message[10] << 8) | Request_Message[11])); | |||||
| if (Response_Message[7] == 0x10) | |||||
| printf("成功写入从站寄存器%d个\n" ,((Request_Message[10] << 8) | Request_Message[11])); | |||||
| Printf_Anomaly_date(Response_Message); | |||||
| return true; | return true; | ||||
| } | } | ||||
| return false; | |||||
| if (Response_Message[7] == 0x01) | |||||
| Printf_Coil_date(Response_Message, Request_Message); | |||||
| else if (Response_Message[7] == 0x03) | |||||
| Printf_Register_date(Response_Message, Request_Message); | |||||
| else if (Response_Message[7] == 0x0F) | |||||
| printf("成功写入从站线圈%d个\n", ((Request_Message[10] << 8) | Request_Message[11])); | |||||
| else if (Response_Message[7] == 0x10) | |||||
| printf("成功写入从站寄存器%d个\n", ((Request_Message[10] << 8) | Request_Message[11])); | |||||
| else | |||||
| return false; | |||||
| return true; | |||||
| } | } | ||||
| /********************************************************************************************* | /********************************************************************************************* | ||||
| @@ -234,24 +214,37 @@ bool Analysis_Response_Message(UINT8 *Response_Message, UINT8 *Request_Message, | |||||
| * Port_number 端口号(1-65535) | * Port_number 端口号(1-65535) | ||||
| * 输出 : false 执行出错 true 执行成功 | * 输出 : false 执行出错 true 执行成功 | ||||
| *********************************************************************************************/ | *********************************************************************************************/ | ||||
| bool Tcp_client(string IP, unsigned int Port_number) | |||||
| bool Tcp_client() | |||||
| { | { | ||||
| SOCKET ClientSocket = Init_client(IP, Port_number); | |||||
| SOCKET ClientSocket; | |||||
| string IP; | |||||
| unsigned int Port_number; | |||||
| do | |||||
| { | |||||
| Input_IP(IP, &Port_number); | |||||
| ClientSocket = Init_client(IP, Port_number); | |||||
| } while (INVALID_SOCKET == ClientSocket); | |||||
| if (INVALID_SOCKET == ClientSocket) | if (INVALID_SOCKET == ClientSocket) | ||||
| { | { | ||||
| cout << "初始化主站失败" << endl; | cout << "初始化主站失败" << endl; | ||||
| return false; | |||||
| } | } | ||||
| UINT8 Request_Message[300]; | |||||
| UINT8 Response_Message[300]; | |||||
| UINT8 Request_Message[600]; | |||||
| UINT8 Response_Message[600]; | |||||
| TIMEVAL timeout; | |||||
| timeout.tv_sec = 0; | |||||
| timeout.tv_usec = 0; | |||||
| fd_set reads; | |||||
| UINT16 Transmission_Indicator = 0x00; | |||||
| while (true) | while (true) | ||||
| { | { | ||||
| int Function_code = Input_Function_code(); | int Function_code = Input_Function_code(); | ||||
| unsigned int Operations_Number = Input_Operations_Number(Function_code); | unsigned int Operations_Number = Input_Operations_Number(Function_code); | ||||
| unsigned int Starting_address = Input_Starting_address(); | unsigned int Starting_address = Input_Starting_address(); | ||||
| string Write_date = Input_Write_date(Function_code, Operations_Number); | string Write_date = Input_Write_date(Function_code, Operations_Number); | ||||
| int Request_Message_len = Crate_TCP_Message(Request_Message, Function_code, Operations_Number, Starting_address, Write_date); | int Request_Message_len = Crate_TCP_Message(Request_Message, Function_code, Operations_Number, Starting_address, Write_date); | ||||
| Request_Message[0] = Transmission_Indicator >> 8; | |||||
| Request_Message[1] = Transmission_Indicator; | |||||
| printf("主站请求 :"); | printf("主站请求 :"); | ||||
| for (int i = 0; i < Request_Message_len; i++) | for (int i = 0; i < Request_Message_len; i++) | ||||
| { | { | ||||
| @@ -259,24 +252,23 @@ bool Tcp_client(string IP, unsigned int Port_number) | |||||
| } | } | ||||
| printf("\n"); | printf("\n"); | ||||
| Log_Note(Request_Message, 1, Request_Message_len); | Log_Note(Request_Message, 1, Request_Message_len); | ||||
| if (Clear_recv_buf(ClientSocket) == false) | |||||
| int test = send(ClientSocket, (char*)Request_Message, Request_Message_len, 0); | |||||
| if (Transmission_Indicator == 0xffff) | |||||
| { | { | ||||
| printf("连接异常,请检查连接状态。\n"); | |||||
| printf("**************************** Press Enter To Close ****************************\n"); | |||||
| getchar(); | |||||
| break; | |||||
| Transmission_Indicator = 0x00; | |||||
| } | } | ||||
| int test = send(ClientSocket, (char*)Request_Message, Request_Message_len, 0); | |||||
| Transmission_Indicator++; | |||||
| if (test == (-1)) | if (test == (-1)) | ||||
| { | { | ||||
| printf("连接异常,请检查连接状态。\n"); | printf("连接异常,请检查连接状态。\n"); | ||||
| printf("**************************** Press Enter To Close ****************************\n"); | printf("**************************** Press Enter To Close ****************************\n"); | ||||
| getchar(); | |||||
| break; | break; | ||||
| } | } | ||||
| memset(Response_Message, 0, 300); | memset(Response_Message, 0, 300); | ||||
| int Response_Message_len = recv(ClientSocket, (char*)Response_Message, 260, 0); | |||||
| FD_ZERO(&reads); | |||||
| FD_SET(ClientSocket, &reads); | |||||
| int Response_Message_len = recv(ClientSocket, (char*)Response_Message, 600, 0); | |||||
| if (Response_Message_len > 0) | if (Response_Message_len > 0) | ||||
| { | { | ||||
| Log_Note(Response_Message, 0, Response_Message_len); | Log_Note(Response_Message, 0, Response_Message_len); | ||||
| @@ -289,6 +281,12 @@ bool Tcp_client(string IP, unsigned int Port_number) | |||||
| if (!Analysis_Response_Message(Response_Message, Request_Message, Response_Message_len)) | if (!Analysis_Response_Message(Response_Message, Request_Message, Response_Message_len)) | ||||
| printf("响应报文异常\n\n"); | printf("响应报文异常\n\n"); | ||||
| } | } | ||||
| else if (select(0, &reads, 0, 0, &timeout)) | |||||
| { | |||||
| printf("连接异常,请检查连接状态。\n"); | |||||
| printf("**************************** Press Enter To Close ****************************\n"); | |||||
| break; | |||||
| } | |||||
| else | else | ||||
| cout << "响应超时" << endl; | cout << "响应超时" << endl; | ||||
| printf("**************************** Press Enter To Contioun ****************************\n"); | printf("**************************** Press Enter To Contioun ****************************\n"); | ||||
| @@ -8,7 +8,7 @@ | |||||
| bool InitSocket_Version(void); | bool InitSocket_Version(void); | ||||
| bool Check_IP(char* IP); | bool Check_IP(char* IP); | ||||
| void Input_IP(string& IP, unsigned int *Port_number); | void Input_IP(string& IP, unsigned int *Port_number); | ||||
| bool Tcp_client(string IP, unsigned int Port_number); | |||||
| bool Tcp_client(); | |||||
| bool Analysis_Response_Message(UINT8 *Response_Message, UINT8 *Request_Message, int Response_Message_len); | bool Analysis_Response_Message(UINT8 *Response_Message, UINT8 *Request_Message, int Response_Message_len); | ||||
| @@ -83,13 +83,13 @@ unsigned int Input_Operations_Number(int Function_code) | |||||
| cin >> Operations_Number; | cin >> Operations_Number; | ||||
| cin.clear(); | cin.clear(); | ||||
| cin.sync(); | cin.sync(); | ||||
| if (Function_code == 0x01 && Operations_Number >= 1 && Operations_Number <= 2000) | |||||
| if (Function_code == 0x01 && Operations_Number >= 0 && Operations_Number <= 65535) | |||||
| flage = false; | flage = false; | ||||
| if (Function_code == 0x03 && Operations_Number >= 1 && Operations_Number <= 125) | |||||
| if (Function_code == 0x03 && Operations_Number >= 0 && Operations_Number <= 65535) | |||||
| flage = false; | flage = false; | ||||
| if (Function_code == 0x0F && Operations_Number >= 1 && Operations_Number <= 1968) | |||||
| if (Function_code == 0x0F && Operations_Number >= 0 && Operations_Number <= 65535) | |||||
| flage = false; | flage = false; | ||||
| if (Function_code == 0x10 && Operations_Number >= 1 && Operations_Number <= 123) | |||||
| if (Function_code == 0x10 && Operations_Number >= 0 && Operations_Number <= 65535) | |||||
| flage = false; | flage = false; | ||||
| } while (flage); | } while (flage); | ||||
| return Operations_Number; | return Operations_Number; | ||||
| @@ -215,6 +215,10 @@ void Crate_MBAP(UINT8 *Message, int Function_code, unsigned int Operations_Numbe | |||||
| Message[3] = 0x00; | Message[3] = 0x00; | ||||
| Message[4] = 0x00; | Message[4] = 0x00; | ||||
| Message[5] = Count_Write_date_number(Function_code, Operations_Number) + 0x06; | Message[5] = Count_Write_date_number(Function_code, Operations_Number) + 0x06; | ||||
| if (Function_code == 0x0F || Function_code == 0x10) | |||||
| { | |||||
| Message[5] = Message[5] + 1; | |||||
| } | |||||
| Message[6] = DEVICE_ID; | Message[6] = DEVICE_ID; | ||||
| } | } | ||||
| @@ -288,7 +292,6 @@ void Log_Note(UINT8 *Message, int flage, int Message_len) | |||||
| printf("打开文件失败"); | printf("打开文件失败"); | ||||
| return ; | return ; | ||||
| } | } | ||||
| if (flage == 1) | if (flage == 1) | ||||
| { | { | ||||
| @@ -2,10 +2,7 @@ | |||||
| int main() | int main() | ||||
| { | { | ||||
| string IP; | |||||
| unsigned int Port; | |||||
| Input_IP(IP,&Port); | |||||
| Tcp_client(IP,Port); | |||||
| Tcp_client(); | |||||
| getchar(); | getchar(); | ||||
| return 0; | return 0; | ||||
| } | } | ||||