# S7DebugTool **Repository Path**: puppetgg/S7DebugTool ## Basic Information - **Project Name**: S7DebugTool - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-12 - **Last Updated**: 2026-01-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # S7 Debug Tool - 西门子PLC调试工具

🔧 S7 Debug Tool

原生S7协议实现的西门子PLC调试工具

Platform Framework Protocol License

## 📝 项目简介 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 ## 快速开始 ### 编译运行 1. 打开命令行,进入项目目录: ```bash cd path\to\S7DebugTool ``` 2. 还原NuGet包: ```bash dotnet restore ``` 3. 编译项目: ```bash dotnet build ``` 4. 运行应用: ```bash dotnet run --project S7DebugTool ``` ## 📊 支持的数据类型 | 数据类型 | 描述 | 字节数 | 读取 | 写入 | |---------|------|--------|------|------| | Bool | 布尔值 | 1 bit | ✅ | ✅ | | Byte | 字节 | 1 | ✅ | ✅ | | Word | 无符号字 | 2 | ✅ | ✅ | | DWord | 无符号双字 | 4 | ✅ | ✅ | | Int | 有符号整数 | 2 | ✅ | ✅ | | DInt | 有符号双整数 | 4 | ✅ | ✅ | | Real | 浮点数 | 4 | ✅ | ✅ | | LReal | 双精度浮点数 | 8 | ✅ | ✅ | | String | 字符串 | 可变 | ✅ | ✅ | | DateTime | 日期时间 | 8 | ✅ | ✅ | ## 🛠️ 使用说明 ### 1. 连接PLC - 输入PLC的IP地址 - 设置机架号(通常为0) - 设置插槽号(S7-1200/1500通常为1,S7-300/400通常为2) - 点击"连接"按钮 ### 2. 数据类型读写(第一个标签页) - **读取数据** - 选择内存区域(DB块、输入、输出、标志位) - 选择数据类型(Bool, Byte, Int, Real等) - 输入起始地址 - 系统会自动设置合适的读取长度 - 点击"读取"按钮 - **写入数据** - 选择内存区域和数据类型 - 输入起始地址 - 根据提示输入相应格式的数据 - 点击"写入"按钮 ### 3. 批量字节读写(第二个标签页) - **批量读取** - 设置起始地址和读取长度 - 选择显示格式(HEX/DEC/ASCII) - 可选择是否显示地址 - 点击"批量读取"按钮 - **批量写入** - 输入起始地址 - 输入字节数据(支持多种格式) - 点击"批量写入"按钮 ### 4. 批量任务(第三个标签页) - 添加多个读写任务 - 设置任务参数 - 点击"执行所有"批量执行 ## 📚 技术细节 ### S7协议说明 - **TCP端口**:102 - **协议层次**:S7 → ISO-COTP → TPKT → TCP - **连接流程**: 1. TCP连接(端口102) 2. COTP连接请求/确认 3. S7通信设置(协商PDU大小) ### 内存区域代码 - `0x81`:输入区 (I) - `0x82`:输出区 (Q) - `0x83`:标志位 (M) - `0x84`:数据块 (DB) ### PDU 大小处理 工具自动处理 PDU(协议数据单元)大小限制: - 默认 PDU 大小:240 字节 - 自动协商最大 PDU - 大数据自动分块传输 ### 字节序处理 S7 协议使用大端字节序(Big Endian),工具自动处理: - 读取时:Big Endian → Little Endian - 写入时:Little Endian → Big Endian ## 🐛 故障排除 ### 常见问题 1. **连接失败** - 检查 IP 地址是否正确 - 确认 PLC 是否在线 - 验证机架/插槽号设置 - 检查防火墙设置,确保端口 102 开放 2. **读写失败** - 确认数据块是否存在 - 检查地址范围是否有效 - 验证访问权限 - 确保PLC的防护等级允许外部访问 3. **数据不正确** - 确认数据类型选择正确 - 检查字节序设置 - 验证 PLC 数据格式 ## ⚠️ 注意事项 - 建议在测试环境中使用,避免影响生产系统 - 写入操作请谨慎,可能影响PLC运行状态 - 定期备份PLC程序和数据 ## 📄 许可证 本项目采用 MIT 许可证。详见 [LICENSE](LICENSE) 文件。 ## 🤝 贡献 欢迎提交 Issue 和 Pull Request! ### 贡献指南 1. Fork 本仓库 2. 创建功能分支 (`git checkout -b feature/AmazingFeature`) 3. 提交更改 (`git commit -m 'Add some AmazingFeature'`) 4. 推送到分支 (`git push origin feature/AmazingFeature`) 5. 创建 Pull Request ## 📮 联系方式 - 项目主页: [GitHub](https://github.com/dexcoder/S7DebugTool) - Bug 报告: [Issues](https://github.com/dexcoder/S7DebugTool/issues) ## 🙏 致谢 - 感谢 SIEMENS 提供的 S7 协议文档 - 感谢所有贡献者的努力 ---
Made with ❤️ by S7 Debug Tool Team