惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

腾讯CDC
博客园 - Franky
MyScale Blog
MyScale Blog
L
LangChain Blog
Martin Fowler
Martin Fowler
Recent Announcements
Recent Announcements
Stack Overflow Blog
Stack Overflow Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 司徒正美
量子位
A
About on SuperTechFans
C
Check Point Blog
大猫的无限游戏
大猫的无限游戏
Last Week in AI
Last Week in AI
小众软件
小众软件
Apple Machine Learning Research
Apple Machine Learning Research
I
InfoQ
V
Visual Studio Blog
Vercel News
Vercel News
B
Blog
爱范儿
爱范儿
aimingoo的专栏
aimingoo的专栏
U
Unit 42

博客园 - Gu

检查采集程序心跳的程序挂了。看来得套娃,再来一个检测检测程序的程序 Web.INI vue前端项目,默认request 30秒超时,如何设置某个导出动作1分钟才超时 提示coreclr.dll 出错?栈溢出? .Net 6使用轻量级任务调度Coravel实践 Blazor 循环的迷思 Grafana 可视化图表 mysqldump 导出批量忽略某些表的bat脚本 cron表达式的讲解 若依 自定义注解@Log,实现aop java 处理日期时间有多个类,用哪个比较好 文件同步工具 西门子PLC Modus TCP通讯 thingsboard 接口 圆度和径向跳动,直线度的区别 安装thingsboard 3.7 dotNET_Reactor 混淆net程序时, 一些全局变量要加上volatile 修饰符, 不然优化到不会改变 Ant Design Blazor Table 组件的 自定义分页样式, 显示全部记录数,ShowTotal 安全可靠测评结果公告(2023年第1号) 2023-12-26 来源: 中国信息安全测评中心 Blazor 和Known 框架学习
上位机开发人员真的需要物理 PLC 或博途吗?我们仅仅需要一个...
Gu · 2026-06-04 · via 博客园 - Gu

s7sim-0.5.0:社区开源 S7 通信模拟器使用指南

一、项目概述

s7sim 是一款由社区开发者维护的开源 S7 通信模拟器,当前版本为 0.5.0。它基于成熟的 Snap7 开源库构建

,专注于模拟西门子 S7 系列 PLC 的通信协议行为,而非完整的 PLC 逻辑执行。

与西门子官方的 PLCSIM Advanced(需授权且仅支持 S7-1500)

不同,s7sim 的核心定位是"够用就好"——它不做软 PLC,不执行梯形图或 ST 代码,只聚焦于通信协议的响应层面。这使得它体积小巧(仅数 MB)、启动迅速、零依赖,无需安装庞大的 TIA Portal 或 SQL Server。

为什么需要 s7sim?

工业自动化项目中,上位机开发人员常面临以下尴尬:

  • 没有特定型号的物理 PLC,或设备被锁在车间无法随时使用

  • 电气部门的 PLC 程序尚未完成,无法配合调试

  • 博途(TIA Portal)安装包动辄数十 GB,且捆绑大量不必要的服务

  • 即使安装了博途,也不一定有权限获取电气部门的 PLC 程序

二、核心功能与架构

2.1 功能特性

表格

功能模块说明
S7 协议服务 基于 ISO-on-TCP(RFC 1006),监听标准 102 端口
DB 块模拟 支持配置多个 DB 块,自定义编号与大小
MB 区模拟 支持标志位存储区(M 区)的读写
数据类型支持 BOOL、BYTE、WORD、DWORD、INT、DINT、REAL 等
实时监看 类似博途在线监控,实时查看数据变化
脚本自动化 内置脚本引擎,支持自动化测试逻辑
跨平台 基于 Python/Snap7,支持 Windows/Linux

2.2 技术架构

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 授权,可安全用于商业项目


三、安装与配置

3.1 环境要求

  • Python 3.8+

  • pip 包管理器

  • (可选)Wireshark 用于协议抓包分析

3.2 安装步骤

bash

# 通过 PyPI 安装
pip install s7sim==0.5.0

3.3 快速启动

方式一:命令行启动

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
)


四、使用方法详解

4.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

4.2 与上位机程序联调

配置完成后,上位机程序(使用 Snap7、S7NetPlus、libnodave 等库)可直接连接:

C# 示例(使用 S7NetPlus):

csharp

using S7.Net;

var plc = new Plc(CpuType.S71500, "192.168.1.100", 0, 1);
plc.Open();