服务端和客户端通讯"/>
汇川使用笔记6:TCP服务端和客户端通讯
目录
一、前言
1、设备组态
2、创建任务程序文件
二、创建服务端程序
1、定义变量
2、创建服务端程序
三、创建客户端程序
1、定义变量
2、创建客户端程序
四、程序测试
1、服务端启动
2、客户端连接
3、服务端给客户端发送数据
4、客户端给服务端发送数据
五、下载连接
一、前言
1、设备组态
2、创建任务程序文件
在Application中分别添加程序server、client,并添加到MainTask周期任务中
二、创建服务端程序
1、定义变量
VARServerPORT : 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 THENWRITE_EN:=FALSE;END_IF
三、创建客户端程序
1、定义变量
VARClientPORT: 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_IFclient_TCP_READ(xEnable:=TCP_connect.xActive , xDone=>read_xdone , xBusy=> , //接收过程为0n 接收结束offxError=>read_xerror , hConnection:=TCP_connect.hConnection , szSize:= 2000, pData:=ADR(client_READ_BUF) , eError=> , xReady=> , szCount=> ,);//接收的数据个数);
四、程序测试
1、服务端启动
server_EN设置为TRUE,
2、客户端连接
START设置为TRUE,connectxerror为FALSE,表示连接服务器成功
3、服务端给客户端发送数据
writebuff数组前五个变量赋值
然后WRITE_EN设置TRUE写操作(程序中检测WRITE_EN为TRUE立即修改为FALSE)
在客户端中可以看到成功接收到服务端发送的数据(客户端读功能块默认在连接成功的情况下就读取操作)
4、客户端给服务端发送数据
client_Write_BUF前五个变量赋值
给client_Write_en设置TRUE
在服务端看到成功读取到的客户端所发送的数据
五、下载连接
更多推荐
汇川使用笔记6:TCP服务端和客户端通讯
发布评论