文章目录
- [1、PyModbus API对应的功能码和报文](#1、PyModbus API对应的功能码和报文)
- 2、总结
1、PyModbus API对应的功能码和报文
先连接串口,本文在win11系统,使用虚拟串口来捕获报文
python
import pymodbus.client as modbusClient
from pymodbus.framer import FramerType
client = modbusClient.ModbusSerialClient(
port = "COM2",
framer = FramerType.RTU,
baudrate = 115200,
bytesize = 8,
parity = 'N',
stopbits = 1,
handle_local_echo = False,
name = "comm",
reconnect_delay = 0.1,
reconnect_delay_max = 300,
timeout = 1,
retries = 3,
trace_packet = None,
trace_pdu = None,
trace_connect = None,
)
client.connect()
1.1、功能码:0x01
功能码 0x01
报文 01 01 00 02 00 02 1C 0B
python
res = client.read_coils(
address=0x0002,
count=2,
device_id=1
)
1.2、功能码:0x02
功能码 0x02
报文 01 02 00 00 00 01 B9 CA
python
res = client.read_discrete_inputs(
address=0,
count=1,
device_id=1
)
1.3、功能码:0x03
功能码 0x03
报文 01 03 00 9B 00 01 F5 E5
python
res = client.read_holding_registers(
address=155,
count=1,
device_id=1
)
1.4、功能码:0x04
功能码 0x04
报文 01 04 00 00 00 01 31 CA
python
res = client.read_input_registers(
address=0,
count=1,
device_id=1
)
1.5、功能码:0x05
功能码 0x05
报文 01 05 00 00 FF 00 8C 3A
python
res = client.write_coil(address=0,value=True,device_id=1)
1.6、功能码:0x06
功能码 0x06
报文 01 06 00 9B 30 31 2D F1
python
res = client.write_register(address=155,
value=0x3031,
device_id=1
)
1.7、功能码:0x10
功能码 0x10
报文 01 10 00 FF 00 02 04 00 01 00 F1 2C EF
python
res = client.write_registers(
address=0xff,
values=[0x01, 0xf1],
device_id=1
)
1.8、功能码:0x17
功能码 0x17
报文 01 17 00 A1 00 03 00 64 00 02 04 12 34 56 78 94 68
python
res = client.readwrite_registers(
read_address=0xa1,
read_count=3,
write_address=0x64,
values=[0x1234, 0x5678],device_id=1
)
2、总结
其他功能码对应的API,请查看PyModbus库的源码:mixin.py,路径如下
bash
Miniconda\miniconda3\envs\myenv\Lib\site-packages\pymodbus\client\mixin.py
| 功能码(十六进制) | 对应API |
|---|---|
| 0x01 | read_coils |
| 0x02 | read_discrete_inputs |
| 0x03 | read_holding_registers |
| 0x04 | read_input_registers |
| 0x05 | write_coil |
| 0x06 | write_register |
| 0x10 | write_registers |
| 0x17 | readwrite_registers |