两台西门子 S7-1200 通过 Modbus TCP 通信 (一、读写保持寄存器)

什么是 Modbus TCP?其实就是 Modbus 报文格式;用 TCP 协议打包在网际间传输。


PLC_1 配置(客户端)

  • IP 地址:192.168.0.1
  • RemoteAddress = 192.168.0.2(这里写服务器端 PLC 的 IP 地址)
  • ActiveEstablished = 1
  • RemotePort = 502
  • 本地端口:0(意思是本地使用随机端口)
  • 硬件标志符:64

PLC1配置.png


PLC_1 程序一、检查 Modbus TCP 连接状态,连接建立后复位 MB_CLIENT 指令控制位 & 状态位

  • MB_CLIENT 背景数据块中静态变量 "Connected" 用于指示 TCP 连接是否建立
  • TCP 连接成功建立后,复位 MB_CLIENT 指令控制位和状态位
  • 触发第一个 MB_CLIENT 指令的 REQ

PLC1_连接.png


PLC_1 程序二、读取服务器端数据

  • 读取 Modbus TCP 服务器侧 Modbus 地址 40001~40008 的 8 个字节存储到本地 CPU 的 DB20 中
  • MB_DATA_LEN 数据长度: 数据访问的 位或字 的个数。具体参见表 4。
  • MB_DATA_PTR 指向 Modbus 数据寄存器的指针。

PLC1_读取数据.png


PLC_1 程序三、第二步触发

  • 第一个 MB_CLIENT 指令的 DONE 或 ERROR 复位本指令的 REQ
  • 同时触发第二个 MB_CLIENT 指令的 REQ

PLC_1第二步触发.png


PLC_1 程序四、向服务器写入数据

  • 将本地 CPU 的 DB10 中的 8 个字节写入 Modbus TCP 服务器侧 Modbus 地址 40009~40016

PLC_1发送数据.png


PLC_1 程序五、回到第一步

  • 第二个 MB_CLIENT 指令的 DONE 或 ERROR 复位本指令的 REQ
  • 同时触发第一个 MB_CLIENT 指令的 REQ

PLC1_回到第一步.png


10.gif

PLC_2 配置(服务器端)

  • IP 地址:192.168.0.2
  • LocalPort = 502
  • 硬件标志符:64

PLC_2配置.png


PLC_2 程序一、调用 MB_SERVER 指令,使能 Modbus TCP 服务器功能

  • 服务器端 40001-40100 数据映射
  • DB100.DBW0 对应 40001
  • DB100.DBW2 对应 40002
  • 以此类推...

PLC_2使能.png


PLC_2 程序二、读取 Modbus TCP 通信错误代码

PLC2错误代码.png


10.gif

服务器端数据块 DB100 结果展示

最后_DB100.png

标签: 西门子 1200