mbtoolcli 0.3.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- mbtoolcli-0.3.1.dist-info/METADATA +473 -0
- mbtoolcli-0.3.1.dist-info/RECORD +16 -0
- mbtoolcli-0.3.1.dist-info/WHEEL +5 -0
- mbtoolcli-0.3.1.dist-info/entry_points.txt +4 -0
- mbtoolcli-0.3.1.dist-info/licenses/LICENSE +21 -0
- mbtoolcli-0.3.1.dist-info/top_level.txt +1 -0
- modbus_slave_sim/__init__.py +42 -0
- modbus_slave_sim/cli.py +903 -0
- modbus_slave_sim/colors.py +57 -0
- modbus_slave_sim/datatypes.py +386 -0
- modbus_slave_sim/gui_server.py +1049 -0
- modbus_slave_sim/master.py +647 -0
- modbus_slave_sim/registers.py +288 -0
- modbus_slave_sim/rtu_server.py +158 -0
- modbus_slave_sim/simulation.py +318 -0
- modbus_slave_sim/tcp_server.py +178 -0
|
@@ -0,0 +1,473 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: mbtoolcli
|
|
3
|
+
Version: 0.3.1
|
|
4
|
+
Summary: A comprehensive Modbus Master/Slave testing tool supporting TCP, RTU, and ASCII protocols
|
|
5
|
+
Author: Modbus Tool Contributors
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/yourusername/modbus-tool
|
|
8
|
+
Project-URL: Documentation, https://github.com/yourusername/modbus-tool#readme
|
|
9
|
+
Project-URL: Repository, https://github.com/yourusername/modbus-tool
|
|
10
|
+
Project-URL: Issues, https://github.com/yourusername/modbus-tool/issues
|
|
11
|
+
Keywords: modbus,master,slave,tcp,rtu,ascii,industrial,testing
|
|
12
|
+
Classifier: Development Status :: 4 - Beta
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Intended Audience :: Information Technology
|
|
15
|
+
Classifier: Intended Audience :: Science/Research
|
|
16
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
17
|
+
Classifier: Operating System :: OS Independent
|
|
18
|
+
Classifier: Programming Language :: Python :: 3
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
24
|
+
Classifier: Topic :: Scientific/Engineering :: Interface Engine/Protocol Translator
|
|
25
|
+
Classifier: Topic :: System :: Hardware :: Hardware Drivers
|
|
26
|
+
Requires-Python: >=3.8
|
|
27
|
+
Description-Content-Type: text/markdown
|
|
28
|
+
License-File: LICENSE
|
|
29
|
+
Requires-Dist: pymodbus<4.0.0,>=3.0.0
|
|
30
|
+
Provides-Extra: dev
|
|
31
|
+
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
32
|
+
Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
|
|
33
|
+
Requires-Dist: pyinstaller>=5.0.0; extra == "dev"
|
|
34
|
+
Dynamic: license-file
|
|
35
|
+
|
|
36
|
+
# Modbus Tool 操作手册
|
|
37
|
+
|
|
38
|
+
## 概述
|
|
39
|
+
|
|
40
|
+
Modbus Tool 是一款综合性的 **Modbus 主站/从站调试工具**,支持 **TCP**、**RTU** 和 **ASCII** 三种协议。它将 **modpoll**(主站)和 **diagslave**(从站)的功能合二为一,提供命令行式的工业通信调试体验。
|
|
41
|
+
|
|
42
|
+
### 主要功能
|
|
43
|
+
|
|
44
|
+
- **主站模式**:读写线圈、离散输入、保持寄存器和输入寄存器
|
|
45
|
+
- **从站模式**:模拟 Modbus 从站设备,支持动态仿真
|
|
46
|
+
- **扫描模式**:自动发现网络中活动的从站设备
|
|
47
|
+
- **实时轮询**:周期性读取寄存器值,支持阈值告警和 CSV 导出
|
|
48
|
+
- **多种数据类型**:int16、uint16、int32、uint32、float32、hex
|
|
49
|
+
- **灵活的字节序**:同时支持大端序、小端序、字交换等工业变体
|
|
50
|
+
- **原始帧调试**:输出 Modbus 协议层的原始收发帧
|
|
51
|
+
- **彩色终端输出**:关键字高亮,减少视觉疲劳
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## 安装
|
|
56
|
+
|
|
57
|
+
### 从源码安装
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
git clone https://github.com/yourusername/modbus-tool.git
|
|
61
|
+
cd modbus-tool
|
|
62
|
+
pip install -e .
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### 构建单文件可执行文件
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
pip install pyinstaller
|
|
69
|
+
pyinstaller --onefile --name mbtool src/modbus_slave_sim/cli.py
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
编译后在 `dist/` 目录下生成 `mbtool`(或 `mbtool.exe`)。
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## 命令参考
|
|
77
|
+
|
|
78
|
+
### 模式选择(三选一,必填)
|
|
79
|
+
|
|
80
|
+
| 选项 | 说明 |
|
|
81
|
+
|------|------|
|
|
82
|
+
| `--master` | 主站模式:读写 Modbus 从站设备 |
|
|
83
|
+
| `--slave` | 从站模式:模拟一个 Modbus 从站设备 |
|
|
84
|
+
| `--scan` | 扫描模式:探测网络中活动的从站 ID(1-247) |
|
|
85
|
+
|
|
86
|
+
### 连接选项
|
|
87
|
+
|
|
88
|
+
| 选项 | 说明 | 默认值 |
|
|
89
|
+
|------|------|--------|
|
|
90
|
+
| `-m`, `--mode` | 协议:`tcp`、`rtu`、`ascii` | `tcp` |
|
|
91
|
+
| `-H`, `--host` | TCP 目标主机地址 | `127.0.0.1` |
|
|
92
|
+
| `-p`, `--port` | TCP 端口或串口路径(如 COM3、/dev/ttyUSB0) | `502` |
|
|
93
|
+
| `-a`, `--address` | 从站 ID(单个如 `1`,或多 ID `1,2,3`) | `1` |
|
|
94
|
+
| `--timeout` | 通信超时(秒) | `3.0` |
|
|
95
|
+
|
|
96
|
+
### 串口选项(RTU/ASCII 模式)
|
|
97
|
+
|
|
98
|
+
| 选项 | 说明 | 默认值 |
|
|
99
|
+
|------|------|--------|
|
|
100
|
+
| `-b`, `--baudrate` | 波特率 | `9600` |
|
|
101
|
+
| `--parity` | 校验位:`N`=无, `E`=偶, `O`=奇 | `N` |
|
|
102
|
+
| `--stopbits` | 停止位:`1` 或 `2` | `1` |
|
|
103
|
+
| `--bytesize` | 数据位:`7` 或 `8` | `8` |
|
|
104
|
+
| `--inter-char-delay` | 字符间延迟(秒,RTU 调优用) | 无 |
|
|
105
|
+
|
|
106
|
+
### 主站读选项
|
|
107
|
+
|
|
108
|
+
| 选项 | 说明 | 默认值 |
|
|
109
|
+
|------|------|--------|
|
|
110
|
+
| `-r`, `--register` | 起始寄存器/线圈地址 | `0` |
|
|
111
|
+
| `-c`, `--count` | 读取数量 | `1` |
|
|
112
|
+
| `-t`, `--type` | 数据类型:`int16`, `uint16`, `int32`, `uint32`, `float`, `hex` | `int16` |
|
|
113
|
+
| `-f`, `--function` | 功能码:`1`(线圈), `2`(离散输入), `3`(保持寄存器), `4`(输入寄存器) | `3` |
|
|
114
|
+
| `--hex` | 同时显示十六进制值 | 关闭 |
|
|
115
|
+
| `--byte-order` | 32 位类型字节序:`ABCD`, `CDBA`, `BADC`, `DCBA` | `ABCD` |
|
|
116
|
+
|
|
117
|
+
### 主站写选项
|
|
118
|
+
|
|
119
|
+
| 选项 | 说明 |
|
|
120
|
+
|------|------|
|
|
121
|
+
| `--write` | 写寄存器模式(配合 `-v`) |
|
|
122
|
+
| `--write-coil` | 写线圈模式(配合 `--coil-value`) |
|
|
123
|
+
| `--coil-value {0,1}` | 线圈值:0=OFF, 1=ON |
|
|
124
|
+
| `-v`, `--value` | 写入值,多个值用逗号分隔实现批量写入 |
|
|
125
|
+
|
|
126
|
+
### 轮询选项
|
|
127
|
+
|
|
128
|
+
| 选项 | 说明 | 默认值 |
|
|
129
|
+
|------|------|--------|
|
|
130
|
+
| `--poll` | 连续轮询模式 | 关闭 |
|
|
131
|
+
| `-i`, `--interval` | 轮询间隔(秒) | `1.0` |
|
|
132
|
+
| `-n`, `--iterations` | 轮询次数(`0`=无限) | `0` |
|
|
133
|
+
| `--alarm` | 告警表达式:`ADDR>VALUE`,如 `"0>100"` | 无 |
|
|
134
|
+
| `-o`, `--output` | 导出结果到 CSV 文件 | 无 |
|
|
135
|
+
|
|
136
|
+
### 从站选项
|
|
137
|
+
|
|
138
|
+
| 选项 | 说明 | 默认值 |
|
|
139
|
+
|------|------|--------|
|
|
140
|
+
| `--register-map` | 从 JSON 文件加载自定义寄存器映射 | 无 |
|
|
141
|
+
| `--simulate` | 启用动态值仿真 | 关闭 |
|
|
142
|
+
| `--sim-interval` | 仿真更新间隔(秒) | `0.1` |
|
|
143
|
+
| `--status` | 显示寄存器状态后退出(仅从站模式) | 关闭 |
|
|
144
|
+
|
|
145
|
+
### 调试选项
|
|
146
|
+
|
|
147
|
+
| 选项 | 说明 |
|
|
148
|
+
|------|------|
|
|
149
|
+
| `-V`, `--verbose` | 启用详细日志输出 |
|
|
150
|
+
| `--debug-frame` | 启用 Modbus 原始帧日志 |
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
## 功能码说明
|
|
155
|
+
|
|
156
|
+
| 功能码 | 名称 | 读写属性 | 数据类型 |
|
|
157
|
+
|--------|------|----------|----------|
|
|
158
|
+
| 1 | Read Coils(读线圈) | 读写 | 布尔值(0/1) |
|
|
159
|
+
| 2 | Read Discrete Inputs(读离散输入) | 只读 | 布尔值(0/1) |
|
|
160
|
+
| 3 | Read Holding Registers(读保持寄存器) | 读写 | 16 位值 |
|
|
161
|
+
| 4 | Read Input Registers(读输入寄存器) | 只读 | 16 位值 |
|
|
162
|
+
|
|
163
|
+
## 数据类型
|
|
164
|
+
|
|
165
|
+
| 类型 | 说明 | 占用寄存器 | 值范围 |
|
|
166
|
+
|------|------|-----------|--------|
|
|
167
|
+
| `int16` | 有符号 16 位整数 | 1 | -32768 ~ 32767 |
|
|
168
|
+
| `uint16` | 无符号 16 位整数 | 1 | 0 ~ 65535 |
|
|
169
|
+
| `int32` | 有符号 32 位整数 | 2 | -2³¹ ~ 2³¹-1 |
|
|
170
|
+
| `uint32` | 无符号 32 位整数 | 2 | 0 ~ 2³²-1 |
|
|
171
|
+
| `float` | 32 位 IEEE 754 浮点数 | 2 | ±3.4×10⁻³⁸ ~ ±3.4×10³⁸ |
|
|
172
|
+
| `hex` | 十六进制显示 | 1+ | 0x0000 ~ 0xFFFF |
|
|
173
|
+
|
|
174
|
+
### modpoll 兼容的类型字符串
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
# 3:int 或 3:int32 表示 32 位有符号整数
|
|
178
|
+
# 4:float 表示 32 位浮点数
|
|
179
|
+
# uint16 或 u16 表示无符号 16 位整数
|
|
180
|
+
mbtool --master -a 1 -r 0 -c 4 -t "3:int32"
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
## 字节序说明
|
|
184
|
+
|
|
185
|
+
对于 32 位数据类型(int32、uint32、float),数据在 2 个寄存器中排列方式可能有多种。默认为标准大端序(ABCD),可通过 `--byte-order` 切换:
|
|
186
|
+
|
|
187
|
+
| 字节序 | 说明 | 寄存器排列 | 常见设备 |
|
|
188
|
+
|--------|------|-----------|----------|
|
|
189
|
+
| `ABCD` | 标准大端序 | Reg[0]=高16位, Reg[1]=低16位 | 标准 Modbus |
|
|
190
|
+
| `CDBA` | 字交换 | Reg[0]=低16位, Reg[1]=高16位 | Siemens S7 |
|
|
191
|
+
| `BADC` | 字节交换 | 每个寄存器的字节互换 | 部分国产设备 |
|
|
192
|
+
| `DCBA` | 小端序 | 完全小端排列 | 部分 PLC |
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## 操作示例
|
|
197
|
+
|
|
198
|
+
### 主站模式
|
|
199
|
+
|
|
200
|
+
#### 基本读取
|
|
201
|
+
|
|
202
|
+
```bash
|
|
203
|
+
# 读取 10 个保持寄存器(FC03)
|
|
204
|
+
mbtool --master -a 1 -r 0 -c 10
|
|
205
|
+
|
|
206
|
+
# 读线圈(FC01)
|
|
207
|
+
mbtool --master -f 1 -a 1 -r 0 -c 8
|
|
208
|
+
|
|
209
|
+
# 读离散输入(FC02)
|
|
210
|
+
mbtool --master -f 2 -a 1 -r 0 -c 8
|
|
211
|
+
|
|
212
|
+
# 读输入寄存器(FC04)
|
|
213
|
+
mbtool --master -f 4 -a 1 -r 0 -c 5 -t float
|
|
214
|
+
|
|
215
|
+
# 以十六进制格式读取并显示
|
|
216
|
+
mbtool --master -a 1 -r 0 -c 10 -t hex --hex
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
#### 写入
|
|
220
|
+
|
|
221
|
+
```bash
|
|
222
|
+
# 写单个寄存器
|
|
223
|
+
mbtool --master --write -a 1 -r 0 -v 100
|
|
224
|
+
|
|
225
|
+
# 写浮点数到 2 个寄存器
|
|
226
|
+
mbtool --master --write -t float -a 1 -r 0 -v 3.14
|
|
227
|
+
|
|
228
|
+
# 批量写入:从地址 0 开始写入 3 个值
|
|
229
|
+
mbtool --master --write -a 1 -r 0 -v "100,200,300"
|
|
230
|
+
|
|
231
|
+
# 写线圈(FC05)
|
|
232
|
+
mbtool --master --write-coil -a 1 -r 0 --coil-value 1
|
|
233
|
+
|
|
234
|
+
# 指定字节序写入 32 位值
|
|
235
|
+
mbtool --master --write -t float -a 1 -r 0 -v 123.456 --byte-order CDBA
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
#### 连续轮询
|
|
239
|
+
|
|
240
|
+
```bash
|
|
241
|
+
# 每 2 秒轮询一次,无限循环
|
|
242
|
+
mbtool --master --poll -a 1 -r 0 -c 5 -i 2
|
|
243
|
+
|
|
244
|
+
# 轮询 10 次后停止
|
|
245
|
+
mbtool --master --poll -a 1 -r 0 -c 10 -i 1 -n 10
|
|
246
|
+
|
|
247
|
+
# 带阈值告警:寄存器[0] > 1000 时红色高亮
|
|
248
|
+
mbtool --master --poll -a 1 -r 0 -c 5 -t int16 -i 1 --alarm "0>1000"
|
|
249
|
+
|
|
250
|
+
# 轮询结果导出到 CSV 文件
|
|
251
|
+
mbtool --master --poll -a 1 -r 0 -c 5 -i 1 -o data.csv
|
|
252
|
+
|
|
253
|
+
# 轮询 + 告警 + CSV 导出 + 十六进制显示
|
|
254
|
+
mbtool --master --poll -a 1 -r 0 -c 10 -i 2 --hex --output log.csv --alarm "0>500"
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
#### 字节序示例
|
|
258
|
+
|
|
259
|
+
```bash
|
|
260
|
+
# 以 CDBA(字交换)读浮点数
|
|
261
|
+
mbtool --master -a 1 -r 0 -c 4 -t float --byte-order CDBA
|
|
262
|
+
|
|
263
|
+
# 以小端序读 32 位整数
|
|
264
|
+
mbtool --master -a 1 -r 0 -c 4 -t int32 --byte-order DCBA
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
#### 原始帧调试
|
|
268
|
+
|
|
269
|
+
```bash
|
|
270
|
+
mbtool --master -a 1 -r 0 -c 10 --debug-frame
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
输出中会包含 Modbus 协议层的收发原始数据,用于排查通信问题。
|
|
274
|
+
|
|
275
|
+
### 扫描模式
|
|
276
|
+
|
|
277
|
+
扫描从站 ID 1~247,发现网络中活动的设备:
|
|
278
|
+
|
|
279
|
+
```bash
|
|
280
|
+
# TCP 扫描
|
|
281
|
+
mbtool --scan -H 192.168.1.100 -p 502
|
|
282
|
+
|
|
283
|
+
# RTU 串口扫描
|
|
284
|
+
mbtool --scan -m rtu -p COM3 -b 9600
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
### 从站模式
|
|
288
|
+
|
|
289
|
+
#### TCP 从站
|
|
290
|
+
|
|
291
|
+
```bash
|
|
292
|
+
# 默认端口 502 启动 TCP 从站
|
|
293
|
+
mbtool --slave
|
|
294
|
+
|
|
295
|
+
# 指定端口和从站 ID
|
|
296
|
+
mbtool --slave -p 5020 -a 1
|
|
297
|
+
|
|
298
|
+
# 启用动态仿真
|
|
299
|
+
mbtool --slave --simulate
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
#### RTU/ASCII 从站
|
|
303
|
+
|
|
304
|
+
```bash
|
|
305
|
+
# RTU 从站
|
|
306
|
+
mbtool --slave -m rtu -p COM3 -b 19200 --parity E
|
|
307
|
+
|
|
308
|
+
# ASCII 从站
|
|
309
|
+
mbtool --slave -m ascii -p COM3 -b 9600
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
#### 自定义寄存器映射
|
|
313
|
+
|
|
314
|
+
从 JSON 文件加载自定义寄存器定义:
|
|
315
|
+
|
|
316
|
+
```bash
|
|
317
|
+
mbtool --slave --register-map my_device.json
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
JSON 文件格式:
|
|
321
|
+
|
|
322
|
+
```json
|
|
323
|
+
{
|
|
324
|
+
"coils": [
|
|
325
|
+
{"address": 0, "value": false, "description": "电机启动"},
|
|
326
|
+
{"address": 1, "value": true, "description": "电机运行"}
|
|
327
|
+
],
|
|
328
|
+
"holding_registers": [
|
|
329
|
+
{"address": 0, "value": 100, "description": "温度设定值"},
|
|
330
|
+
{"address": 1, "value": 200, "description": "压力上限"}
|
|
331
|
+
],
|
|
332
|
+
"input_registers": [
|
|
333
|
+
{"address": 0, "value": 25, "description": "当前温度"},
|
|
334
|
+
{"address": 1, "value": 180, "description": "当前压力"},
|
|
335
|
+
{"address": 2, "value": 80, "description": "液位百分比"},
|
|
336
|
+
{"address": 3, "value": 1500, "description": "转速"},
|
|
337
|
+
{"address": 4, "value": 0, "description": "报警代码"}
|
|
338
|
+
],
|
|
339
|
+
"discrete_inputs": [
|
|
340
|
+
{"address": 0, "value": false, "description": "门开状态"},
|
|
341
|
+
{"address": 1, "value": true, "description": "急停未按下"}
|
|
342
|
+
]
|
|
343
|
+
}
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
#### 查看寄存器状态
|
|
347
|
+
|
|
348
|
+
```bash
|
|
349
|
+
# 查看默认寄存器状态
|
|
350
|
+
mbtool --slave --status
|
|
351
|
+
|
|
352
|
+
# 查看自定义寄存器映射状态
|
|
353
|
+
mbtool --slave --register-map my_device.json --status
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
---
|
|
357
|
+
|
|
358
|
+
## 彩色输出说明
|
|
359
|
+
|
|
360
|
+
终端输出使用不同颜色标识不同类型的信息,减少视觉疲劳:
|
|
361
|
+
|
|
362
|
+
| 颜色 | 用途 |
|
|
363
|
+
|------|------|
|
|
364
|
+
| **青色粗体** | 标题、参数值、边框 |
|
|
365
|
+
| **绿色粗体** | 成功信息(已连接、写入成功、ON) |
|
|
366
|
+
| **红色粗体** | 错误信息、告警、OFF 状态 |
|
|
367
|
+
| **黄色** | 操作描述文字 |
|
|
368
|
+
| **品红色** | 寄存器地址索引 `[N]` |
|
|
369
|
+
| **白色粗体** | 标签文字(Protocol、Address 等) |
|
|
370
|
+
| **暗灰色** | 次要信息、描述文字 |
|
|
371
|
+
|
|
372
|
+
---
|
|
373
|
+
|
|
374
|
+
## CSV 导出格式
|
|
375
|
+
|
|
376
|
+
使用 `--output` 或 `-o` 参数导出的 CSV 文件格式:
|
|
377
|
+
|
|
378
|
+
**读操作导出**:两列
|
|
379
|
+
```
|
|
380
|
+
address,value
|
|
381
|
+
0,100
|
|
382
|
+
1,200
|
|
383
|
+
2,300
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
**轮询导出**:三列(每轮询周期追加行)
|
|
387
|
+
```
|
|
388
|
+
iteration,address,value
|
|
389
|
+
1,0,100
|
|
390
|
+
1,1,200
|
|
391
|
+
2,0,105
|
|
392
|
+
2,1,205
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
---
|
|
396
|
+
|
|
397
|
+
## 故障排除
|
|
398
|
+
|
|
399
|
+
### 端口 502 被占用
|
|
400
|
+
|
|
401
|
+
在 Linux 上 1024 以下端口需要 root 权限:
|
|
402
|
+
|
|
403
|
+
```bash
|
|
404
|
+
sudo mbtool --slave -p 502
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
或使用更高端口:
|
|
408
|
+
|
|
409
|
+
```bash
|
|
410
|
+
mbtool --slave -p 5020
|
|
411
|
+
```
|
|
412
|
+
|
|
413
|
+
### 串口权限(Linux)
|
|
414
|
+
|
|
415
|
+
```bash
|
|
416
|
+
sudo usermod -a -G dialout $USER
|
|
417
|
+
# 重新登录后生效
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
### 连接被拒绝
|
|
421
|
+
|
|
422
|
+
确保从站服务器已启动,端口正确,并检查防火墙设置。
|
|
423
|
+
|
|
424
|
+
### 读取到错误值
|
|
425
|
+
|
|
426
|
+
如果多寄存器类型(int32、float)读取到的值异常,可能是字节序不匹配。尝试不同的 `--byte-order` 选项:
|
|
427
|
+
|
|
428
|
+
```bash
|
|
429
|
+
# 尝试不同的字节序
|
|
430
|
+
mbtool --master -a 1 -r 0 -c 2 -t float --byte-order ABCD
|
|
431
|
+
mbtool --master -a 1 -r 0 -c 2 -t float --byte-order CDBA
|
|
432
|
+
mbtool --master -a 1 -r 0 -c 2 -t float --byte-order BADC
|
|
433
|
+
mbtool --master -a 1 -r 0 -c 2 -t float --byte-order DCBA
|
|
434
|
+
```
|
|
435
|
+
|
|
436
|
+
---
|
|
437
|
+
|
|
438
|
+
## 项目结构
|
|
439
|
+
|
|
440
|
+
```
|
|
441
|
+
modbus-tool/
|
|
442
|
+
├── pyproject.toml # 项目配置
|
|
443
|
+
├── README.md # 本文件
|
|
444
|
+
├── src/
|
|
445
|
+
│ └── modbus_slave_sim/
|
|
446
|
+
│ ├── __init__.py # 包初始化
|
|
447
|
+
│ ├── cli.py # 命令行界面
|
|
448
|
+
│ ├── colors.py # ANSI 颜色工具
|
|
449
|
+
│ ├── datatypes.py # 数据类型与字节序转换
|
|
450
|
+
│ ├── master.py # Modbus 主站客户端
|
|
451
|
+
│ ├── registers.py # 寄存器数据结构
|
|
452
|
+
│ ├── simulation.py # 仿真引擎
|
|
453
|
+
│ ├── tcp_server.py # Modbus TCP 从站服务器
|
|
454
|
+
│ └── rtu_server.py # Modbus 串口从站服务器(RTU/ASCII)
|
|
455
|
+
└── tests/
|
|
456
|
+
└── ...
|
|
457
|
+
```
|
|
458
|
+
|
|
459
|
+
---
|
|
460
|
+
|
|
461
|
+
## 开发
|
|
462
|
+
|
|
463
|
+
```bash
|
|
464
|
+
# 安装开发依赖
|
|
465
|
+
pip install -e ".[dev]"
|
|
466
|
+
|
|
467
|
+
# 运行测试
|
|
468
|
+
pytest
|
|
469
|
+
```
|
|
470
|
+
|
|
471
|
+
## 许可证
|
|
472
|
+
|
|
473
|
+
MIT License
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
mbtoolcli-0.3.1.dist-info/licenses/LICENSE,sha256=ohMh_st7a5VH5UwbdhB8V4G5AkG-2hTkCXh2ihKzxI4,1081
|
|
2
|
+
modbus_slave_sim/__init__.py,sha256=XZUO4kVYeEbnCY1GvNm5JlnThGfpGpINwfnHokp_kCg,1020
|
|
3
|
+
modbus_slave_sim/cli.py,sha256=heeG9lQX4Cvvxh7_IHokeeXWHq2Nw5CqtrVyd0k_aLo,34281
|
|
4
|
+
modbus_slave_sim/colors.py,sha256=qa7XL8yT22pQBEZVXNARe2nd9MbgRiAFAokQsYlJXrI,1594
|
|
5
|
+
modbus_slave_sim/datatypes.py,sha256=TFCSnMaoTJzWaCFuhxJkAfihbSg0co7wXFczbfjGGlk,10698
|
|
6
|
+
modbus_slave_sim/gui_server.py,sha256=OjNNiDm4yAL3tK9V2a52DkFZvCY0LHnxiuV1XzkyPZM,42821
|
|
7
|
+
modbus_slave_sim/master.py,sha256=xHPV4RadKMPGd0cMmGP5rjNzwu8cdyIpkJfNdIHroAg,20941
|
|
8
|
+
modbus_slave_sim/registers.py,sha256=HId-7OrnM2C9CHFlD_GVwKNDt3KzS0UXT1GlOeD6WAo,10633
|
|
9
|
+
modbus_slave_sim/rtu_server.py,sha256=VLTV5IFBS6NOX3ZHImn9559mlqNSY3vnoZqRrIUiDw0,6080
|
|
10
|
+
modbus_slave_sim/simulation.py,sha256=mxbcxDd1ndGU6gj2CVLbVAeNumRgfpb3jA17EgBM9lU,10337
|
|
11
|
+
modbus_slave_sim/tcp_server.py,sha256=pkHKN7j_LjdJ4rfBUIi8EpIpjueA29F8vgzesOtswOE,6601
|
|
12
|
+
mbtoolcli-0.3.1.dist-info/METADATA,sha256=hGin0Qd6gsjLiYP1HFxPmClxGdsgMgizm2lLXBbdI6Q,13966
|
|
13
|
+
mbtoolcli-0.3.1.dist-info/WHEEL,sha256=K260EYznzXsJYBQGqmI8VTxEdiZYNvDZwW9cBh9-_MA,91
|
|
14
|
+
mbtoolcli-0.3.1.dist-info/entry_points.txt,sha256=pNGxKT5sIbLACXHPIok1HT1bg1NxsRlzXXwb8808dck,134
|
|
15
|
+
mbtoolcli-0.3.1.dist-info/top_level.txt,sha256=9GxM28Cbp0AHh8wjtOPHVGpt9YodUndr2J_RweUieeg,17
|
|
16
|
+
mbtoolcli-0.3.1.dist-info/RECORD,,
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 Modbus Tool Contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
modbus_slave_sim
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Modbus Tool - A comprehensive Modbus Master/Slave testing tool.
|
|
3
|
+
|
|
4
|
+
Supports both Master (client) and Slave (server) modes for testing
|
|
5
|
+
and debugging Modbus communication.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
__version__ = "0.3.1"
|
|
9
|
+
__author__ = "Modbus Tool Contributors"
|
|
10
|
+
|
|
11
|
+
from .registers import (
|
|
12
|
+
CoilRegister,
|
|
13
|
+
DiscreteInputRegister,
|
|
14
|
+
HoldingRegister,
|
|
15
|
+
InputRegister,
|
|
16
|
+
ModbusRegisterMap,
|
|
17
|
+
)
|
|
18
|
+
from .simulation import SimulationEngine, SimulationType
|
|
19
|
+
from .tcp_server import ModbusTCPServer
|
|
20
|
+
from .rtu_server import ModbusSerialServer
|
|
21
|
+
from .master import ModbusMaster
|
|
22
|
+
from .gui_server import run_gui
|
|
23
|
+
from .datatypes import DataType, ByteOrder, parse_data_type, parse_byte_order
|
|
24
|
+
|
|
25
|
+
__all__ = [
|
|
26
|
+
"__version__",
|
|
27
|
+
"CoilRegister",
|
|
28
|
+
"DiscreteInputRegister",
|
|
29
|
+
"HoldingRegister",
|
|
30
|
+
"InputRegister",
|
|
31
|
+
"ModbusRegisterMap",
|
|
32
|
+
"SimulationEngine",
|
|
33
|
+
"SimulationType",
|
|
34
|
+
"ModbusTCPServer",
|
|
35
|
+
"ModbusSerialServer",
|
|
36
|
+
"ModbusMaster",
|
|
37
|
+
"run_gui",
|
|
38
|
+
"DataType",
|
|
39
|
+
"ByteOrder",
|
|
40
|
+
"parse_data_type",
|
|
41
|
+
"parse_byte_order",
|
|
42
|
+
]
|