烟雨003■基于西门子PLC的Socket通信深度剖析
对于自控或电气工程师来说 , 西门子PLC是每个人都非常熟悉的一款PLC品牌;而对于上位机开发工程师来说 , Socket通信或TCP/IP协议也是必须要掌握的一种通信方式 。 西门子的200Smart PLC , 可以利用它来跟大家聊聊Socket通信的那些事儿 。
相比较而言 , 西门子PLC对Socket通信的支持性是很不错的 。 如果你在使用西门子软件或者逛西门子论坛时 , 发现一个词叫做Open User Communication或开放式通信 , 没错 , 那其实就是我们说的Socket通信方式 。 关于这一点 , 我们可以从以下两张图中看出 , 分别为S7-200Smart编程软件Micro/Win Smart V2.5及博途TIA V15.1编程软件中关于通信库的部分截图:
本文插图
本文插图
我们可以看到无论是西门子的中高端PLC还是低端PLC , 都是支持开放式TCP/UDP通信的 , 既然都支持 , 我们来看下如何实现 。
众所周知 , 对于Socket通信来说 , 是可以支持TCP、UDP等多种通信方式 , 但是今天在这里 , 我们主要针对TCP这种通信方式 。 除此以外 , 大家都知道 , Socket会存在服务器和客户端的说法 , 也就意味着 , 同样是使用Socket通信 , 我们仍然需要确定到底PLC是作为服务器还是作为客户端 , 因为不管对于PLC编程或者上位机开发来说 , 这两种方式都是完全不同的 , 下面做具体介绍 。
一、PLC作为TCP服务器的实战应用
(1)PLC编程
1.1:创建一个TCPServer的子程序 , 拖拽一个TCP_CONNECT的库指令 , 对于该指令的每个引脚对应的含义 , 大家可以按下F1直接获取在线帮助 , 程序段1编写如下图所示:
本文插图
1.2:拖拽一个TCP_SEND的库指令 , 对于该指令的每个引脚填写 , ConnID为1 , Req为触发条件 , 必须为沿信号 , 这里为了方便 , 直接使用1秒的脉冲信号 , DataLen及DataPtr为发送的起始字节指针及发送的字节长度 , 程序段2如下图所示:
本文插图
1.3:拖拽一个TCP_RECV的库指令 , 对于该指令的每个引脚填写 , ConnID统一为1 , MaxLen为接收的最大程度 , DataPtr表示接收字节存放的起始位置 , 程序段3如下图所示:
本文插图
1.4:最后需要编译 , 编译会提示需要给库分配地址 , 点击文件下的存储器 , 给该库分配地址即可 , 然后在MAIN主程序中调用TCPServer这个子程序 , 并下载到PLC中 , PLC编程部分结束 。
本文插图
(2)TCP调试助手测试
如果PLC程序编写没问题 , 打开一个网络调试助手 , 输入对应的IP地址及端口号 , 即可连接上服务器 。
连接服务器后 , PLC端会自动每隔一秒发送200个字节数据过来 , 这200个字节即对应VB100-VB299的值 。
本文插图
(3)上位机客户端软件开发
本文插图
【烟雨003■基于西门子PLC的Socket通信深度剖析】通过与编程软件的状态图表进行对照 , 可以实时读取PLC数据 , 并随时设置相应的数值 。
推荐阅读
- ■基于ATT&CK框架的Kubernetes攻击威胁矩阵
- 「」基于Open WebRTC Toolkit(OWT)的8K全景视频低延时直播系统
- 『GK_茵』基于移动端平台的证件识别技术
- 【香港新天域互联】微软基于Chromium的Edge浏览器稳定版81推送
- cnBetaTB:饭制Windows 10任务栏:基于Project Acrylic概念打造
- 机型:华为emui10.1/magic ui3.1开启内侧,基于安卓10.0,有你的机型吗?
- [蓝牙]基于BlueCore2External芯片的蓝牙主机模型方案
- ■第四范式完成2.3亿美元C+轮融资,助力构建基于AI的服务生态体系
- 「全身」基于Vive Trcaker,Manus推全身VR追踪方案
- 「绷带」Grapheal研发基于石墨烯的绷带 设计用于远程监测伤口