西门子 S7-1200 PLC 支持 Modbus TCP 协议,可作为客户端(Client)或服务器(Server)与其他设备通信。以下是官网标准的 Modbus TCP 通信案例,以 S7-1200 作为 Client 和 Server 两种两种典型场景为例,包含硬件配置、软件设置和程序实现。
一、S7-1200 作为 Modbus TCP 服务器(Server)
1. 场景说明
S7-1200 作为 Server,允许其他设备(如 HMI、第三方 PLC)通过 Modbus 协议读取 / 写入其数据(如 I、Q、M、DB 区)。
2. 硬件与软件
3. 配置步骤
(1)硬件组态
(2)启用 Modbus TCP 服务器功能
(3)程序实现(无需额外代码)
启用服务器功能后,PLC 自动响应 Client 的 Modbus TCP 请求,无需编写程序。Client 可通过 Modbus 指令(如 Read Holding Registers)访问映射的地址。
二、S7-1200 作为 Modbus TCP 客户端(Client)
1. 场景说明
S7-1200 作为 Client,主动读取 / 写入远程 Server(如第三方仪表、其他 PLC)的数据。
2. 配置步骤
(1)硬件组态
同服务器配置,确保 S7-1200 与远程 Server 在同一网段(如远程 Server IP:192.168.0.2)。
(2)添加 Modbus TCP 客户端指令库
(3)程序编写(使用 MB_CLIENT 指令)
plaintext
// 调用MB_CLIENT指令读取远程Server的保持寄存器 CALL "MB_CLIENT" , DB10 REQ := "Read_Request" // 上升沿触发读取 DISCONNECT := FALSE MODE := 1 // 1=读取保持寄存器 ADDR := "Server_IP" // 远程Server IP:192.168.0.2 PORT := 502 // 端口号 MB_ADDR := 1 // 远程Server的Modbus站号(若支持) DATA_ADDR := 40001 // 远程保持寄存器地址 QUANTITY := 5 // 读取数量(5个寄存器) DATA_PTR := "Read_Data" // 本地存储地址(如DB2.DBW0) BUSY => "Client_Busy" DONE => "Read_Done" ERROR => "Read_Error" STATUS => "Read_Status"
(4)写入数据示例
plaintext
// 调用MB_CLIENT指令写入远程Server的保持寄存器 CALL "MB_CLIENT" , DB20 REQ := "Write_Request" // 上升沿触发写入 DISCONNECT := FALSE MODE := 16 // 16=写入多个保持寄存器 ADDR := "Server_IP" PORT := 502 MB_ADDR := 1 DATA_ADDR := 40010 // 远程写入地址 QUANTITY := 2 // 写入数量 DATA_PTR := "Write_Data" // 本地数据(如DB3.DBW0) BUSY => "Write_Busy" DONE => "Write_Done" ERROR => "Write_Error" STATUS => "Write_Status"
三、调试与监控
四、官网资源参考
通过以上配置,S7-1200 可实现标准 Modbus TCP 通信,适用于与第三方设备的数据交互场景。核心是正确配置服务器映射和客户端指令参数,确保地址和数据格式匹配。