基于西门子PLC的Socket通信深度剖析
Posted 智能制造之家
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于西门子PLC的Socket通信深度剖析相关的知识,希望对你有一定的参考价值。
“智能制造之家”
写在面前
大家好,我是小智,智能制造之家号主~
通信,一直是每个工程师必备的技能,不论你作为上位机开发工程师,PLC工程师,还是MES、SCADA项目工程师,掌握通信技术已经成为大多数技术人员的必备技能,今天的分享就是来自Martin老师的Socket通讯讲解~
对于自控或电气工程师来说,西门子PLC是每个人都非常熟悉的一款PLC品牌;而对于上位机开发工程师来说,Socket通信或TCP/IP协议也是必须要掌握的一种通信方式。刚好手头有一款西门子的200SmartPLC,可以利用它来跟大家聊聊Socket通信的那些事儿。
我们可以看到无论是西门子的中高端PLC还是低端PLC,都是支持开放式TCP/UDP通信的,既然都支持,我们来看下如何实现。
众所周知,对于Socket通信来说,是可以支持TCP、UDP等多种通信方式,但是今天在这里,我们主要针对TCP这种通信方式。除此以外,大家都知道,Socket会存在服务器和客户端的说法,也就意味着,同样是使用Socket通信,我们仍然需要确定到底PLC是作为服务器还是作为客户端,因为不管对于PLC编程或者上位机开发来说,这两种方式都是完全不同的,下面做具体介绍。
一、PLC作为TCP服务器的实战应用
(1)PLC编程
1、创建一个TCPServer的子程序,拖拽一个TCP_CONNECT的库指令,对于该指令的每个引脚对应的含义,大家可以按下F1直接获取在线帮助,程序段1编写如下图所示:
2、拖拽一个TCP_SEND的库指令,该指令每个引脚填写,ConnID为1,Req为触发条件,必须为沿信号,这里为了方便,直接使用1秒的脉冲信号,DataLen及DataPtr为发送的起始字节指针及发送的字节长度,程序段2如下图所示:
3、拖拽一个TCP_RECV的库指令,该指令的引脚填写,ConnID统一为1,MaxLen为接收的最大程度,DataPtr表示接收字节存放的起始位置,程序段3如下图所示:
(2)TCP调试助手测试
连接服务器后,PLC端会自动每隔一秒发送200个字节数据过来,这200个字节即对应VB100-VB299的值。
(3)上位机客户端软件开发
通过与编程软件的状态图表进行对照,可以实时读取PLC数据,并随时设置相应的数值。
二、PLC作为TCP客户端的实战应用
(1)PLC编程
2、拖拽一个TCP_SEND的库指令,该指令的引脚填写,ConnID为2,Req为触发条件,必须为沿信号,这里为了方便,直接使用1秒的脉冲信号,DataLen及DataPtr为发送的起始字节指针及发送的字节长度,程序段2如下图所示:
3、拖拽一个TCP_RECV的库指令,该指令的引脚填写,ConnID统一为2,MaxLen为接收的最大程度,DataPtr表示接收字节存放的起始位置,程序段3如下图所示:
(2)TCP调试助手测试
如果PLC程序编写没问题,打开一个网络调试助手,设置模式为TCP Server,输入端口号为2000,即可开启服务器。
服务器开启后,PLC端会自动连接服务器,并且每隔一秒发送200个字节数据过来,这200个字节即对应VB300-VB499的值。
(3)上位机服务器软件开发
通过与状态图表进行对比,验证可以正常读取和写入PLC数据。
三、整体总结
后续通过进一步测试验证发现,西门子PLC可以同时作为服务器和客户端与上位机进行通信。
本次主要针对西门子PLC的开放式TCP通信作了较为详细地阐述,由于篇幅有限,无法将上位机部分的具体编程代码进行分析,为此,我们专门准备了一次通信专题的特训营。
以上是关于基于西门子PLC的Socket通信深度剖析的主要内容,如果未能解决你的问题,请参考以下文章