目录


一、前言

1、设备组态

汇川使用笔记6:TCP服务端和客户端通讯_Big_潘大师的博客

2、创建任务程序文件

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

汇川使用笔记6:TCP服务端和客户端通讯_Big_潘大师的博客

 

汇川使用笔记6:TCP服务端和客户端通讯_Big_潘大师的博客

二、创建服务端程序

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服务端和客户端通讯_Big_潘大师的博客

2、客户端连接

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

汇川使用笔记6:TCP服务端和客户端通讯_Big_潘大师的博客

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

writebuff数组前五个变量赋值

汇川使用笔记6:TCP服务端和客户端通讯_Big_潘大师的博客

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

汇川使用笔记6:TCP服务端和客户端通讯_Big_潘大师的博客

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

汇川使用笔记6:TCP服务端和客户端通讯_Big_潘大师的博客

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

client_Write_BUF前五个变量赋值

汇川使用笔记6:TCP服务端和客户端通讯_Big_潘大师的博客

 给client_Write_en设置TRUE

汇川使用笔记6:TCP服务端和客户端通讯_Big_潘大师的博客

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

汇川使用笔记6:TCP服务端和客户端通讯_Big_潘大师的博客

五、下载连接