# modbus.rtu_request

## 功能

构建 Modbus RTU 请求帧，并自动追加 CRC16。

## 语法

```bt
modbus.rtu_request(config)
```

## 参数

| 参数 | 类型 | 必填 | 默认值 | 说明 |
|------|------|------|------|------|
| config | Object | 是 | 无 | 请求配置对象。 |

## 配置字段

| 字段 | 类型 | 必填 | 默认值 | 说明 |
|------|------|------|------|------|
| unit_id | Int | 否 | `1` | 从站地址，0 到 255。 |
| function_code | Int | 否 | 无 | Modbus 功能码。也可使用 `function` 字符串。 |
| function | String | 否 | 无 | 功能名，例如 `read_holding_registers`。 |
| address | Int | 读写寄存器/线圈时使用 | `0` | 起始地址。 |
| quantity | Int | 读取时使用 | `1` | 读取数量。 |
| value | Int/Bool | 写单个寄存器/线圈时使用 | `0` | 写入值。 |
| values | Array | 写多个寄存器/线圈时使用 | 无 | 多值写入数据。 |
| pdu | Bytes/Array | 否 | 无 | 原始 PDU；传入后不再根据功能码构建。 |
| data | Bytes/Array/String | 否 | 无 | 不支持的自定义功能码附加数据。 |

## 返回值

| 类型 | 说明 |
|------|------|
| Bytes | RTU ADU 完整请求帧。 |

## 代码示例

```bt
packet = modbus.rtu_request({
    unit_id: 1,
    function: 'read_holding_registers',
    address: 0,
    quantity: 2
})

// 输出：010300000002c40b
print packet.to_hex()
```

## 注意事项

- RTU CRC 按低字节在前写入帧尾。
- 结果长度受 `BT_BYTES_LIMIT` 限制。
