汇川使用笔记6:TCP服务端和客户端通讯

时间:2022-10-13 20:54:22

目录

一、前言

1、设备组态

2、创建任务程序文件

二、创建服务端程序

1、定义变量

2、创建服务端程序

三、创建客户端程序

1、定义变量

2、创建客户端程序

四、程序测试

1、服务端启动

2、客户端连接

 3、服务端给客户端发送数据

4、客户端给服务端发送数据

五、下载连接


一、前言

1、设备组态

汇川使用笔记6:TCP服务端和客户端通讯

2、创建任务程序文件

在Application中分别添加程序server、client,并添加到MainTask周期任务中

汇川使用笔记6:TCP服务端和客户端通讯

 

汇川使用笔记6:TCP服务端和客户端通讯

二、创建服务端程序

1、定义变量


VAR
	ServerPORT					: UINT:=2220;								//创建服务器端的端口号
	IP_ADR2						: NBS.IP_ADDR;				//服务器的ip地址
	ip							:STRING(20):='192.168.1.88';
	
	TCP_Connection				: NBS.TCP_Connection;
	TCP_Server_open				: NBS.TCP_Server;
	server_read					: NBS.TCP_Read;
	WRITEBUF					: NBS.TCP_Write;		
	
	readbuff					: ARRAY[0..1000]OF BYTE := [ 1000(0)];		//存储-客户端的数据		
	writebuff					: ARRAY[0..1000] OF BYTE:=[1000(0)];		//给客户端写数据
	server_en					: BOOL;										//打开服务器
	WRITE_EN					: BOOL;										//向客户端写数据
	
	//read功能块状态
	read_done					: BOOL;
	read_error					: BOOL;
	read_xerror					: BOOL;
END_VAR;

2、创建服务端程序


//PLC作为服务器
//IP_ADR2.sAddr:='192.168.1.88';				//PLC ip地址
IP_ADR2.sAddr:=ip;

//服务器打开
TCP_Server_open(
	xEnable:=server_EN , 					//on:开启服务器
	xDone=> , 
	xBusy=> , 
	xError=> , 
	ipAddr:=IP_ADR2 , 
	uiPort:= ServerPORT, //端口号
	eError=> , 
	hServer=> );
	
//检测有无客户端连接
TCP_Connection(
	xEnable:= TCP_Server_open.xBusy, 
	xDone=> , 
	xBusy=> , 
	xError=> , 
	hServer:= TCP_Server_open.hServer, 
	eError=> , 
	xActive=> , 
	hConnection=> );
	
//read
server_read(
	xEnable:=TCP_Connection.xActive , 
	xDone=>read_done , 
	xBusy=> , 
	xError=>read_xerror , 
	hConnection:=TCP_Connection.hConnection , 
	szSize:=SIZEOF(readbuff) , 
	pData:=ADR(readbuff) , 
	eError=> , 
	xReady=> , 
	szCount=> );
	
//WRITE
WRITEBUF(
	xExecute:= write_en , 
	udiTimeOut:= 3000,
	xDone=> , 
	xBusy=> , 
	xError=> , 
	hConnection:= TCP_Connection.hConnection , 
	szSize:= SIZEOF(writebuff), 
	pData:=ADR(writebuff) , 
	eError=> );
	IF WRITEBUF.xDone THEN
		WRITE_EN:=FALSE;
	END_IF

三、创建客户端程序

1、定义变量

VAR
	ClientPORT:							UINT:=2220;
	IP_ADR1								:NBS.IP_ADDR;
	ip									:STRING(20):='192.168.1.88';
	
	TCP_connect							:NBS.TCP_Client;	
	client_tcp_READ						:NBS.TCP_Read;
	client_TCP_write					:NBS.TCP_Write;
	
	client_READ_BUF						:ARRAY[0..1000] OF BYTE;     	//读取数据缓存区
	client_Write_BUF					:ARRAY[0..1000] OF BYTE;   		//要写的数据缓存区

	START								:BOOL;    						//连接服务器
	client_Write_en						:BOOL;
	
	//Client相关状态
	connectxdone						:BOOL;
	connectxerror						:BOOL;
	write_xdone							:BOOL;
	write_xerror						:BOOL;
	read_xdone							:BOOL;
	read_xerror							:BOOL;
END_VAR

2、创建客户端程序


//IP_ADR1.sAddr:='192.168.1.88';//   要连接的服务器ip 地址
IP_ADR1.sAddr:=ip;

//PLC作为客户端连接服务器
TCP_connect
(
	xEnable:=START, //start on连接服务器
	xDone=>connectxdone , 
	xBusy=> , 
	xError=>connectxerror , 
	udiTimeOut:=30000, 
	ipAddr:=IP_ADR1,
	uiPort:=ClientPORT , 
	eError=> , 
	xActive=>, 
	hConnection=>  );
	
//客户端往服务器写数据	
 client_TCP_write(
	xExecute:= client_Write_en, //write_en  上升沿 将pl 数组里数据发送到服务器
	udiTimeOut:=1000 , 
	xDone=>write_xdone , 
	xBusy=> , 
	xError=> , 
	hConnection:=TCP_connect.hConnection , 
	szSize:=100 , //发送数据大小
	pData:=ADR(client_Write_BUF) , 
	eError=> );
IF(client_TCP_write.xDone) THEN
client_Write_en:=FALSE	;
END_IF
 client_TCP_READ(
	xEnable:=TCP_connect.xActive , 
	xDone=>read_xdone , 
	xBusy=> , //接收过程为0n 接收结束off
	xError=>read_xerror , 
	hConnection:=TCP_connect.hConnection , 
	szSize:= 2000, 
	pData:=ADR(client_READ_BUF) , 
	eError=> , 
	xReady=> , 
	szCount=> ,);//接收的数据个数);

四、程序测试

1、服务端启动

server_EN设置为TRUE,

汇川使用笔记6:TCP服务端和客户端通讯

2、客户端连接

START设置为TRUE,connectxerror为FALSE,表示连接服务器成功

汇川使用笔记6:TCP服务端和客户端通讯

 3、服务端给客户端发送数据

writebuff数组前五个变量赋值

汇川使用笔记6:TCP服务端和客户端通讯

 然后WRITE_EN设置TRUE写操作(程序中检测WRITE_EN为TRUE立即修改为FALSE)

汇川使用笔记6:TCP服务端和客户端通讯

 在客户端中可以看到成功接收到服务端发送的数据(客户端读功能块默认在连接成功的情况下就读取操作)

汇川使用笔记6:TCP服务端和客户端通讯

4、客户端给服务端发送数据

client_Write_BUF前五个变量赋值

汇川使用笔记6:TCP服务端和客户端通讯

 给client_Write_en设置TRUE

汇川使用笔记6:TCP服务端和客户端通讯

 在服务端看到成功读取到的客户端所发送的数据

汇川使用笔记6:TCP服务端和客户端通讯

五、下载连接

https://download.csdn.net/download/panjinliang066333/86750966