
oitc/modbus-server维护者: Michael Oberdorf IT-Consulting
源代码: GitHub
容器镜像: DockerHub
Modbus TCP Server是一个用Python编写的简单Modbus TCP服务器,支持预定义寄存器值。该服务器最初设计用于充当Modbus从机模拟系统,用于增强Modbus主机的测试以及测试从不同寄存器收集值的过程。
Modbus规范文档: PDF
latest, 1.4.01.3.21.3.11.3.01.2.0bashdocker pull oitc/modbus-server
bashdocker run --rm -p 5020:5020 oitc/modbus-server:latest
默认配置文件将所有寄存器初始化为0x0000。如需设置自定义寄存器值,需创建自己的配置文件:
bashdocker run --rm -p 5020:5020 -v ./server_config.json:/server_config.json oitc/modbus-server:latest -f /server_config.json
或挂载配置文件替换默认配置,可省略文件参数:
bashdocker run --rm -p 5020:5020 -v ./server_config.json:/app/modbus_server.json oitc/modbus-server:latest
yamlservices: modbus-server: container_name: modbus-server image: oitc/modbus-server:latest restart: always command: -f /server_config.json ports: - 5020:5020 volumes: - ./server.json:/server_config.json:ro
| 环境变量名 | 描述 | 是否必需 | 默认值 |
|---|---|---|---|
CONFIG_FILE | 用于构建初始Modbus从机的配置文件路径 | 可选 | /app/modbus_server.json |
| 参数 | 描述 | 默认值 |
|---|---|---|
-f, --file | 配置文件路径 | /app/modbus_server.json |
容器中的/app/modbus_server.json文件包含以下默认配置:
json{ "server": { "listenerAddress": "0.0.0.0", "listenerPort": 5020, "protocol": "TCP", "tlsParams": { "description": "path to certificate and private key to enable tls", "privateKey": null, "certificate": null }, "logging": { "format": "%(asctime)-15s %(threadName)-15s %(levelname)-8s %(module)-15s:%(lineno)-8s %(message)s", "logLevel": "INFO" } }, "registers": { "description": "initial values for the register types", "zeroMode": false, "initializeUndefinedRegisters": true, "discreteInput": {}, "coils": {}, "holdingRegister": {}, "inputRegister": {} } }
| 字段 | 类型 | 描述 |
|---|---|---|
server | 对象 | Modbus从机特定运行时参数 |
server.listenerAddress | 字符串 | 服务器绑定的IPv4地址,"0.0.0.0"表示监听所有接口 |
server.listenerPort | 整数 | Modbus服务器监听端口 |
server.protocol | 字符串 | 服务器使用的协议,可选"TCP"或"UDP",默认"TCP" |
server.tlsParams | 对象 | TLS加密配置参数(未测试) |
server.tlsParams.privateKey | 字符串 | 私钥文件系统路径 |
server.tlsParams.certificate | 字符串 | TLS证书文件系统路径 |
server.logging | 对象 | 日志配置 |
server.logging.format | 字符串 | 日志消息格式,参考Python logging模块 |
server.logging.logLevel | 字符串 | 日志级别,可选"DEBUG"、"INFO"、"WARN"和"ERROR" |
registers | 对象 | 预定义寄存器的配置参数 |
registers.zeroMode | 布尔值 | 寄存器起始地址模式,默认false(从1开始),true表示从0开始 |
registers.initializeUndefinedRegisters | 布尔值 | 若为true,服务器将所有未定义寄存器初始化为默认值0 |
registers.discreteInput | 对象 | "离散输入"类型的预定义寄存器 |
registers.coils | 对象 | "线圈"类型的预定义寄存器 |
registers.holdingRegister | 对象 | "保持寄存器"类型的预定义寄存器 |
registers.inputRegister | 对象 | "输入寄存器"类型的预定义寄存器 |
预定义寄存器以寄存器编号作为键,由于JSON格式要求键为字符串,寄存器编号需表示为字符串,服务器初始化时会将其转换为整数。
离散输入和线圈寄存器(单比特):使用true或false作为值。
示例配置:
json"discreteInput": { "0": true, "1": true, "42": true, "166": false }
保持寄存器和输入寄存器(16位字):使用十六进制表示(以0x开头)或整数(0-65535)。
示例配置:
json"holdingRegister": { "9": "0xAA00", "23": "0xBB11", "142": "0x1FC3", "2346": 255 // 等同于0x00FF }

manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务