# 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. 错误处理需要在应用层实现
