












s7sim 是一款由社区开发者维护的开源 S7 通信模拟器,当前版本为 0.5.0。它基于成熟的 Snap7 开源库构建
,专注于模拟西门子 S7 系列 PLC 的通信协议行为,而非完整的 PLC 逻辑执行。
与西门子官方的 PLCSIM Advanced(需授权且仅支持 S7-1500)
不同,s7sim 的核心定位是"够用就好"——它不做软 PLC,不执行梯形图或 ST 代码,只聚焦于通信协议的响应层面。这使得它体积小巧(仅数 MB)、启动迅速、零依赖,无需安装庞大的 TIA Portal 或 SQL Server。
工业自动化项目中,上位机开发人员常面临以下尴尬:
没有特定型号的物理 PLC,或设备被锁在车间无法随时使用
电气部门的 PLC 程序尚未完成,无法配合调试
博途(TIA Portal)安装包动辄数十 GB,且捆绑大量不必要的服务
即使安装了博途,也不一定有权限获取电气部门的 PLC 程序
表格
| 功能模块 | 说明 |
|---|---|
| S7 协议服务 | 基于 ISO-on-TCP(RFC 1006),监听标准 102 端口 |
| DB 块模拟 | 支持配置多个 DB 块,自定义编号与大小 |
| MB 区模拟 | 支持标志位存储区(M 区)的读写 |
| 数据类型支持 | BOOL、BYTE、WORD、DWORD、INT、DINT、REAL 等 |
| 实时监看 | 类似博途在线监控,实时查看数据变化 |
| 脚本自动化 | 内置脚本引擎,支持自动化测试逻辑 |
| 跨平台 | 基于 Python/Snap7,支持 Windows/Linux |
plain
┌─────────────────────────────────────────┐
│ s7sim-0.5.0 模拟器 │
├─────────────────────────────────────────┤
│ 协议层 (Snap7/libnodave) │
│ ├── ISO-on-TCP 服务器 │
│ └── S7 协议帧解析 (TPKT/COTP/S7 PDU) │
├─────────────────────────────────────────┤
│ 数据层 │
│ ├── DB 块内存映射 │
│ ├── MB 区内存映射 │
│ └── 数据变更事件通知 │
├─────────────────────────────────────────┤
│ 接口层 │
│ ├── CLI 命令行工具 │
│ ├── Python API │
│ └── RESTful HTTP API (v0.5.0 新增) │
└─────────────────────────────────────────┘
s7sim 底层依赖于 Snap7 或 libnodave 等成熟开源库。Snap7 是目前使用最广泛的开源 S7 协议通讯库,开源、稳定且资料齐全
;libnodave 则支持通过 PPI、MPI 或以太网直接与西门子 PLC 通信,采用 LGPL 授权,可安全用于商业项目
。
Python 3.8+
pip 包管理器
(可选)Wireshark 用于协议抓包分析
bash
# 通过 PyPI 安装
pip install s7sim==0.5.0
方式一:命令行启动
bash
# 启动默认配置(监听 0.0.0.0:102,创建 DB1[1024字节])
s7sim start
# 指定配置启动
s7sim start --config ./my_plc.yaml
# 前台调试模式,显示详细日志
s7sim start --debug
方式二:编程式启动
Python
from s7sim import S7Server
# 创建模拟器实例
server = S7Server(
host="0.0.0.0",
port=102,
rack=0,
slot=1
)
s7sim-0.5.0 支持 YAML/JSON 格式的配置文件,便于版本控制和团队协作:
yaml
# plc_simulation.yaml
server:
host: "192.168.1.100"
port: 102
rack: 0
slot: 1
datablocks:
- number: 1
size: 1024
comment: "系统参数区"
- number: 201
size: 256
comment: "设备控制信号"
- number: 202
size: 256
comment: "设备状态反馈"
merkers:
size: 512
启动命令:
bash
s7sim start --config plc_simulation.yaml
配置完成后,上位机程序(使用 Snap7、S7NetPlus、libnodave 等库)可直接连接:
C# 示例(使用 S7NetPlus):
csharp
using S7.Net;
var plc = new Plc(CpuType.S71500, "192.168.1.100", 0, 1);
plc.Open();
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。