了解汇川socket通信发现,其基于codesys构架。才采用两种方式进行过通讯流程化处理:自由TCP或者三方库通讯

自由TCP总包含5个功能块:TCP_server、TCP_client、TCP_Connect、TCP_Receive、TCP_send。当本机作为客户端时,被连接对象作为服务器进行相互的数据传输和通讯,其中需要用到三个功能块:TCP_client、TCP_Receive、TCP_send。

TCP_Client功能块中包含以下信息:
   xEnable    :    BOOL    ;(*    功能块使能:输入的高电平将启动功能块的处理    *)
    strIpAddrDst    :    STRING    ;(*    远端设备IP地址:远端设备的通讯IP地址    *)
    uiPortDst    :    UINT    ;(*    远端设备端口号:远端设备的通讯端口号    *)
    udiTimeOut    :    UDINT    ;(*    超时时间:求请连接的超时时间,单位us,默认500ms    *)
    xDone    :    BOOL    ;(*    终止信号:客户端通讯服务终止信号    *)
    xBusy    :    BOOL    ;(*    忙标志:忙状态    *)
    xError    :    BOOL    ;(*    错误标志:错误状态    *)
    dwErrorID    :    DWORD    ;(*    错误码:错误码    *)
    xActive    :    BOOL    ;(*    成功建立标志位:客户端与远端服务器建立连接成功标志    *)
    hConnection    :    __XWORD    ;(*    连接句柄:服务器与客户端建立通讯的连接句柄    *)

关键:xEnable  为电平触发使能,当其由低电平转换为高电平时候,该功能块实现使能连接效果;strIpAddrDst为被连接对象服务器的ip地址,需要同一网络结构处于同一段的ip;uiPortDst 为被连接对象的ip地址端口号,一般我们用于plc或者部分设备上,尽量不要将端口号设置低于2000以下,主要是某些端口号为系统内部端口号,用错了很难找到原因;hConnection 这个主要连接数据源使用。

TCP_send功能块常规为使用上升沿触发使能信号:

xExecute    :    BOOL    ;(*    功能块使能:输入的高电平将启动功能功能块    *)
    hConnection    :    __XWORD    ;(*    连接句柄:TCP通讯的连接句柄    *)
    uiSize    :    UINT    ;(*    发送数据大小:发送数据区域大小,byte    *)
    PbyData    :    POINTER TO BYTE    ;(*    指向发送区:指向发送区域的最开头字节的指针    *)
    udiTimeOut    :    UDINT    ;(*    超时时间:发送数据超时时间,单位us,默认500ms    *)
    xDone    :    BOOL    ;(*    完成信号:数据发送完成    *)
    xBusy    :    BOOL    ;(*    忙标志:忙状态    *)
    xError    :    BOOL    ;(*    错误标志:错误状态    *)
    dwErrorID    :    DWORD    ;(*    错误码:错误码    *)

TCP_Receive功能块常规为使用电平沿触发使能信号          
    xEnable    :    BOOL    ;(*    功能块使能:输入的高电平将启动功能块的处理    *)
    hConnection    :    DWORD    ;(*    连接句柄:TCP通讯的连接句柄    *)
    uiSize    :    UINT    ;(*    接收数据大小:接收数据区域大小,BYTE    *)
    PbyData    :    POINTER TO BYTE    ;(*    指向接收区:指向接收区域的最开头字节的指针    *)
    xDone    :    BOOL    ;(*    终止信号:数据接收终止信号    *)
    xBusy    :    BOOL    ;(*    忙标志:忙状态    *)
    xError    :    BOOL    ;(*    错误标志:错误状态    *)
    dwErrorID    :    DWORD    ;(*    错误码:错误码    *)
    xReady    :    BOOL    ;(*    成功建立连接标志位:从缓冲区读取数据,如果数据部位空,置位一个扫描周期标志位    *)
    uiCount    :    __UXINT    ;(*    连接句柄:从接收缓存区内读取实际的数据个数    *)

一般使用客户端进行数据通讯,我倾向于搭建一套完整的流程进行处理:

1、ACT_ClientInit(方法)
(*  D27设备信息的初始化 *)
TCP_Client_D27(xEnable:= TcpClient[27].xEnable, strIpAddrDst:= TcpClient[27].strIpAddrDst, uiPortDst:= TcpClient[27].uiPortDst, udiTimeOut:= TcpClient[27].udiTimeOut, xDone=> TcpClient[27].xDone, xBusy=> TcpClient[27].xBusy, xError=> TcpClient[27].xError, dwErrorID=> TcpClient[27].dwErrorID, xActive=> TcpClient[27].xActive, hConnection=> TcpClient[27].hConnection,);
TCP_Receive_D27(xEnable:= TcpReceive[27].xEnable, hConnection:= TcpClient[27].hConnection, uiSize:= TcpReceive[27].uiSize, pbyData:= ADR(Group1_Receive_BUF)+950, xDone=> TcpReceive[27].xDone, xBusy=> TcpReceive[27].xBusy, xError=> TcpReceive[27].xError, dwErrorID=> TcpReceive[27].dwErrorID, xReady=> TcpReceive[27].xReady, uiCount=> TcpReceive[27].uiCount,);
TCP_Send_D27(xExecute:= TcpSend[27].xExecute, hConnection:= TcpClient[27].hConnection, uiSize:= TcpSend[27].uiSize, pbyData:= ADR(Group1_Send_BUF), udiTimeOut:= TcpSend[27].udiTimeOut, xDone=> TcpSend[27].xDone, xBusy=> TcpSend[27].xBusy, xError=> TcpSend[27].xError, dwErrorID=> TcpSend[27].dwErrorID,);(* 设备的输出初始设定   *)
TON_D2700(IN:=TRUE, PT:= T#10MS, Q=> , ET=> );
R_TRIG_D2700(CLK:=TON_D2700.Q, Q=> );
IF R_TRIG_D2700.Q THEN//用于D27号设备,中科赛宁设备的socket初始化通讯参数IF TcpClient[27].strIpAddrDst ='' THEN//开机默认设定IP地址'192.168.1.88'TcpClient[27].strIpAddrDst := '192.168.1.88';END_IFIF TcpClient[27].uiPortDst = NULL THEN//开机默认设定端口号8000TcpClient[27].uiPortDst := 8000;END_IFIF  TcpClient[27].udiTimeOut= NULL THEN//开机默认设定超时连接时间TcpClient[27].udiTimeOut := 500000;END_IF    IF (TcpReceive[27].uiSize <= 0 )OR (TcpReceive[27].uiSize > 50)THEN//开机默认设定接收数据长度TcpReceive[27].uiSize := 50;END_IFIF (TcpSend[27].uiSize <= 0) OR (TcpSend[27].uiSize > 50) THEN//开机默认设定数据发送长度TcpSend[27].uiSize := 50;;END_IFClientStep_D27 := 0;//执行功能块的复位功能TcpClient[27].bR_W_Mode := 0;//数据读取模式
END_IF
2、ACT_SystemInit(方法)
(*  客户端执行流程 *)
CASE ClientStep_D27  OFENUM_TCP_Client.nInitial ://复位信号TcpClient[27].xEnable := FALSE;//关闭连接使能TcpSend[27].xExecute := FALSE;//关闭发送数据TcpReceive[27].xEnable := FALSE;//关闭接收数据IF NOT TcpClient[27].xError AND NOT TcpClient[27].xActive AND NOT TcpSend[27].xError THENClientStep_D27 := ENUM_TCP_Client.nConnect;;END_IFENUM_TCP_Client.nConnect://连接服务器TcpClient[27].xEnable := TRUE;//打开连接使能ClientStep_D27 := ENUM_TCP_Client.nWhetherConnect;ENUM_TCP_Client.nWhetherConnect://判断是否连接成功IF TcpClient[27].xActive AND (NOT TcpClient[27].xError)  THEN//TcpClient[27].bConnectDone := TRUE;//Client连接功能块功能完成ClientStep_D27 := ENUM_TCP_Client.nDetermineAction;END_IFIF TcpClient[27].xError THENClientStep_D27 := ENUM_TCP_Client.nInitial;//connect连接错误,重启复位操作    END_IFENUM_TCP_Client.nDetermineAction://判断动作//数据的发送和接收过程IF TcpClient[27].xError OR TcpSend[27].xError THENClientStep_D27 := ENUM_TCP_Client.nInitial;TcpClient[27].bCDExecute := FALSE;END_IFTcpClient[27].bCDExecute := TRUE;
END_CASE
3、global变量实例化
//  D27TCP_Client_D27: TCP_Client;//实例化_客户端功能块TCP_Receive_D27: TCP_Receive;//实例化_数据接收功能块TCP_Send_D27: TCP_Send;//实例化_数据发送功能块R_TRIG_D2700: R_TRIG;//上升沿检测信号TON_D2700: TON;// 系统运行时间短暂时间用于初始化ClientStep_D27: INT ;//初始执行步
4、结构体
TYPE ST_TcpClient :
STRUCT(*    TCP_Client  *)          xEnable :   BOOL    ;(* 功能块使能:输入的高电平将启动功能块的处理    *)strIpAddrDst  :   STRING  ;(* 远端设备IP地址:远端设备的通讯IP地址 *)uiPortDst :   UINT    ;(* 远端设备端口号:远端设备的通讯端口号   *)udiTimeOut    :   UDINT   ;(* 超时时间:求请连接的超时时间,单位us,默认500ms    *)xDone :   BOOL    ;(* 终止信号:客户端通讯服务终止信号 *)xBusy :   BOOL    ;(* 忙标志:忙状态  *)xError    :   BOOL    ;(* 错误标志:错误状态    *)dwErrorID :   DWORD   ;(* 错误码:错误码  *)xActive   :   BOOL    ;(* 成功建立标志位:客户端与远端服务器建立连接成功标志    *)hConnection   :   __XWORD ;(* 连接句柄:服务器与客户端建立通讯的连接句柄    *)(*    数据的外部调用 *)bR_W_Mode:BOOL;(* 当前运行模式  *)BW_Addr:BYTE;(*   写入数据地址  *)BWData: ARRAY[0..4] OF BYTE;(*    数据写入值   *)bDataExecute:BOOL;bDataDone: BOOL;bRDExecute:BOOL;bRDeDone: BOOL;bSDExecute:BOOL;bSDDone:     BOOL;bCDDone:   BOOL;bCDExecute: BOOL;bConnectDone:BOOL;(*  连接功能完成  *)noUse :   BOOL;
END_STRUCT
END_TYPE
TYPE ST_TcpSend :
STRUCT(*    TCP_Send    *)          xExecute    :   BOOL    ;(* 功能块使能:输入的高电平将启动功能功能块 *)hConnection   :   __XWORD ;(* 连接句柄:TCP通讯的连接句柄  *)uiSize    :   UINT    ;(* 发送数据大小:发送数据区域大小,byte  *)PbyData   :   POINTER TO BYTE ;(* 指向发送区:指向发送区域的最开头字节的指针    *)udiTimeOut    :   UDINT   ;(* 超时时间:发送数据超时时间,单位us,默认500ms   *)xDone :   BOOL    ;(* 完成信号:数据发送完成  *)xBusy :   BOOL    ;(* 忙标志:忙状态  *)xError    :   BOOL    ;(* 错误标志:错误状态    *)dwErrorID :   DWORD   ;(* 错误码:错误码  *)noUse :   BOOL    ;       END_STRUCT
END_TYPE
TYPE ST_TcpReceive :
STRUCT(*    TCP_Receive *)          xEnable :   BOOL    ;(* 功能块使能:输入的高电平将启动功能块的处理    *)hConnection   :   DWORD   ;(* 连接句柄:TCP通讯的连接句柄  *)uiSize    :   UINT    ;(* 接收数据大小:接收数据区域大小,BYTE *)PbyData   :   POINTER TO BYTE ;(* 指向接收区:指向接收区域的最开头字节的指针    *)xDone :   BOOL    ;(* 终止信号:数据接收终止信号    *)xBusy :   BOOL    ;(* 忙标志:忙状态  *)xError    :   BOOL    ;(* 错误标志:错误状态    *)dwErrorID :   DWORD   ;(* 错误码:错误码  *)xReady    :   BOOL    ;(* 成功建立连接标志位:从缓冲区读取数据,如果数据部位空,置位一个扫描周期标志位 *)uiCount   :   __UXINT ;(* 连接句柄:从接收缓存区内读取实际的数据个数    *)noUse :   BOOL    ;
END_STRUCT
END_TYPE

三方库通讯,样例如下:

1、程序段
IP_ADR1.sAddr:='192.168.1.88';//   要连接的服务器ip 地址
//PLC作为客户端连接服务器
TCP_connect
(xEnable:=START, //start on连接服务器xDone=> , xBusy=> , xError=> , udiTimeOut:=30000, ipAddr:=IP_ADR1,uiPort:=8000 , eError=> , xActive=>, hConnection=>  );//客户端往服务器写数据    client_TCP_write(xExecute:= client_Write_en, //write_en  上升沿 将pl 数组里数据发送到服务器udiTimeOut:=1000 , 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_IFclient_TCP_READ(xEnable:=TCP_connect.xActive , xDone=> , xBusy=> , //接收过程为0n 接收结束offxError=> , hConnection:=TCP_connect.hConnection , szSize:= 2000, pData:=ADR(client_READ_BUF) , eError=> , xReady=> , szCount=> ,);//接收的数据个数);
2、变量实例化
PROGRAM client
VARTCP_connect: NBS.TCP_Client;IP_ADR1: NBS.IP_ADDR;client_tcp_READ: NBS.TCP_Read;client_READ_BUF: ARRAY[0..1000] OF BYTE;client_Write_BUF: ARRAY[0..1000] OF BYTE;START: BOOL;client_TCP_write: NBS.TCP_Write;client_Write_en: BOOL;
END_VAR

汇川AM401非标准协议通讯socket_client相关推荐

  1. 汇川AM401系列程序 汇川AM403程序,搭配汇川总线伺服,汇川IT7070系列触摸屏

    汇川AM401系列程序 汇川AM403程序,搭配汇川总线伺服,汇川IT7070系列触摸屏 全自动N95口罩机 大型程序近20000步,凸轮同步控制,凸轮曲线应用,超声波焊接机控制,放卷张力控制,封边轴 ...

  2. arr访问绝对地址_西门子1200PLC与汇川伺服电机的MODBUS-RTU通讯

    一.硬件准备 以下以 CPU1215C DC/DC/DC和CM1241 RS485 模块为例,介绍S7-1200 Modbus RTU 主站通信控制汇川IS620P系列伺服驱动器的组态及编程步骤. 二 ...

  3. 汇川AM401与Pro-face连接

    初次使用触摸屏,眼前一片漆黑.网上更是找不到这两个连接的资料,问了官网客服也没有.累... AM401和AM600应该都是一样的. AM401 PLC通过以太网与Pro-face HMI使用Modbu ...

  4. 汇川HnU系列PLC以太网通讯解决方案

    描述: 汇川H0U/H1U/H2U/H3U等系列PLC以及一体机的422通讯和485通讯的以太网扩展解决方案. 桥接器采用三通设计,不占用PLC通讯口,不对原系统做任何硬件和软件修改,即可通过模块的网 ...

  5. CK-FR208-EC与汇川PLC配置走EtherCAT通讯指南

    CK-FR208-EC与汇川PLC配置走EtherCAT通讯指南 CK-FR208-EC是一款支持标准工业Ethercat协议的多通道工业RFID读写器,读卡器工作频率为13.56MHZ,支持对I-C ...

  6. 汇川AM402、H3U和上位机C#ModebusTcp通讯

    目录 一.测试任务 二.测试环境 三.PLC工程 1.组态配置 2.ip地址.端口号 3.全局变量定义 四.C#端Winform程序创建 1创建主界面 2.创建子窗口 3.运行生成,界面效果 4.Mo ...

  7. 汇川中型PLC与威纶通触摸屏标签通讯

    汇川中型PLC采用的是CodeSys的架构,实现标签通讯的方法如下: 一.PLC端配置 1.添加"符号配置" 2.选择标签并生成XML文件 首次添加"符号配置" ...

  8. 汇川PLC和PLC之间ModebusTCP通讯

    目录 一.AM402做主站和H3U通讯 1.Modebus主站中组态配置 2.读从站寄存器配置 3.写从站寄存器配置 4.程序中使用对从站读写操作的寄存器值 (1)I/O映射中地址关联 (2)创建自定 ...

  9. CK-GW208-EC与汇川PLC配置走EtherCAT通讯指南

    CK-GW208-EC这款产品是晨控智能一款工业级 IO-LINK 主站网关,支持 EtherCat 工业协议.可通过以太网接口,对 IO-LINK 从站设备进行控制. CK-GW208-EC 是一款 ...

最新文章

  1. Nginx服务优化——性能与安全
  2. 安装64位Oracle 10g超详细教程
  3. 试图将驱动程序添加到存储区_Ubuntu 19.10IOS将捆绑NVIDIA驱动
  4. Opensmile 简介
  5. Android之版本检测和更新
  6. H3C认证云计算高级工程师
  7. Tesler去世丨你逃不过复制粘贴,同样也逃不过Tesler定律
  8. 熬夜整理,最全的Go语言教程来了,快来收藏!
  9. pycharm无需汉化教程(无需下载汉化包)
  10. iTextSharp 页面设置
  11. RGB配色表,CMYK配色表
  12. python,matlab 读取NIFTI(.nii)格式图像、FSL安装
  13. UML--用例图详解
  14. 服务器日志修改保存时间,日志服务保留时间
  15. CentOS支持NTFS格式
  16. Qt QString转QDateTime fromString() QDateTime显示invalid 计算两个日期时间差
  17. 【解密】PDF文档忘记编辑密码 照样编辑
  18. python 做网页_听过最近Python过气了?
  19. 微信小程序-刷新当前页
  20. R语言使用ggplot2绘制直方图

热门文章

  1. win10如何开启绿色护眼模式
  2. android+饭否+开源,GitHub - mcxiaoke/fanfouapp-opensource: 饭否Android客户端开源项目
  3. YII框架yiic、gii工具使用方法
  4. [英] Get More Done In Less Time
  5. 谨以此文,献给昨晚为志玲姐姐通宵奋战的广大程序猿兄弟们!
  6. 用photoshop制作电子版签名图片
  7. 【数学】考研数学常用的几种特殊曲线及其公式
  8. DockOne微信分享(六十四):基于Docker实现DevOps的一些探索
  9. C语言 求一元二次方程ax2+bx+c=0的根
  10. 人工智能时代八大类算法你了解吗?(文末包邮送书6本)