• 汇川使用笔记6:TCP服务端和客户端通讯


    目录

    一、前言

    1、设备组态

    2、创建任务程序文件

    二、创建服务端程序

    1、定义变量

    2、创建服务端程序

    三、创建客户端程序

    1、定义变量

    2、创建客户端程序

    四、程序测试

    1、服务端启动

    2、客户端连接

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

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

    五、下载连接


    一、前言

    1、设备组态

    2、创建任务程序文件

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

     

    二、创建服务端程序

    1、定义变量

    1. VAR
    2. ServerPORT : UINT:=2220; //创建服务器端的端口号
    3. IP_ADR2 : NBS.IP_ADDR; //服务器的ip地址
    4. ip :STRING(20):='192.168.1.88';
    5. TCP_Connection : NBS.TCP_Connection;
    6. TCP_Server_open : NBS.TCP_Server;
    7. server_read : NBS.TCP_Read;
    8. WRITEBUF : NBS.TCP_Write;
    9. readbuff : ARRAY[0..1000]OF BYTE := [ 1000(0)]; //存储-客户端的数据
    10. writebuff : ARRAY[0..1000] OF BYTE:=[1000(0)]; //给客户端写数据
    11. server_en : BOOL; //打开服务器
    12. WRITE_EN : BOOL; //向客户端写数据
    13. //read功能块状态
    14. read_done : BOOL;
    15. read_error : BOOL;
    16. read_xerror : BOOL;
    17. END_VAR;

    2、创建服务端程序

    1. //PLC作为服务器
    2. //IP_ADR2.sAddr:='192.168.1.88'; //PLC ip地址
    3. IP_ADR2.sAddr:=ip;
    4. //服务器打开
    5. TCP_Server_open(
    6. xEnable:=server_EN , //on:开启服务器
    7. xDone=> ,
    8. xBusy=> ,
    9. xError=> ,
    10. ipAddr:=IP_ADR2 ,
    11. uiPort:= ServerPORT, //端口号
    12. eError=> ,
    13. hServer=> );
    14. //检测有无客户端连接
    15. TCP_Connection(
    16. xEnable:= TCP_Server_open.xBusy,
    17. xDone=> ,
    18. xBusy=> ,
    19. xError=> ,
    20. hServer:= TCP_Server_open.hServer,
    21. eError=> ,
    22. xActive=> ,
    23. hConnection=> );
    24. //read
    25. server_read(
    26. xEnable:=TCP_Connection.xActive ,
    27. xDone=>read_done ,
    28. xBusy=> ,
    29. xError=>read_xerror ,
    30. hConnection:=TCP_Connection.hConnection ,
    31. szSize:=SIZEOF(readbuff) ,
    32. pData:=ADR(readbuff) ,
    33. eError=> ,
    34. xReady=> ,
    35. szCount=> );
    36. //WRITE
    37. WRITEBUF(
    38. xExecute:= write_en ,
    39. udiTimeOut:= 3000,
    40. xDone=> ,
    41. xBusy=> ,
    42. xError=> ,
    43. hConnection:= TCP_Connection.hConnection ,
    44. szSize:= SIZEOF(writebuff),
    45. pData:=ADR(writebuff) ,
    46. eError=> );
    47. IF WRITEBUF.xDone THEN
    48. WRITE_EN:=FALSE;
    49. END_IF

    三、创建客户端程序

    1、定义变量

    1. VAR
    2. ClientPORT: UINT:=2220;
    3. IP_ADR1 :NBS.IP_ADDR;
    4. ip :STRING(20):='192.168.1.88';
    5. TCP_connect :NBS.TCP_Client;
    6. client_tcp_READ :NBS.TCP_Read;
    7. client_TCP_write :NBS.TCP_Write;
    8. client_READ_BUF :ARRAY[0..1000] OF BYTE; //读取数据缓存区
    9. client_Write_BUF :ARRAY[0..1000] OF BYTE; //要写的数据缓存区
    10. START :BOOL; //连接服务器
    11. client_Write_en :BOOL;
    12. //Client相关状态
    13. connectxdone :BOOL;
    14. connectxerror :BOOL;
    15. write_xdone :BOOL;
    16. write_xerror :BOOL;
    17. read_xdone :BOOL;
    18. read_xerror :BOOL;
    19. END_VAR

    2、创建客户端程序

    1. //IP_ADR1.sAddr:='192.168.1.88';// 要连接的服务器ip 地址
    2. IP_ADR1.sAddr:=ip;
    3. //PLC作为客户端连接服务器
    4. TCP_connect
    5. (
    6. xEnable:=START, //start on连接服务器
    7. xDone=>connectxdone ,
    8. xBusy=> ,
    9. xError=>connectxerror ,
    10. udiTimeOut:=30000,
    11. ipAddr:=IP_ADR1,
    12. uiPort:=ClientPORT ,
    13. eError=> ,
    14. xActive=>,
    15. hConnection=> );
    16. //客户端往服务器写数据
    17. client_TCP_write(
    18. xExecute:= client_Write_en, //write_en 上升沿 将pl 数组里数据发送到服务器
    19. udiTimeOut:=1000 ,
    20. xDone=>write_xdone ,
    21. xBusy=> ,
    22. xError=> ,
    23. hConnection:=TCP_connect.hConnection ,
    24. szSize:=100 , //发送数据大小
    25. pData:=ADR(client_Write_BUF) ,
    26. eError=> );
    27. IF(client_TCP_write.xDone) THEN
    28. client_Write_en:=FALSE ;
    29. END_IF
    30. client_TCP_READ(
    31. xEnable:=TCP_connect.xActive ,
    32. xDone=>read_xdone ,
    33. xBusy=> , //接收过程为0n 接收结束off
    34. xError=>read_xerror ,
    35. hConnection:=TCP_connect.hConnection ,
    36. szSize:= 2000,
    37. pData:=ADR(client_READ_BUF) ,
    38. eError=> ,
    39. xReady=> ,
    40. 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

  • 相关阅读:
    基于SpringBoot网上超市的设计与实现【附万字文档(LW)和搭建文档】
    springboot整合swagger3和knife4j
    Java学习之多线程
    鼎捷前端开发校招岗技术面面经(已过)
    [附源码]JAVA毕业设计高校校园社交网络(系统+LW)
    企业工程项目管理系统源码(三控:进度组织、质量安全、预算资金成本、二平台:招采、设计管理)
    安防监控视频AI智能分析网关:人流量统计算法的应用场景汇总
    解决LOGITECH 罗技驱动 MAC版出现的一些问题汇总!
    图像分割算法
    微信小程序封装请求API-promise格式
  • 原文地址:https://blog.csdn.net/panjinliang066333/article/details/127290348