相信小伙伴们遇到TCP/IP通讯时是这样的:
但是今天遇到我,别着急,我会把我的经验分享给大家。
西门子PLC之间的TCP/IP通讯
在项目里先建立两个PLC,使其相连,因为我这边使用的TIA V18 ,正常使用PLCSIM仿真并没成功,我这里使用Advanced进行仿真。
我们要用到的指令是下图中标记出来的
这里面有两对指令:
第一对是确认PLC身份为客户端:
TSEND_C,TRCV;
TSEND_C:这个指令的作用是与服务端建立连接并且发送数据(也就是确认自己为客户端,给服务端发起服务请求)
TRCV:这个指令在上一个指令建立连接成功之后,可以接受服务端给你发送的数据。
第二对是确认PLC身份为服务端:
TRCV_C,TSEND;
TRCV_C:这个指令的作用是与客户端建立连接并且接受数据(也就是确认自己为服务端,接收来自客户端的服务请求)
TSEND:这个指令的作用就是在上一条指令建立连接成功之后,可以给客户端发送数据。
接下来就是具体操作了:
对于通信的话,我这边是建立了一个循环中断块专门用于通信,,同时也建立了TCP/IP专用的DB块:
记得取消块的优化访问!
这里LEN和你给的DB块中的数组长度有关。当然也可以默认0。
我们点击,会弹出这么一个界面
需要注意的就是连接类型选择TCP,以及新建Connection data,下面队友端口号会自动填写,不需要修改。
哦,对了,我们每条指令的触发使用的都是M0.0,就是10HZ系统时钟,可以每100ms产生一个上升沿,触发指令运行。
此时我们第一个PLC的客户端身份已经确认。
随带的要添加接收信息的指令:
这里的ID注意要和上一张图片里配置的ID要相同。
到这里我们第一个PLC的基本配置也就神功大成了。
第二个PLC的配置:
跟之前类似,不过这里的指令要换另外一对。
这里我有一点要特别提醒:我们的通信指令因为是放在循环中断里面的,我们要特别注意循环中断的时间,如果这里时间设置的不对,很大概率会通信不上。
我个人的理解如下:
假设我们都使用同样的循环中断时间,以及OB1的循环时间也相同。
那么,因为系统开始的时间不一样,就会出现这种情况:
我们这里假设上下是同一个时间线上的,我们会发现它们的紫色OB30 循环中断块之间并没有交互的地方,此时我们需要对OB循环块的时间进行修改:
比如本来是
我们把它加快10倍:
也就会出现
我们可以看到,这样就会有两个PLC在同一时刻执行循环中断内的通信内容,这样就能够成功通信。
到此,我们就可以撒花结束,我们的通信终于神功大成。
至于西门子PLC和汇川PLC之间的通信,都大同小异,只需要确认双方身份,按照我上面的方法配置西门子PLC,至于汇川PLC,找到对应的指令,配置一下,通讯起来也不麻烦。
也可以参考我找到的教程链接:
汇川使用笔记6:TCP服务端和客户端通讯_汇川tcp通讯-CSDN博客
如果在汇川端使用Ethernet的话,我们要西门子端的中断循环块要将循环周期变短,以实现双方在同一时刻都进行通讯的指令。
OK,今天关于PLC的TCP/IP通讯就说到这里。大家有什么想法可以在评论区跟我互动哦。