目录
一、前言
1、设备组态
2、创建任务程序文件
在Application中分别添加程序server、client,并添加到MainTask周期任务中
二、创建服务端程序
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,
2、客户端连接
START设置为TRUE,connectxerror为FALSE,表示连接服务器成功
3、服务端给客户端发送数据
writebuff数组前五个变量赋值
然后WRITE_EN设置TRUE写操作(程序中检测WRITE_EN为TRUE立即修改为FALSE)
在客户端中可以看到成功接收到服务端发送的数据(客户端读功能块默认在连接成功的情况下就读取操作)
4、客户端给服务端发送数据
client_Write_BUF前五个变量赋值
给client_Write_en设置TRUE
在服务端看到成功读取到的客户端所发送的数据
五、下载连接
https://download.csdn.net/download/panjinliang066333/86750966
原文链接:https://blog.csdn.net/panjinliang066333/article/details/127290348