uart.setup(id, baud_rate, data_bits, partiy, stop_bits, [rs485, rwait, buff_size])
uart.close(id)
uart.write(id, data)
uart.read(id, len)
uart.on(id, topic, func)
uart.rwait(ms)
uart.indicate()
初始化串口
入参 | 说明 |
---|---|
id | int,串口id |
baud_rate | int,波特率 |
data_bits | int,数据位 7或8, 一般是8 |
partiy | int,校验位可选 uart.None/uart.Even/uart.Odd |
stop_bits | int,停止位 1或0, 一般是1 |
rs485 | int,485流控引脚,没有写0,默认0 |
rwait | int,接收分帧时间,默认200ms |
buff_size | int,缓冲区大小, 默认值8192 |
成功返回0;
-- 函数原型
-- uart.setup(id, baud_rate, data_bits, partiy, stop_bits, rs485, rwait, buff_size)
-- 串口id, uart1是1, uart2是2
-- 波特率 1200~460800
-- 数据位 7或8, 默认是8
-- 校验位 uart.None/uart.Even/uart.Odd,默认无
-- 停止位 1或2, 默认是1
-- RS485使能引脚,高有效,没有写0
-- rwait 接收分帧时间,单位ms,默认200
-- buff_size 缓冲区长度默认值10k字节
uart.setup(1, 9600, 8, uart.None, 1, 0, 0)
关闭串口
写入数据到串口
入参 | 说明 |
---|---|
id | int,串口id |
data | string,发送的数据 |
无返回;
local data = "1234"
uart.write(id, data)
从串口缓冲区读数据
入参 | 说明 |
---|---|
id | int,串口id |
len | int,要读取的长度 |
无返回;
local data = uart.read(id, len)
log.info("test uart read", id, len, #data)
订阅串口事件
入参 | 说明 |
---|---|
id | int,串口id |
topic | str,订阅的主题,recv , sent ,注意有附加参数,看实例 |
func | func,执行的回调 |
无返回;
uart.on(1, "recv", function(id, len) -- 串口id和缓冲区长度
-- 读取数据
local data = uart.read(id, len)
log.info("test uart read", id, len, #data)
-- 发出去模拟处理数据
sys.publish("UART_ECHO", id, data)
end)
uart.on(1, "sent",
function(id, len) log.info("uart data send over, len=", len)
end)
修改串口接收分帧的实践,单位ms; 比如你modbus接收,需要延迟多少个ms时间分包;亦或者你要接收串口的一整包json数据,需要多个ms时间分包;此时间代表xxms以来串口没有收到数据了。
invalid for user