S7 Debug Tool 是一个基于 .NET 8 和 WPF 开发的西门子 PLC 调试工具。该工具完全使用原生 C# 实现了 S7 通信协议,无需依赖任何第三方协议库,提供了一个直观易用的界面来读写 PLC 数据。
- 🚀 原生协议实现 - 完全自主实现 S7 协议栈,无第三方依赖
- 📊 全数据类型支持 - 支持所有 S7 数据类型的读写操作
- Bool, Byte, Word, DWord, Int, DInt, Real, LReal, String, DateTime
- 🔄 智能数据分块 - 自动处理超过 PDU 大小限制的数据传输
- 🎯 多内存区域访问 - 支持 DB、Input、Output、Memory 等区域
- 📋 批量操作 - 支持批量读写和任务管理
- 🖥️ 现代化UI - 基于 WPF 的响应式用户界面,支持自动滚动日志
- 🔍 多格式显示 - 支持十六进制、十进制、ASCII格式数据显示
应用层 (S7 Debug Tool)
↓
S7 协议层 (S7 Protocol)
↓
ISO-COTP 层 (ISO 8073)
↓
TPKT 层 (RFC1006)
↓
TCP 层 (Port 102)
S7DebugTool/
├── S7DebugTool.sln # 解决方案文件
├── S7DebugTool/ # WPF项目
│ ├── Services/ # 核心服务层
│ │ ├── S7Client.cs # S7协议客户端实现
│ │ ├── S7DataHelper.cs # 数据类型转换辅助类
│ │ └── S7ClientExtensions.cs # 扩展方法
│ ├── ViewModels/ # MVVM视图模型
│ │ └── MainViewModel.cs # 主视图模型
│ ├── Views/ # WPF视图
│ │ ├── MainWindow.xaml # 主窗口
│ │ └── MainWindow.xaml.cs # 主窗口代码
│ ├── Models/ # 数据模型
│ │ └── BatchTask.cs # 批量任务模型
│ ├── Converters/ # 值转换器
│ ├── App.xaml # 应用程序配置
│ └── S7DebugTool.csproj # 项目文件
└── README.md # 项目说明文档
- .NET 8.0 或更高版本
- Windows 10/11
- Visual Studio 2022 或 VS Code with C# Dev Kit
- 打开命令行,进入项目目录:
cd path\to\S7DebugTool- 还原NuGet包:
dotnet restore- 编译项目:
dotnet build- 运行应用:
dotnet run --project S7DebugTool| 数据类型 | 描述 | 字节数 | 读取 | 写入 |
|---|---|---|---|---|
| Bool | 布尔值 | 1 bit | ✅ | ✅ |
| Byte | 字节 | 1 | ✅ | ✅ |
| Word | 无符号字 | 2 | ✅ | ✅ |
| DWord | 无符号双字 | 4 | ✅ | ✅ |
| Int | 有符号整数 | 2 | ✅ | ✅ |
| DInt | 有符号双整数 | 4 | ✅ | ✅ |
| Real | 浮点数 | 4 | ✅ | ✅ |
| LReal | 双精度浮点数 | 8 | ✅ | ✅ |
| String | 字符串 | 可变 | ✅ | ✅ |
| DateTime | 日期时间 | 8 | ✅ | ✅ |
- 输入PLC的IP地址
- 设置机架号(通常为0)
- 设置插槽号(S7-1200/1500通常为1,S7-300/400通常为2)
- 点击"连接"按钮
-
读取数据
- 选择内存区域(DB块、输入、输出、标志位)
- 选择数据类型(Bool, Byte, Int, Real等)
- 输入起始地址
- 系统会自动设置合适的读取长度
- 点击"读取"按钮
-
写入数据
- 选择内存区域和数据类型
- 输入起始地址
- 根据提示输入相应格式的数据
- 点击"写入"按钮
-
批量读取
- 设置起始地址和读取长度
- 选择显示格式(HEX/DEC/ASCII)
- 可选择是否显示地址
- 点击"批量读取"按钮
-
批量写入
- 输入起始地址
- 输入字节数据(支持多种格式)
- 点击"批量写入"按钮
- 添加多个读写任务
- 设置任务参数
- 点击"执行所有"批量执行
- TCP端口:102
- 协议层次:S7 → ISO-COTP → TPKT → TCP
- 连接流程:
- TCP连接(端口102)
- COTP连接请求/确认
- S7通信设置(协商PDU大小)
0x81:输入区 (I)0x82:输出区 (Q)0x83:标志位 (M)0x84:数据块 (DB)
工具自动处理 PDU(协议数据单元)大小限制:
- 默认 PDU 大小:240 字节
- 自动协商最大 PDU
- 大数据自动分块传输
S7 协议使用大端字节序(Big Endian),工具自动处理:
- 读取时:Big Endian → Little Endian
- 写入时:Little Endian → Big Endian
-
连接失败
- 检查 IP 地址是否正确
- 确认 PLC 是否在线
- 验证机架/插槽号设置
- 检查防火墙设置,确保端口 102 开放
-
读写失败
- 确认数据块是否存在
- 检查地址范围是否有效
- 验证访问权限
- 确保PLC的防护等级允许外部访问
-
数据不正确
- 确认数据类型选择正确
- 检查字节序设置
- 验证 PLC 数据格式
- 建议在测试环境中使用,避免影响生产系统
- 写入操作请谨慎,可能影响PLC运行状态
- 定期备份PLC程序和数据
本项目采用 MIT 许可证。详见 LICENSE 文件。
欢迎提交 Issue 和 Pull Request!
- Fork 本仓库
- 创建功能分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 创建 Pull Request
- 感谢 SIEMENS 提供的 S7 协议文档
- 感谢所有贡献者的努力
Made with ❤️ by S7 Debug Tool Team