串口通信
# 串口通信组件
RuleGo IoT 组件库提供了串口通信支持,允许规则链与串口设备进行交互,提供了读取、写入、请求和控制四个功能组件。
需要额外引入扩展库: rulego-components-iot (opens new window)
# 组件列表
| 组件名 | 类型 (Type) | 描述 |
|---|---|---|
| 串口读 | x/serialIn | 从串口读取数据。支持按字符、超时或固定长度拆分数据。 |
| 串口写 | x/serialOut | 向串口写入数据。支持自动追加尾部字符。 |
| 串口请求 | x/serialRequest | 写入数据并等待响应(阻塞式)。支持超时和响应拆分逻辑。 |
| 串口控制 | x/serialControl | 控制串口连接状态(打开/关闭)。 |
# 公共配置
所有串口组件共享以下连接配置:
| 字段 | 说明 | 示例 |
|---|---|---|
| port | 串口名,如 COM1 (Windows) 或 /dev/ttyUSB0 (Linux) | COM3 |
| baudRate | 波特率 | 9600 |
| dataBits | 数据位 | 8 |
| stopBits | 停止位 ("1", "1.5", "2") | 1 |
| parity | 校验位 (N: None, O: Odd, E: Even, M: Mark, S: Space) | N |
| dtr | DTR 控制 (true, false) | true |
| rts | RTS 控制 (true, false) | false |
注意:同一
port的多个节点会共享同一个底层连接实例。
# 1. 串口读 (x/serialIn)
用于从串口读取数据。当接收到输入消息时触发读取操作(通常配合定时器使用)。
# 特有配置
| 字段 | 说明 | 默认值 |
|---|---|---|
| startChar | 起始字符。若设置,会丢弃数据直到匹配到此字符。 | - |
| splitType | 拆分方式:char (按字符), timeout (按超时), fixed (按长度) | timeout |
| splitKey | 拆分参数。若按字符拆分则为分隔符(如 \n);若按长度拆分则为字节数。 | - |
| splitTimeout | 读取分段超时(ms)。超过此时间无数据则视为一段结束。 | 100 |
| dataType | 数据类型:text (UTF-8字符串), binary (二进制), hex (16进制字符串), base64 (Base64字符串) | text |
# 2. 串口写 (x/serialOut)
用于向串口发送数据。
# 特有配置
| 字段 | 说明 | 默认值 |
|---|---|---|
| data | 发送内容,支持动态变量替换(如 ${data})。如果为空,则使用 msg.Data | - |
| addChar | 追加字符。发送数据时自动追加到尾部(支持 \n, \r 等转义)。 | \r\n |
| dataType | 输入数据类型:text (默认), hex (16进制字符串), base64 (Base64字符串)。若非text,则会将数据解码后发送。 | text |
# 输入消息
如果 data 配置为空,则使用 msg.Data 将作为发送内容。
# 3. 串口请求 (x/serialRequest)
用于"请求-响应"模式。先发送数据,然后阻塞等待响应。
# 特有配置
包含 串口写 的 data, addChar, dataType 配置和 串口读 的所有拆分配置 (startChar, splitType, dataType 等),以及:
| 字段 | 说明 | 默认值 |
|---|---|---|
| requestTimeout | 请求总超时时间 (ms)。 | 10000 |
# 4. 串口控制 (x/serialControl)
用于手动控制串口连接。
# 特有配置
| 字段 | 说明 | 默认值 |
|---|---|---|
| action | 控制指令,支持动态变量替换(如 ${msg.action})。如果为空,则使用 msg.Data 作为指令。 | close |
# 输入消息
如果 action 配置为空,则使用 msg.Data 内容作为控制指令:
open: 打开串口连接(通常组件会自动打开,此指令用于手动重连)。close: 关闭串口连接。dtr=1: 将 DTR 信号置为高电平。dtr=0: 将 DTR 信号置为低电平。rts=1: 将 RTS 信号置为高电平。rts=0: 将 RTS 信号置为低电平。flush: 清空输入和输出缓冲区。flush_in: 清空输入缓冲区。flush_out: 清空输出缓冲区。
# 典型场景
- 定时采集数据:
endpoint/schedule(定时器) ->x/serial-in(读取) ->Log(打印)
- 控制设备:
endpoint/mqtt(接收指令) ->x/serial-out(发送指令)
- 查询设备状态:
endpoint/http(接收请求) ->x/serial-request(查询并等待) ->Http Response(返回结果)
在 GitHub 上编辑此页 (opens new window)
上次更新: 2026/02/05, 02:43:11