# modbus-mock **Repository Path**: handshake/modbus-mock ## Basic Information - **Project Name**: modbus-mock - **Description**: No description available - **Primary Language**: Go - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-04-29 - **Last Updated**: 2021-05-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 1.modpoll.tgz * https://www.modbusdriver.com/downloads/modpoll.tgz, 版本 3.1.0,文件全名: modpoll-3.10.tgz ### 2.数据格式 ##### TCP 数据格式 ``` [ { "deviceID": "device3112", "visitorProtocol": "modbus-tcp", "visitorOffsetX": 1, "visitorOffsetY": 25, "slaveID": 1, "defaultValue": 0, "minimum": 5, "maximum": 200 } ] 说明: deviceID: 设备ID visitorProtocol: modbus协议类型,目前仅支持 modbus-tcp,modbus-rtu visitorOffset: Start reference (1-65536, 100 is default) slaveID: Slave address (1-247 for serial, 0-255 for TCP, 1 is default) defaultValue: 地址默认value minimum: 最小值 maximum: 最大值 ``` ##### RTU 数据格式 ``` [ { "deviceID": "device3112", "visitorProtocol": "modbus-rtu", "visitorOffsetX": 1, "visitorOffsetY": 25, "slaveID": 1, "defaultValue": 0, "minimum": 5, "maximum": 200, "serialPort": "/dev/pts/2", "baudRate": 9600, "dataBits": 8, "stopBits": 1 } ] 说明: deviceID: 设备ID visitorProtocol: modbus协议类型,目前仅支持 modbus-tcp,modbus-rtu visitorOffset: Start reference (1-65536, 100 is default) slaveID: Slave address (1-247 for serial, 0-255 for TCP, 1 is default) defaultValue: 地址默认value minimum: 最小值 maximum: 最大值 serialPort: 串口地址 baudRate: Baudrate (e.g. 9600, 19200, ...) (19200 is default) dataBits: Databits (7 or 8 for ASCII protocol, 8 for RTU) stopBits: Stopbits (1 or 2, 1 is default) ``` ## 2.使用方式 ``` modbus-tcp 测试建议使用镜像,modbus-rtu 测试建议使用可行性文件,主要是因为 rtu 模式下主机生成的虚拟串口有可能无法成功挂载容器。 ``` ``` 可执行文件使用方式,文件名称: modbusmock,默认配置文件路径为 /work/config,需要配置 tcp.json/rtu.json/config.yaml ``` ##### 2.1. 镜像构建方式 ``` make docker-build ``` ##### 2.2. 配置文件,运行容器时需要挂载 tcp.json/rtu.json/config.yaml 文件,示例如下(windows测试,其他环境请调整): ``` docker run -v D:\Config\modbus:/work/config/ -v /dev/pts/2:/dev/pts/ modbusmock:v1.0.0 说明: -v /dev/pts/2:/dev/pts 是将 modpoll 需要操作的串口地址挂载到容器,/dev/pts/2 是串口地址 注意: -v /dev/pts/:dev/pts 这种挂载方式可能导致异常,diagslave 占用了相关串口,已占用串口是不可用的 ``` 配置文件示例: ``` tcp.json: [ { "deviceID": "device3112", "visitorProtocol": "modbus-tcp", "visitorOffsetX": 1, "visitorOffsetY": 25, "slaveID": 1, "defaultValue": 0, "minimum": 5, "maximum": 200 } ] ``` ``` rtu.json [ { "deviceID": "device3112", "visitorProtocol": "modbus-rtu", "visitorOffsetX": 1, "visitorOffsetY": 25, "slaveID": 1, "defaultValue": 0, "minimum": 5, "maximum": 200, "serialPort": "/dev/pts/2", "baudRate": 9600, "dataBits": 8, "stopBits": 1 } ] ``` ``` config.yaml # modbus protocol,tcp/rtu 类型对应设备配置文件. 配置文件默认地址 /config/tcp.json, /config/rtu.json modbus: tcp: tcp.json rtu: rtu.json # 容器运行超时时间,默认 60s,超过 60s,容器自动退出. timeout <= 0 代表容器持续运行,需要手动回收 service: timeout: 300 #s # modpoll IP,端口 modpoll: ip: 172.16.13.206 port: 5028 serialport: /dev/pts/2 #rtu虚拟串口地址 ```