# ModbusTCP **Repository Path**: tpsonlizhuang/ModbusTCP ## Basic Information - **Project Name**: ModbusTCP - **Description**: 使用ModbusTCP与PLC板进行通信 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-05-28 - **Last Updated**: 2025-06-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Node.js与PLC通信方案 本项目提供了一个完整的Node.js与PLC通信解决方案,支持通过交换机与西门子和罗克韦尔PLC进行稳定可靠的通信,实现数据采集和设备控制功能。 ## 功能特点 - 支持多品牌PLC:西门子S7-1200/1500系列、罗克韦尔1769/1756系列 - 支持多种通信协议:Modbus TCP和Modbus RTU - 完整的数据采集功能:定时采集、触发采集、数据存储 - 灵活的设备控制功能:单点控制、批量控制、命令记录 - 稳定可靠的通信机制:自动重连、心跳检测、错误处理 - 完善的日志记录:操作日志、错误日志、通信日志 - 模块化设计:易于扩展和维护 ## 系统架构 系统采用分层架构设计: 1. **应用层**:提供用户接口、数据可视化、业务逻辑处理 2. **服务层**:处理数据采集、设备控制、数据处理和存储 3. **通信层**:实现与PLC的通信协议适配和数据交换 4. **网络层**:通过交换机实现物理连接和数据传输 5. **设备层**:包括各种型号的PLC设备 详细架构请参考 `architecture_diagram.mmd` 文件、架构图.png。 ## 目录结构 ``` ModbusTCP/ ├── src/ # 源代码目录 │ ├── adapters/ # PLC适配器 │ │ ├── plc-adapter.js # 适配器基类 │ │ ├── siemens-plc-adapter.js # 西门子PLC适配器 │ │ └── rockwell-plc-adapter.js # 罗克韦尔PLC适配器 │ ├── config/ # 配置文件 │ │ └── config.js # 系统配置 │ ├── core/ # 核心模块 │ │ ├── modbus-tcp-client.js # Modbus TCP客户端 │ │ ├── modbus-rtu-client.js # Modbus RTU客户端 │ │ ├── data-collector.js # 数据采集模块 │ │ └── device-controller.js # 设备控制模块 │ ├── utils/ # 工具类 │ │ └── logger.js # 日志工具 │ └── app.js # 应用程序入口 ├── index.js # 示例使用脚本 ├── stability-test.js # 通信稳定性测试脚本 ├── system_architecture.md # 系统架构文档 ├── architecture_diagram.mmd # 系统架构图(Mermaid格式) ├── todo.md # 任务清单 ├── package.json # 项目配置 └── README.md # 项目说明 ``` ## 安装与使用 ### 前置条件 - Node.js 14.x 或更高版本,去官网下载安装。安装完成后,在命令行中输入 `node -v` 检查是否安装成功。 - npm 6.x 或更高版本,npm 是 Node.js 的包管理工具,一般会随 Node.js 一起安装。安装完成后,在命令行中输入 `npm -v` 检查是否安装成功。 ### 硬件准备 - 支持Modbus通信的PLC设备 - 支持Modbus TCP/RTU的PLC设备 - 以太网交换机或串口服务器 ### 安装依赖 ```bash npm install ``` ### 配置系统 编辑 `src/config/config.js` 文件,根据实际环境配置PLC设备参数: ```javascript // 配置示例 devices: [ { id: 'siemens-s7-1200-1', name: 'S7-1200 PLC 1', brand: 'Siemens', model: 'S7-1200', protocol: 'ModbusTCP', ip: '192.168.1.10', port: 502, unitId: 1, // 其他配置... } ] ``` ### 运行示例 ```bash npm run dev ``` ### 测试通信稳定性 ```bash npm run stability-test ``` ## 核心功能实现 ### 1. 数据采集 系统支持多种数据采集方式: - **定时采集**:按固定时间间隔采集数据 - **触发采集**:根据特定事件触发采集 - **变化采集**:数据变化时采集 采集的数据会自动保存到文件系统中,便于后续分析和处理。 ### 2. 设备控制 系统提供灵活的设备控制功能: - **单点控制**:控制单个标签值 - **批量控制**:同时控制多个标签值 - **命令记录**:记录所有控制命令,便于审计和追溯 ### 3. 稳定传输 系统采用多种机制确保通信稳定可靠: - **心跳检测**:定期检测连接状态 - **自动重连**:连接断开时自动重连 - **错误处理**:完善的错误处理机制 - **日志记录**:详细的通信日志 ## 扩展与定制 系统采用模块化设计,易于扩展和定制: 1. **添加新的PLC品牌**:继承 `PLCAdapter` 基类,实现特定品牌的适配器 2. **支持新的通信协议**:添加新的协议客户端模块 3. **增加新功能**:在应用层添加新的功能模块 ## 注意事项 1. 在生产环境中使用前,请确保进行充分的测试 2. 根据实际网络环境调整重连参数和超时设置 3. 定期备份采集的数据和命令日志 4. 根据PLC设备的实际地址映射调整标签配置 ## 许可证 MIT ## 作者 [李状]