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