![c30759253154b384c243e98b0ea7aaf7.png](https://i-blog.csdnimg.cn/blog_migrate/267b931dd912ea5a798a3ac0ba1a59b6.jpeg)
因项目需要PLC与PC连接,传输一些状态和控制信息。为了最快的响应速度,保险的方式是采用I/O直接连接。但这需要额外增加I/O卡,而且和PLC的I/O功能有些重复。那么,网络通信是否可行呢?本文将进行一些实验。
![4f3dc40c071c6643e5fda06feb3f1a4e.png](https://i-blog.csdnimg.cn/blog_migrate/b1521f8e7b7b03171cee802557925232.jpeg)
图:西门子S7-1200
概述
使用的PLC是目前主流的西门子S7-1200. 它支持的网络标准/协议很多,比如PROFINET, PROFIBUS等,还可以间接连接Modbus设备。每个标准下都有很多服务/协议,详情可以参考Communication with SIMATIC 。但这些标准有些是用于西门子的设备互联的,不一定适用于PC。
下图是 TIA Portal V14 中通信相关的指令,也可以作为线索。
![ac2499283a92ac5f3b4c2345144fdb4f.png](https://i-blog.csdnimg.cn/blog_migrate/3e33a0c6fd92f1a6eb7944bec61256c8.jpeg)
图:PLC通信指令
和PC的通信,一种方式是使用OPC server,但它是基于OLE/COM的,只能用于Windows。有些软件比如LabView提供了和西门子PLC通信的支持。跨平台的开源的方案,有一个是Snap7。我们可以先试试这个。另外可以尝试最原始的TCP协议。
Snap7
Snap7是针对西门子S7协议的。PLC不需任何配置就是S7的server,而我们只需要利用Snap7 lib,就可以让PC作为S7 client,读/写服务器端的数据块。
数据块映射
数据块分为输入区(DI, AI),输出区(DQ, AQ),程序数据块(DB)等等。下图中,DB3是测试程序的数据块。