目录
一、前言
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