新闻中心

PRESS CENTER 纵横智控
你的位置: 首页 新闻 技术应用
纵横智控

教程-西门子S7协议转换为Modbus协议

2024-10-12 15:00:35 阅读: 发布人:纵横智控

需求概述

本章主要实现一个流程:EG8200采集西门子S7-200smart的数据,并将数据存储在Modbus寄存器中,等待外部主机通过Modbus TCP协议来读取。

要采集的PLC的IP及端口:

PLC

S7-200smart

IP

192.168.0.34/102

地址

数据类型

属性

名称

I0.0

Boolean

只读

bitSignal1

I0.1

Boolean

只读

itSignal2

I0.2

Boolean

只读

itSignal3

I0.3

Boolean

只读

itSignal4

I0.4

Boolean

只读

itSignal5

I0.5

Boolean

只读

itSignal6

I0.6

Boolean

只读

itSignal7

I0.7

Boolean

只读

itSignal8

VD20

Float

只读

floatSignal1

VD24

Float

只读

floatSignal2

VD28

Float

只读

floatSignal3

VD32

Float

只读

floatSignal4

VW36

Usint16

只读

uintSignal1

VW38

Usint16

只读

uintSignal2

VW40

Usint16

只读

uintSignal3

VW42

Usint16

只读

uintSignal4

需求分析

在制作流程时,基础的逻辑是根据功能实现来制作流程。该需求经过分析可以得出,主要分为PLC数据读取与存储、Modbus TCP通信两个部分。

1.通过西门子S7协议读取PLC的数据,得到的数据存储在内存中(西门子节点)

2.将数据进行格式化(函数节点)

3.将格式化后的数据存储到寄存器中(Modbus Server节点)

4.外部主机连接主动读取

教程-西门子S7协议转换为Modbus协议

需求实现

1.采集PLC数据

从节点库拖入一个S7读数据节点,以及一个调试节点,调试节点用于查看读取到的PLC的数据,方便定位问题:

教程-西门子S7协议转换为Modbus协议


双击西门子节点,根据需求概述的内容填写对应的设置参数,如下图所示:

如果是连续地址,可配置起始地址并填写读取长度即可

IP:PLC的IP

端口:102(S7协议通信默认端口102)

采集周期:1000ms(默认2000ms,可自定义)

超时周期:2000ms(默认2000ms,可自定义)

数据点配置(根据帮助文档可以找到对应关系)

V0.0

V0.6

V1.6

V2.5

I0.0

I0.1

VD4

VD8

VD12

VD16

VD20

VD24

VD28

VD32

VW36

VW38

VW40

VW42

如果是连续地址,可配置起始地址并填写读取长度即可


如果设置正确,调试窗口会有日志打印,显示的是读取到的数据内容:

教程-西门子S7协议转换为Modbus协议


有的时候PLC数据点比较多,手动依次录入比较繁琐。节点支持数据点的导入导出或者参数传递的方式来读取:

教程-西门子S7协议转换为Modbus协议


本例程用到的传参代码如下:

msg.payload = [

{ func: "ReadBoolArray", body: { name: "", address: "I0", length: 8 } },

{ func: "ReadFloatArray", body: { name: "", address: "VD20", length: 4 } },

{ func: "ReadUInt16Array", body: { name: "", address: "VW36", length: 4 } }

]

return msg;


2.数据进行格式化

使用函数节点将PLC数据处理成对应格式:

教程-西门子S7协议转换为Modbus协议


数据格式化参考代码如下:

var discretes = []

var holdings = []

var data = msg.payload

discretes = data.I0

holdings[0] = data.VD20[0]

holdings[2] = data.VD20[1]

holdings[4] = data.VD20[2]

holdings[6] = data.VD20[3]

holdings[8] = data.VW36[0]

holdings[9] = data.VW36[1]

holdings[10] = data.VW36[2]

holdings[11] = data.VW36[3]

msg.discretes = discretes

msg.holdings = holdings

return msg;


3.存储到Modbus寄存器

使用Modbus服务节点,将格式化的数据传入,并配置存储方式:

教程-西门子S7协议转换为Modbus协议


使用TCP IN节点和TCP OUT节点搭配实现TCP 服务端:

教程-西门子S7协议转换为Modbus协议


使用上位机(Modbus Poll软件)通过Modbus TCP来读取映射的数据:

教程-西门子S7协议转换为Modbus协议


源码

[{"id":"ac557854c44a5144","type":"Siemens","z":"a73a8f4565433249","name":"","protocol":"iplink_SiemensS7","IPAddress":"192.168.0.34","DestPort":"102","IPLinkTimeout":"2000","IPCommTimeout":"2000","Spname":"COM10","Baudrate":"9600","Databits":"8","Stopbit":"1","Paritybit":"0","RTSEnable":false,"SpLinktimeout":"2000","SpIntertimeout":"-1","workMode":"read","readMode":"trigger","readCyc":"2000","vartable":[],"SiemensS7Model":"5","SiemensS7ConnectionType":"1","SiemensS7Rack":"0","SiemensS7Slot":"0","SiemensS7LocalTSAP":"0","SiemensS7DestTSAP":"0","SiemensPPIStation":"2","stringvar":[],"customName":"Siemens:S7-S200Smart","x":670,"y":1080,"wires":[["416b9e28dcbaffa9"]]},{"id":"06b785ae918b8f6a","type":"debug","z":"a73a8f4565433249","name":"调试 278","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1260,"y":1140,"wires":[]},{"id":"db188f4ed1966c88","type":"function","z":"a73a8f4565433249","name":"函数计算 31","func":"msg.payload = [
{ func: "ReadBoolArray", body: { name: "", address: "I0", length: 8 } },
{ func: "ReadFloatArray", body: { name: "", address: "VD20", length: 4 } },
{ func: "ReadUInt16Array", body: { name: "", address: "VW36", length: 4 } }
]
return msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":430,"y":1080,"wires":[["ac557854c44a5144"]]},{"id":"425a932dfda4e617","type":"inject","z":"a73a8f4565433249","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":230,"y":1080,"wires":[["db188f4ed1966c88"]]},{"id":"416b9e28dcbaffa9","type":"function","z":"a73a8f4565433249","name":"函数计算 33","func":"var discretes = []
var holdings = []
var data = msg.payload
discretes = data.I0
holdings[0] = data.VD20[0]
holdings[2] = data.VD20[1]
holdings[4] = data.VD20[2]
holdings[6] = data.VD20[3]
holdings[8] = data.VW36[0]
holdings[9] = data.VW36[1]
holdings[10] = data.VW36[2]
holdings[11] = data.VW36[3]
msg.discretes = discretes
msg.holdings = holdings
return msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":870,"y":1080,"wires":[["539601edce2e5927"]]},{"id":"539601edce2e5927","type":"modbusServer","z":"a73a8f4565433249","name":"","uid":1,"model":"2","coils":100,"discretes":100,"holdings":100,"input":100,"columns":[{"Type":"3","Address":"0","Method":"7"},{"Type":"3","Address":"2","Method":"7"},{"Type":"3","Address":"4","Method":"7"},{"Type":"3","Address":"6","Method":"7"}],"x":1100,"y":1080,"wires":[["815f45a3a40a372a"],["06b785ae918b8f6a"]]},{"id":"fbadcb99655853f9","type":"tcp in","z":"a73a8f4565433249","name":"","server":"server","host":"","port":"502","datamode":"stream","datatype":"buffer","newline":"","topic":"","trim":false,"base64":false,"tls":"","x":870,"y":1040,"wires":[["539601edce2e5927"]]},{"id":"815f45a3a40a372a","type":"tcp out","z":"a73a8f4565433249","name":"","host":"","port":"","beserver":"reply","base64":false,"end":false,"tls":"","x":1270,"y":1060,"wires":[]}]

 西门子S7协议与Modbus协议之间的转换,是工业自动化领域常见的需求之一。通过硬件纵横智控公司的产品EG8200可以确保设备之间的数据通信顺畅。在实施过程中,合理配置地址映射和通信参数,能有效提升系统的可靠性和实时性,为工业自动化系统的优化和扩展提供坚实的基础。

热门产品