
我们项目中,涉及到西门子两台及以上的PLC之间数据交互的问题,如何解决呢?

这期重点分享S7协议,由于交互的数据实时性要求不高,又是两台S7-1500,所以选择S7协议,简单高效!

一般来说,西门子PLC支持的基本的通信方式有以下几种,我们总结分享如下:
通信方式
通信方式 | 适用PLC系列 | 实时性 | 配置复杂度 | 典型应用场景 |
|---|---|---|---|---|
PPI | S7-200/SMART | 低(主从轮询) | 低 | 小型PLC组网、HMI连接 |
PROFIBUS-DP | S7-200/300/400/1500 | 高(确定性周期) | 中 | 分布式IO控制、多PLC主从通信 |
S7单/双边通信 | S7-1200/1500 | 中 | 低 | 数据读写(无需伙伴站编程) |
PROFINET IO RT/IRT | S7-1200/1500 | 极高 | 高 | 运动控制、实时数据同步 |
OUC(TCP/UDP) | S7-300/400/1200/1500 | 中低 | 中高 | 跨平台通信、大数据传输 |
根据这些原则及我们项目所有的方式,可以采用TCP开放式通信方式、Modbus TCP 、S7通信。我们这里以S7单边通信为实际应用,把详细的配置和步骤记录下来,也分享给有需要的朋友!

具体步骤
我们首先明确两台PLC的具体身份和地址,这里以本地PLC A和伙伴PLC B为例说明。
本地PLC A IP地址:192.168.0.101
伙伴PLC B IP地址:192.168.0.110
项目配置主要步骤如下所示:
Step1 配置本地PLC A的S7通信连接
新建TIA项目,配置下【设备和网络】-【网络视图】-【连接】-【S7连接】,如下图所示:

选择S7连接后,右键CPU,在下拉菜单选择:

选择【添加新连接】,弹出的对话框如下图所示:

选择当前连接的网络,本例如上图所示,选中后直接点击添加即可。添加完成后,再配置下伙伴PLC B的IP地址:

例如,我们伙伴PLC B的IP地址:

属性里面的本地ID,我们这里用默认的100:

属性里面的地址详细信息,这里选03:

Step2 创建本地PLC A项目中的全局DB
一个用来接收伙伴数据的DB21 :

一个用来发给伙伴数据的DB22 :

当然上述DB的ID根据实际项目而定义,这里自动创建生成的,需要根据实际创建而定。
这里面的DB数量均为10个INT数据。
Step3 创建伙伴PLC B项目中的全局DB
再新建一个项目,添加伙伴PLC B,在程序单元里面直接新建两个数据一样的DB,当然,具体的名称可以不同,传的数据类型和数量一致。我们这里就按照完全相同的去创建:
一个发送给PLC A的数据DB41块:

一个接收PLC A的数据DB42块:

创建完成后,注意伙伴PLC B的属性里面,【常规】-【连接机制】:

要勾选上允许来自远程对象的PUT/GET通信访问,如上图所示。

程序指令
再回到PLC A所在的项目里面,添加指令程序:


具体接口含义:


程序添加完成后,两个项目分别下载到不同的PLC中去,启动运行即可!
当然,单边通信有点不好的就是伙伴PLC B不好获取S7协议的是否通信成功,万一通信中断,对实际设备运行会造成影响,目前我这里是通过DB42里面创建一个HeartCount的INT心跳值来判断是否通信正常。

如果大家有更好的方法,还请留言告知哦!