西门子s7协议转换工具使用说明

西门子s7协议转换工具使用说明

LinJiefeng Lv2

开发初衷

为了方便未安装tia portal的用户可以通过Modbus poll监控plc数据块的数据;后面不断的迭代支持更多的协议,如IEC104、MQTT、Web api等协议。

源码仓库

gitee仓库传送门

介绍

使用snap7读取西门子PLC的DB块数据,目前已测试PLC有1200和1500系列和200smart系列
本程序已在windows和linux平台测试通过;且在实际项目中稳定运行一年以上。
本程序开发使用snap7,paho-mqtt库,flask库,colorama库,python3.13版本,感谢他们!

功能

  • 支持多个PLC(1200,1500)DB块的读写转发,通过modbusTCP、MQTT、web api和ice104协议进行通讯读写。
  • 一次性把DB块的数据读回来再做数据解析,提高通讯时效性,减轻通讯负载。
    最高偏移量-最小偏移量+最高偏移量数据类型字节长度=要读取的所有字节
    一次性读取字节所需时长可以通过s7客户端读取获得,一般不会超过1秒,视网络情况而定。
    根据最高通讯时长在config.ini设置snap7读取频率。默认1秒
  • 支持开机自启动设置
  • 支持mqtt上报模板修改(json格式上报)
更新记录

2024年3月24日更新

  • 新增linux平台运行的snap7客户端源码
  • Mqtt03.py更新,为paho-mqtt2.0版本的库做了适配,源码运行需要注意安装2.0版本的mqtt库
  • 修复mqtt写操作,字节、整型负数时无法写入的问题

2024年5月9日更新

  • 修复字节最高位布尔置1后,其他位无法置1的bug

2024年5月29日更新

  • 支持文件传输和远程配置
  • 自动识别系统,windows或linux,都运行同一个源码

2024年10月21日更新

  • 优化开机自启动功能,去除延时启动参数

2025年01月08日更新

  • 优化代码,将部分功能提取到独立的函数中,提高代码的可读性和可维护性

  • 修复同一地址,多个数据类型时,读取长度异常的处理的bug

2025年04月21日更新

  • 新增web api接口,iec104服务端。服务器参数可在config.ini配置。

  • iec104点位地址必须唯一,支持的数据类型有浮点整型布尔。读写为同一ioa地址

2025年04月28日更新

  • 修复iec104点位无配置时,数据变化不自动上报及下发错误的bug

2025年05月28日更新

  • 更新版本号为3.4.2,修复上报模板=@@@时,不上报数据的bug

2025年07月02日更新

  • 更新版本号为3.5.0,弃用modbus-tk库,新增modbus tcp服务端程序,重写modbus交互方法

配置

config.ini内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#‘#’后为注释;当前配置文件编码为UTF-8编码
#注意:修改键名称会使程序运行出错,
#格式:键=值

# 开机启动,1是,0否
开机启动 = 0

# 延时启动,已废弃(勿删此键值)
自启延时 = 5

#------远程操作------
远程密码 = 123

隐藏文件夹 = 0
#------远程操作------

#------MQTT------
#是否使用MQTT上报数据
MQTT使能 = 1

#客户端ID
ID = mqttx_388cab12

#ssl/tls加密,0停用,1启用
#是否使用加密=1
是否使用加密 = 0

#主题
发布主题 = /sys/mqttx_388cab12/post
订阅主题 = /sys/mqttx_388cab12/pub

#服务端地址
#地址 = broker.emqx.io
地址 = www.icsteam.cn
#根据需要可修改端口号
#端口=8883
端口 = 1883

#需要时使用
#账户 = abc
#密码 = 123

#mqtt上报间隔,秒
上报间隔 = 5
#上报格式模板 @@@会替换成要上报的字典数据,除@@@之外字符的可以任意修改,必须是json格式,{"properties":@@@}:
上报格式模板 = {"properties":@@@}

#接收下发模板(写死了,不起作用)
下发格式模板 = {"SetProperty":@@@}
#------MQTT------

#------Snap7------
#控制器地址,端口默认102

#每个plc一个参数列表,多个plc参数用逗号隔开,ID唯一不重复
#plc参数列表说明(plc地址,modbus ID(唯一),plc名称(唯一),
#点位文件路径csv,plc机架号,plc卡槽号[200smart、1200和1500使用机架号和卡槽号使用0,0即可])
控制器参数 = [
('127.0.0.1',1,'plc1','ztest.csv',0,0), # 1号配置
#('127.0.0.2',2,'plc2','ztest2.csv',0,0), # 2号配置
]
#读控制器频率,单位秒;1个plc读2000个字节内,读5个plc,1秒内
读取频率 = 1
#------Snap7------

#------Modbus_Tcp------
#是否使用Modbus_Tcp服务端功能,1使用,0停用
mbtcp使能 = 1
#Modbus_Tcp服务端地址,地址默认:0.0.0.0
mbtcp地址 = 0.0.0.0
#Mobus_Tcp服务端端口
mbtcp端口 = 502
#------Modbus_Tcp------

#------web_api------
# 获取数据地址http://webApi地址:端口/get
# 设置数据地址http://webApi地址:端口/post
# 数据上报与下发格式与mqtt一致
webApi使能 = 1
webApi地址 = 127.0.0.1
webApi端口 = 5000
#------web_api------

#------iec104------
iec104使能 = 1
iec104地址 = 0.0.0.0 # 默认
iec104端口 = 2404
iec104站地址 = 1
#------iec104------

控制器参数配置说明

1
2
3
4
5

控制器参数 = [
('127.0.0.1',1,'plc1','ztest.csv',0,0), # 1号配置
#('127.0.0.2',2,'plc2','ztest2.csv',0,0), # 2号配置
]

[]包含一个或多个plc配置,每个plc配置用()括起来,参数依次为:

  • 控制器地址
  • modbus ID(唯一)
  • plc名称(唯一)
  • 点位文件路径csv(相对和绝对路径均可)
  • 机架号
  • 槽号

安装教程

windwos平台

无需安装,双击exe文件即可运行。

linux平台

1
2
pip3 install -r requirements.txt #Linux下运行安装依赖
pip install -r requirements.txt #windows下运行安装依赖

使用说明

PLC设置

1. 硬件组态

  • ①常规
  • ②连接机制
  • ③勾选允许来自远程对象的PUTIGET通信访问
PLC设置
PLC设置

2. 数据块设置

  • ①不勾选优化的块访问
数据块设置
数据块设置

必须设置

  • 允许来自远程对象的PUTIGET通信访问
  • 优化的块访问

运行程序

  1. 配置config.ini文件
  2. 配置ztest.csv文件(按照这个文件里的字段,进行配置,文件名可以修改,后缀必须csv,并在config.ini的控制器参数配置中填写路径)
  3. 双击Snap7Client3.5.0.exe文件运行程序
    程序会自动生成snap7TMP文件夹,modbus点位表在snap7文件夹中
控制器参数配置
控制器参数配置

modbus点位及读写操作

modbus点位
modbus点位
modbus读写
modbus读写

通过iec104通讯读写

iec104读写
iec104读写

通过web api通讯读写

web api读写
web api读写

通过mqtt通讯读写
同web api

源码运行

安装好依赖后,进入源码目录,运行如下命令:

1
2
python3 Snap7Client3.5.0.py     # linux下运行
python Snap7Client3.5.0.py # windwos下运行
  • 标题: 西门子s7协议转换工具使用说明
  • 作者: LinJiefeng
  • 创建于 : 2025-07-18 17:00:51
  • 更新于 : 2025-07-27 17:41:00
  • 链接: https://blog.icsteam.cn/2025/07/18/201_snap7_readme/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论