# modbus.py 函数文档 Modbus协议实现模块,用于与温度传感器和流量计等设备通信。 ## Modbus功能码常量 - READ_COILS (0x01): 读线圈寄存器
- READ_DISCRETE_INPUTS (0x02): 读离散输入寄存器
- READ_HOLDING_REGISTERS (0x03): 读保持寄存器
- READ_INPUT_REGISTER (0x04): 读输入寄存器
- H05 (0x05): 写单个线圈寄存器
- WRITE_MULTIPLE_COILS (0x0F): 写多个线圈寄存器
- WRITE_SINGLE_REGISTER (0x06): 写单个保持寄存器
- WRITE_MULTIPLE_REGISTERS (0x10): 写多个保持寄存器 ## modbus_host 类 ### 初始化
python
def __init__(self, port=2, baudrate=9600)

- 功能: 初始化Modbus主机
- 参数:
- port: 串口号(默认2)
- baudrate: 波特率(默认9600) ### 读取功能 #### H01_read_coils
python
def H01_read_coils(self, slave_addr, starting_address, coil_quantity)

- 功能: 读取线圈状态
- 参数:
- slave_addr: 从机地址
- starting_address: 起始地址
- coil_quantity: 线圈数量(最少8个)
- 返回值: 线圈状态列表 #### H02_read_discrete_input
python
def H02_read_discrete_input(self, slave_addr, starting_address, input_quantity)

- 功能: 读取离散输入状态
- 参数:
- slave_addr: 从机地址
- starting_address: 起始地址
- input_quantity: 输入点数量
- 返回值: 输入状态列表 #### H03_read_hold_register
python
def H03_read_hold_register(self, slave_addr, starting_address, register_quantity, signed=True)

- 功能: 读取保持寄存器
- 参数:
- slave_addr: 从机地址
- starting_address: 起始地址
- register_quantity: 寄存器数量
- signed: 是否有符号(默认True)
- 返回值: 寄存器值列表 #### H04_read_input_register
python
def H04_read_input_register(self, slave_addr, starting_address, register_quantity, signed=True)

- 功能: 读取输入寄存器
- 参数:
- slave_addr: 从机地址
- starting_address: 起始地址
- register_quantity: 寄存器数量
- signed: 是否有符号(默认True)
- 返回值: 寄存器值列表 ### 写入功能 #### H05_write_coil
python
def H05_write_coil(self, slave_addr, output_address, output_value)

- 功能: 写入单个线圈
- 参数:
- slave_addr: 从机地址
- output_address: 输出地址
- output_value: 输出值
- 返回值: 操作结果 #### H06_write_single_register
python
def H06_write_single_register(self, slave_addr, register_address, register_value, signed=True)

- 功能: 写入单个寄存器
- 参数:
- slave_addr: 从机地址
- register_address: 寄存器地址
- register_value: 寄存器值
- signed: 是否有符号(默认True)
- 返回值: 操作结果 #### H0F_write_multi_coils
python
def H0F_write_multi_coils(self, slave_addr, starting_address, output_values)

- 功能: 写入多个线圈
- 参数:
- slave_addr: 从机地址
- starting_address: 起始地址
- output_values: 输出值列表
- 返回值: 操作结果 #### H10_write_multi_registers
python
def H10_write_multi_registers(self, slave_addr, register_address, register_values, signed=True)

- 功能: 写入多个寄存器
- 参数:
- slave_addr: 从机地址
- register_address: 寄存器地址
- register_values: 寄存器值列表
- signed: 是否有符号(默认True)
- 返回值: 操作结果 ## 使用示例 ### 温度传感器读取
python
modbus_485 = modbus_host(2, 9600)
# 读取4路温度传感器数据
temperatures = modbus_485.H04_read_input_register(2, 0, 4)
### 流量计控制
python
modbus_485 = modbus_host(2, 9600)
# 读取12路流量计设定值
flow_settings = modbus_485.H03_read_hold_register(1, 400, 12) # 设置12路流量值
flow_values = [1000, 100, 200, 300, 400, 500, 600, 500, 500, 500, 0, 0]
modbus_485.H10_write_multi_registers(1, 400, flow_values) # 读取12路实际流量值
actual_flows = modbus_485.H04_read_input_register(1, 0, 12)
## 设备地址映射 ### 温度传感器 (从机地址: 2)
- 功能: 4路温度AI值读取
- 寄存器类型: 输入寄存器
- 起始地址: 0
- 数量: 4 ### 流量计 (从机地址: 1)
1. 设定值
- 功能: 12路流量控制
- 寄存器类型: 保持寄存器
- 起始地址: 400
- 数量: 12 2. 实际值
- 功能: 12路流量读取
- 寄存器类型: 输入寄存器
- 起始地址: 0
- 数量: 12 ## 注意事项 1. 波特率默认9600,确保与设备匹配
2. 读取线圈时数量至少需要8个
3. 有符号数默认开启,根据设备要求设置
4. 温度传感器和流量计使用不同的从机地址
5. 写入操作前建议先读取当前值
6. 多寄存器操作时注意地址连续性
7. 错误处理需要在应用层实现