一、需求介绍
西门子S71200/1500需要读取三菱FX2N的实时温度值(内存地址:D200)和实时压力值(内存地址:D201)。
二、需求分析
- 三菱FX2N自带的是RS422的串行接口,而西门子S71200/1500自带的是以太网口,由于物理接口的不同,两个PLC之间无法直接通讯;
- 三菱FX2N的通讯协议是编程口协议,是一种串行接口协议,而西门子S71200/1500的通讯协议是S7协议,或者是ModbusTCP协议,是一种网络接口协议,由于通讯协议的不同,两个PLC之间无法直接通讯;
这里为了实现两个PLC之间的数据交换,就必须要解决物理接口和通讯协议不一致的问题。
三、硬件连接
可以在三菱FX2N一侧加装硬件:NET30-FX,它能解决物理接口和通讯协议不一致的问题:
- 首先可以将三菱FX2N的RS422串行接口转成以太网口,解决了两个PLC物理接口不一致的问题;
- 其次可以将三菱FX2N的编程口协议转成ModbusTCP协议,解决了两个PLC通讯协议不一致的问题。
最终将NET30-FX、西门子S71200/1500,监控PC通过网线接到交换机。
四、软件设置
这里,西门子S71200/1500需要作ModbusTCP的客户端,而三菱FX2N需要作ModbusTCP的服务端。
三菱FX2N通过NET30-FX,已经实现了ModbusTCP的服务端的功能,ModbusTCP和三菱FX2N内部寄存器之间的对应关系如下:
MODBUS地址 | PLC内部寄存器地址 | 数据类型 | 计算公式 | modbus功能号 | 最大指令数 |
000001~ | 输出线圈:Y0~ | 位 | Ym = 000001+m ① | FC1(读线圈) FC5(写线圈) | FC1:512 FC5:1 |
005001~ | 特殊:M8000~ | M8m = 005001+m ② | |||
006001~ | 定时器线圈:T0~ | Tm = 006001+m | |||
007001~ | 计数器线圈:C0~ | Cm = 007001+m | |||
010001~ | 线圈:M0~ | Mm = 010001+m | |||
030001~ | 线圈:S0~ | Sm = 030001+m | |||
100001~ | 输入:X0~ | 位 | Xm = 100001+m ③ | FC2(读输入) | 512 |
400001~ | 定时器:T0~ | 字 | Tm = 400001+m | FC3(读寄存器) FC16(写寄存器) FC6(写单一寄存器) | FC3:127 FC16:127 FC6:1 |
401001~ | 计数器:C0~C199 | Cm = 401001+m | |||
411001 ~ | 计数器:C200~C255 | Cm = 411001+(m-200)*2 ④ | |||
401301~ | 特殊:D8000~ | D8m = 401301+m ⑤ | |||
402001~ | 资料暂存器:D0~ | Dm = 402001+m | |||
420001~ | 文件寄存器:R0~ | Rm=420001+m |
通过公式计算出:
实时温度值D200对应的Modbus地址是402201;
实时压力值D201对应的Modbus地址是402202;
西门子S71200/1500可以通过调用通讯库中的MB_CLIENT指令实现ModbusTCP的客户端的功能:
MB_CLIENT指令参数中设置的IP地址(192.168.1.208)是NET30-FX的IP地址(NET30-FX的IP可以任意设置),并设置读取了Modbus地址402201(三菱FX2N的D200)开始的2个字存入DB66.DBW0开始的2个字中。
五、数据展示
通过三菱FX2N的编程软件读取到的D200和D201的值如下:
通过西门子S71200/1500的编程软件读取到的DB66.DBW0和DB66.DBW2的值如下:
通过对比,数据完全一致,S71200/1500成功通过ModbusTCP的通讯方式读取了三菱FX2N的数据。