From 30bb1d653189935a50f8370a6973c23e2e2318c5 Mon Sep 17 00:00:00 2001
From: zcn1123 <2363211205@qq.com>
Date: Fri, 11 Sep 2020 17:42:25 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=BC=82=E5=B8=B8=E9=87=8A?=
 =?UTF-8?q?=E6=94=BEbug=EF=BC=8C=E4=BF=AE=E6=94=B9=E4=BC=A0=E8=BE=93?=
 =?UTF-8?q?=E6=A0=87=E8=AF=86=E7=AC=A6=E5=88=A4=E5=AE=9A?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../Modbus_RTU_Salve/RTU_Salve.h              |   2 +-
 .../Modbus_TCP/Modbus_TCP_log.txt             |  86 +++++++++++++
 .../Modbus_TCP/TCP_client.cpp                 | 116 +++++++++---------
 Modbus_communication/Modbus_TCP/TCP_client.h  |   2 +-
 Modbus_communication/Modbus_TCP/common.cpp    |  13 +-
 Modbus_communication/Modbus_TCP/main.cpp      |   5 +-
 6 files changed, 154 insertions(+), 70 deletions(-)

diff --git a/Modbus_communication/Modbus_RTU_Salve/RTU_Salve.h b/Modbus_communication/Modbus_RTU_Salve/RTU_Salve.h
index 6e3c155..dc08f61 100644
--- a/Modbus_communication/Modbus_RTU_Salve/RTU_Salve.h
+++ b/Modbus_communication/Modbus_RTU_Salve/RTU_Salve.h
@@ -2,7 +2,7 @@
 #define __RTU_SALVE_H
 
 #include "common.h"
-#define Device_ID 0x01
+#define Device_ID 0x09
 #define MAX_Address 9999
 #define MAX_NUMBER 256
 
diff --git a/Modbus_communication/Modbus_TCP/Modbus_TCP_log.txt b/Modbus_communication/Modbus_TCP/Modbus_TCP_log.txt
index 85c1e55..a0c3a7a 100644
--- a/Modbus_communication/Modbus_TCP/Modbus_TCP_log.txt
+++ b/Modbus_communication/Modbus_TCP/Modbus_TCP_log.txt
@@ -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 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 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 
diff --git a/Modbus_communication/Modbus_TCP/TCP_client.cpp b/Modbus_communication/Modbus_TCP/TCP_client.cpp
index 8ae751c..51986d9 100644
--- a/Modbus_communication/Modbus_TCP/TCP_client.cpp
+++ b/Modbus_communication/Modbus_TCP/TCP_client.cpp
@@ -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_family = AF_INET;
 	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;
+		return INVALID_SOCKET;
 	}
 	cout << "连接TCP从站成功" << endl;
 	TIMEVAL timeout;
@@ -108,36 +109,6 @@ SOCKET Init_client(string IP, unsigned int Port_number)
 	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)
 {
-	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 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)
 * 输出    :    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)
 	{
 		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)
 	{
-
 		int Function_code = Input_Function_code();
 		unsigned int Operations_Number = Input_Operations_Number(Function_code);
 		unsigned int Starting_address = Input_Starting_address();
 		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);
+		Request_Message[0] = Transmission_Indicator >> 8;
+		Request_Message[1] = Transmission_Indicator;
 		printf("主站请求 :");
 		for (int i = 0; i < Request_Message_len; i++)
 		{
@@ -259,24 +252,23 @@ bool Tcp_client(string IP, unsigned int Port_number)
 		}
 		printf("\n");
 		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))
 		{
 			printf("连接异常,请检查连接状态。\n");
 			printf("**************************** Press Enter To Close ****************************\n");
-			getchar();
 			break;
 		}
 		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)
 		{
 			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))
 				printf("响应报文异常\n\n");
 		}
+		else if (select(0, &reads, 0, 0, &timeout))
+		{
+			printf("连接异常,请检查连接状态。\n");
+			printf("**************************** Press Enter To Close ****************************\n");
+			break;
+		}
 		else
 			cout << "响应超时" << endl;
 		printf("**************************** Press Enter To Contioun ****************************\n");
diff --git a/Modbus_communication/Modbus_TCP/TCP_client.h b/Modbus_communication/Modbus_TCP/TCP_client.h
index dc7b35e..e38cf8e 100644
--- a/Modbus_communication/Modbus_TCP/TCP_client.h
+++ b/Modbus_communication/Modbus_TCP/TCP_client.h
@@ -8,7 +8,7 @@
 bool InitSocket_Version(void);
 bool Check_IP(char* IP);
 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);
 
 
diff --git a/Modbus_communication/Modbus_TCP/common.cpp b/Modbus_communication/Modbus_TCP/common.cpp
index 852a2c8..26d0c63 100644
--- a/Modbus_communication/Modbus_TCP/common.cpp
+++ b/Modbus_communication/Modbus_TCP/common.cpp
@@ -83,13 +83,13 @@ unsigned int Input_Operations_Number(int Function_code)
 		cin >> Operations_Number;
 		cin.clear();
 		cin.sync();
-		if (Function_code == 0x01 && Operations_Number >= 1 && Operations_Number <= 2000)
+		if (Function_code == 0x01 && Operations_Number >= 0 && Operations_Number <= 65535)
 			flage = false;
-		if (Function_code == 0x03 && Operations_Number >= 1 && Operations_Number <= 125)
+		if (Function_code == 0x03 && Operations_Number >= 0 && Operations_Number <= 65535)
 			flage = false;
-		if (Function_code == 0x0F && Operations_Number >= 1 && Operations_Number <= 1968)
+		if (Function_code == 0x0F && Operations_Number >= 0 && Operations_Number <= 65535)
 			flage = false;
-		if (Function_code == 0x10 && Operations_Number >= 1 && Operations_Number <= 123)
+		if (Function_code == 0x10 && Operations_Number >= 0 && Operations_Number <= 65535)
 			flage = false;
 	} while (flage);
 	return Operations_Number;
@@ -215,6 +215,10 @@ void Crate_MBAP(UINT8 *Message, int Function_code, unsigned int Operations_Numbe
 	Message[3] = 0x00;
 	Message[4] = 0x00;
 	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;
 }
 
@@ -288,7 +292,6 @@ void Log_Note(UINT8 *Message, int flage, int Message_len)
 		printf("打开文件失败");
 		return ;
 	}
-	
 
 	if (flage == 1)
 	{
diff --git a/Modbus_communication/Modbus_TCP/main.cpp b/Modbus_communication/Modbus_TCP/main.cpp
index c417351..b2f924f 100644
--- a/Modbus_communication/Modbus_TCP/main.cpp
+++ b/Modbus_communication/Modbus_TCP/main.cpp
@@ -2,10 +2,7 @@
 
 int main()
 {
-	string IP;
-	unsigned int Port;
-	Input_IP(IP,&Port);
-	Tcp_client(IP,Port);
+	Tcp_client();
 	getchar();
 	return 0;
 }
\ No newline at end of file