# modbus-gateway **Repository Path**: bigbeard/modbus-gateway ## Basic Information - **Project Name**: modbus-gateway - **Description**: No description available - **Primary Language**: Java - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-03 - **Last Updated**: 2026-07-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Modbus Gateway ## 介绍 Modbus 网关服务是用于实现 Modbus TCP 设备数据采集、监控和上报的企业级解决方案。该系统支持多通道、多设备管理,提供实时监控界面和灵活的配置管理功能。 ## 功能特性 - **多通道管理**:支持多个 Modbus TCP 通道,通道间相互隔离,独立运行 - **多设备支持**:每个通道可配置多个从站设备 - **数据采集**:自动采集寄存器数据,支持多种数据类型(short、int、long、float、double、string) - **数据上报**:支持 MQTT、RabbitMQ、HTTP 三种上报方式,灵活配置 - **实时监控**:Web 界面实时展示通道状态和设备数据 - **配置管理**:支持动态修改配置,无需重启服务 - **Excel 导入导出**:方便批量配置和备份 - **性能测试**:内置性能测试工具,支持读写性能评估 - **批量写入**:支持单点和批量寄存器写入操作 - **跨平台支持**:兼容 Windows、Linux、macOS、麒麟、统信等操作系统 ## 软件架构 ``` modbus-gateway ├── src/main/java/com/greatech/wcs/device/modbus/ │ ├── controller/ # REST API 控制器 │ │ ├── ConfigController # 配置管理接口 │ │ ├── LogController # 日志接口 │ │ ├── ModbusWriteController # 写入操作接口 │ │ ├── MqPublishConfigController # 消息队列配置接口 │ │ ├── PerformanceTestController # 性能测试接口 │ │ └── SystemConfigController # 系统配置接口 │ ├── service/ # 业务服务层 │ │ ├── ChannelManager # 通道管理器 │ │ ├── DataEventBus # 数据事件总线 │ │ ├── ExcelImportExportService # Excel导入导出 │ │ ├── LogCollector # 日志收集器 │ │ ├── LogFileService # 日志文件服务 │ │ ├── ModbusDeviceService # 设备服务 │ │ ├── ModbusWriter # 写入服务 │ │ ├── MqPublishConfigService # MQ配置服务 │ │ └── SystemConfigService # 系统配置服务 │ ├── sender/ # 数据发送模块 │ │ ├── HttpSender # HTTP发送器 │ │ ├── MqttSender # MQTT发送器 │ │ ├── RabbitMqSender # RabbitMQ发送器 │ │ ├── MqPublishFilter # 消息过滤 │ │ └── RabbitMQConfig # RabbitMQ配置 │ ├── entry/ # 数据实体 │ │ ├── Channel # 通道实体 │ │ ├── Device # 设备实体 │ │ ├── Point # 点位实体 │ │ ├── AddressSegment # 地址段 │ │ ├── Result # 统一响应 │ │ └── WriteRequest/Response # 写入请求/响应 │ ├── performance/ # 性能测试模块 │ │ ├── PerformanceTestService # 性能测试服务 │ │ ├── PerformanceMetrics # 性能指标 │ │ ├── PerformanceTestDataGenerator # 测试数据生成 │ │ └── MockModbusServer # Mock服务器 │ ├── config/ # 配置类 │ ├── util/ # 工具类 │ │ ├── ConfigValidator # 配置验证 │ │ └── ModbusBatchWriteUtil # 批量写入工具 │ └── ModbusDeviceApplication.java ├── src/main/resources/ │ ├── application.yml # 系统配置 │ ├── logback-spring.xml # 日志配置 │ ├── points.json # 通道设备点位配置 │ └── static/ # 静态资源(Web界面) └── pom.xml ``` ## 技术栈 | 类别 | 技术 | |------|------| | 运行环境 | Java 17 | | 框架 | Spring Boot 3.2.5 | | Modbus通信 | iot-communication | | MQTT消息 | Eclipse Paho | | RabbitMQ | Spring AMQP | | JSON处理 | FastJSON2 | | Excel处理 | EasyExcel | | 日志 | Logback | ## 安装教程 ### 环境要求 - JDK 17 或更高版本 - Maven 3.6 或更高版本 ### 编译构建 ```bash mvn clean package ``` ### 运行方式 **开发态运行:** ```bash mvn spring-boot:run ``` **打包后运行:** ```bash java -jar target/modbus-gateway-1.0.0.jar ``` ## 使用说明 ### 配置文件 - `points.json`:通道、设备、点位配置 - `application.yml`:系统参数配置(MQTT、RabbitMQ、HTTP等) ### 访问地址 - Web 界面:http://localhost:8086/ - API 接口:http://localhost:8086/api/ ### 页面功能 1. **监控页面 (monitor)**:实时查看通道状态、设备数据,支持点位编辑和批量写入 2. **配置页面 (config)**:管理通道、设备、点位配置,支持树形结构展示 3. **消息队列配置 (mqpublish)**:配置 MQTT 主题和 RabbitMQ 路由规则 4. **性能测试 (performance)**:执行读写性能测试,查看测试报告 5. **系统配置 (systemconfig)**:系统参数配置和重启 ### API 接口 | 接口 | 方法 | 说明 | |------|------|------| | `/api/modbus/channels` | GET | 获取所有通道 | | `/api/modbus/channel-states` | GET | 获取通道状态 | | `/api/modbus/channels/{code}/disable` | POST | 关闭通道 | | `/api/modbus/channels/{code}/enable` | POST | 开启通道 | | `/api/modbus/write` | POST | 写入数据 | | `/api/modbus/write/batch` | POST | 批量写入 | | `/api/logs` | GET | 获取日志 | | `/api/logs/content/{date}` | GET | 获取指定日期日志 | | `/api/config/channels` | GET | 获取配置 | | `/api/config/channels` | POST | 保存配置 | | `/api/config/reload` | POST | 重新加载配置 | | `/api/config/export` | GET | 导出配置 | | `/api/config/import` | POST | 导入配置 | | `/api/performance/test/run` | POST | 运行性能测试 | | `/api/mq-publish/configs` | GET/POST | 消息队列配置 | ### 配置示例 ```json { "channelCode": "c1001", "channelName": "通道1", "channelType": "Modbus TCP", "channelAddress": "192.168.1.100", "channelPort": 502, "channelSlaveId": 1, "channelTimeout": 3000, "channelScanTime": 1000, "enabled": true, "devices": [ { "deviceCode": "d1001", "deviceName": "设备1", "deviceType": "PLC", "points": [ { "pointCode": "temp", "pointName": "温度", "address": 0, "len": 1, "dataType": "short" }, { "pointCode": "pressure", "pointName": "压力", "address": 1, "len": 1, "dataType": "float" } ] } ] } ``` ## 配置说明 ### application.yml 主要配置项 | 配置项 | 说明 | 默认值 | |--------|------|--------| | `server.port` | 服务端口 | 8086 | | `mq.enableSend` | 是否启用 RabbitMQ | false | | `mq.sendQueue` | 发送队列名称 | modbus.send | | `mqtt.enabledMqtt` | 是否启用 MQTT | false | | `mqtt.broker-url` | MQTT broker地址 | tcp://localhost:1883 | | `mqtt.client-id` | MQTT 客户端ID | modbus-gateway | | `mqtt.default-topic` | 默认主题 | modbus/data | | `http.enableSend` | 是否启用 HTTP 上报 | false | | `http.url` | HTTP 上报地址 | http://127.0.0.1:8080/api/receive | | `spring.rabbitmq.host` | RabbitMQ 地址 | localhost | | `spring.rabbitmq.port` | RabbitMQ 端口 | 5672 | ### 数据类型支持 | 类型 | 寄存器数量 | 说明 | |------|------------|------| | `short` | 1 | 16位有符号整数 | | `int` | 2 | 32位有符号整数 | | `long` | 4 | 64位有符号整数 | | `float` | 2 | 32位浮点数 | | `double` | 4 | 64位浮点数 | | `string` | 变长 | 字符串 | ## 性能测试 ### 测试参数 - 通道数量:模拟的通道数量 - 每通道设备数:每个通道下的设备数量 - 每设备点数:每个设备上的点位数量 - 读测试时长:读取测试持续时间(秒) - 写测试次数:写入测试操作次数 ### 性能指标 测试报告包含以下指标: - 平均响应时间 - 最大响应时间 - 最小响应时间 - P95/P99 响应时间 - 吞吐量(次/秒) - 成功率 ## 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request ## 许可证 MIT License ## 联系方式 如有问题或建议,请提交 Issue。