# EMS Modbus 模拟器 一个基于 JavaFX 的 Modbus TCP 从站模拟器,监听端口固定为 `4567`。 ## 功能 - 图形界面查看四类数据区: - `Holding Register` - `Input Register` - `Coil` - `Discrete Input` - 手动写入四类数据区(支持地址和值边界限制) - 设备场景模拟(可启停): - 温度波动 - 压力变化 - 告警联动 - 泵状态联动 - 场景脚本编辑器(界面内可配置波形、阈值、联动输出地址) - 故障注入: - 响应延迟 - 强制异常码(按功能码或全部功能码) - 收到请求后断开连接 - 点位配置导入:支持 `CSV/XLSX` - 通信日志 + 报文 HEX 明细(`RX/TX`) - 支持标准 Modbus TCP 功能码: - `0x01` 读 Coil - `0x02` 读离散输入 - `0x03` 读保持寄存器 - `0x04` 读输入寄存器 - `0x05` 写单个 Coil - `0x06` 写单个保持寄存器 - `0x0F` 写多个 Coil - `0x10` 写多个保持寄存器 ## 运行 要求: - JDK 17+ - Maven 3.9+ 在项目目录执行: ```bash mvn javafx:run ``` ## 测试连接参数 - Host: `127.0.0.1` - Port: `4567` - Unit ID: `1`(可自定义) ## 点位导入格式 ### CSV/XLSX 列 - `area` - `address` - `value` ### area 可用值 - `holding` / `holding_register` / `hr` - `input` / `input_register` / `ir` - `coil` - `discrete` / `discrete_input` / `di` ### 示例(CSV) ```csv area,address,value holding,10,350 input,1,1015 coil,0,1 discrete,0,0 ``` ## 场景脚本示例 ```ini temp.base=25 temp.amplitude=12 temp.step=0.22 pressure.base=1000 pressure.amplitude=20 pressure.factor=0.8 threshold.mode=holding threshold.holding.addr=10 # threshold.fixed.value=320 pump.margin=20 output.temp.input=0 output.temp.holding=0 output.pressure.input=1 output.pump.coil=0 output.alarm.discrete=0 ```