请选择 进入手机版 | 继续访问电脑版

硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1704|回复: 3
收起左侧

[Lua] Lua Uart API 函数说明

[复制链接]

747

主题

1048

回帖

3294

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3294
发表于 2021-9-25 03:09:52 | 显示全部楼层 |阅读模式

Lua Uart API 函数说明
目录:

uart_cfg(port, BaudRate, Parity, WordLength, StopBits)
uart_send(port, bin)
bin_str = uart_recive(prot, maxlen, TotalTimeout, ByteTimeout)
uart_clear_rx(prot)
err = modbus_write_u16(port, timeout, addr485, regaddr, value0, value1, value2 ...)
err = modbus_write_u32(port, timeout, addr485, regaddr, value0, value1, value2 ...)
err = modbus_write_float(port, timeout, addr485, regaddr, value0, value1, value2 ...)
err, data1, data2 ... = modbus_read_u16(port, timeout, addr485, regaddr, regnum)
err, data1, data2 ... = modbus_read_s16(port, timeout, addr485, regaddr, regnum)
err, data1, data2 ... = modbus_read_u32(port, timeout, addr485, regaddr, regnum)
err, data1, data2 ... = modbus_read_s32(port, timeout, addr485, regaddr, regnum)
err, data1, data2 ... = modbus_read_float(port, timeout, addr485, regaddr, regnum)
err = modbus_write_do(port, timeout, addr485, regaddr, value0, value1 ...)
err, data1, data2 ... = modbus_read_do(port, timeout, addr485, regaddr, regnum)
err, data1, data2 ... = modbus_read_di(port, timeout, addr485, regaddr, regnum)

详细说明:   
----------------------------------------------------------
uart_cfg(port, BaudRate, Parity, WordLength, StopBits)
功能: 配置串口硬件参数
参数:
  - port : 串口号, 1 或 7
  - BaudRate : 波特率
  - Parity : 0-无校验  1-奇校验  2-偶校验
  - WordLength : 字长 8或9
  - StopBits : 停止位 1,2
  
  返回: 无
  范例: uart_cfg(1, 115200, 0, 8, 1)

----------------------------------------------------------
uart_send(port, bin)
功能: 发送数据
参数:
  - port : 串口号, 1 或 7
  - bin : 二进制字符串
  
  返回: 无
  范例:
     send(1, "12345678")
     send(1, "\x04\x00\0x12")
     
     bin = "\x00\x12\x34\x56"
     send(1, bin)

----------------------------------------------------------
uart_recive(prot, maxlen, TotalTimeout, ByteTimeout)
功能: 接收串口数据。退出条件满足任意1条:
       (1)读到指定个数
       (2)没有收到字节,总超时到达 TotalTimeout
       (3)收到字节后,字符间超时到达 ByteTimeout
参数:
  - port : 串口号, 1 或 7
  - maxlen : 最长长度
  - TotalTimeout : 总超时,ms
  - ByteTimeout : 字节间超时, ms。不提供该参数时,字节间超时等于总超时
  
  返回: 读取到的二进制字符串
  范例:
     local str     
     str = uart_recive(1, 200, 2000, 10) --读最大200字节, 总超时2秒, 字符间超时10ms
   str = uart_recive(1, 200, 2000) --读最大200字节, 总超时2秒,字符间超时2秒
   
----------------------------------------------------------
uart_clear_rx(prot)
功能: 清空接收缓冲区
参数:
  - port : 串口号, 1 或 7
  
  返回: 无
  范例:
     uart_clear_rx(1)

----------------------------------------------------------
int modbus_write_u16(port, timeout, addr485, regaddr, value0, value1, value2 ...)
功能: 发0x06功能码写1个寄存器或者发0x10功能码多个写寄存器,函数收到应答或等待超时才会返回
参数:
  - port : 串口号, 1 或 7
  - timeout : 超时
  - addr485 :485地址 0-255
  - regaddr : 寄存器地址
  - value0 : 寄存器值,可以罗列多个寄存器,函数自动识别寄存器个数
  
  返回: err_code 错误代码
              0x00  OK
              0x01  不支持的功能码
       0x02  寄存器地址错误
              0x03  数据值域错误
              0x04  写入失败

              0x05  自己定义错误包应答
              0x06  超时 自定义的 */
  范例:
     local re     
     re = modbus_write_u16(1, 100, 1, 0x0000, 0x1234, 0x4567, 0x8888)
     
     local port = 1
     local timeout = 100
     local addr485 = 1
     local regaddr = 0  
     re = modbus_write_u16(port, timeout, addr485, regaddr, 0x1234, 0x4567, 0x8888)
     print(re)
     beep()
     
----------------------------------------------------------
int modbus_write_u32(port, timeout, addr485, regaddr, value0, value1, value2 ...)
功能: 发0x10功能码写32位整数寄存器, 2个16位寄存器组合为1个32位寄存器,大端模式
参数:
  - port : 串口号, 1 或 7
  - timeout : 超时
  - addr485 :485地址 0-255
  - regaddr : 寄存器地址
  - value0 : 寄存器值,可以罗列多个寄存器,函数自动识别寄存器个数
  
  返回: err_code 错误代码
              0x00  OK
              0x01  不支持的功能码
       0x02  寄存器地址错误
              0x03  数据值域错误
              0x04  写入失败

              0x05  自己定义错误包应答
              0x06  超时 自定义的 */
  范例:
     local re     
     re = modbus_write_u32(1, 100, 1, 0x0000, 0x12345678, 0x45678888)
     
     local port = 1
     local timeout = 100
     local addr485 = 1
     local regaddr = 0  
     re = modbus_write_u16(port, timeout, addr485, regaddr, 0x12345678, 0x45678888)
     print(re)
     beep()   

----------------------------------------------------------
int modbus_write_float(port, timeout, addr485, regaddr, value0, value1, value2 ...)
功能: 发0x10功能码写单精度浮点寄存器, 2个16位寄存器组合为1个32位浮点寄存器,大端模式 float_ABCD
参数:
  - port : 串口号, 1 或 7
  - timeout : 超时
  - addr485 :485地址 0-255
  - regaddr : 寄存器地址
  - value0 : 寄存器值,可以罗列多个寄存器,函数自动识别寄存器个数
  
  返回: err_code 错误代码
              0x00  OK
              0x01  不支持的功能码
       0x02  寄存器地址错误
              0x03  数据值域错误
              0x04  写入失败

              0x05  自己定义错误包应答
              0x06  超时 自定义的 */
  范例:
     local re     
     re = modbus_write_float(1, 100, 1, 0x0000, -0.1234, 789.123)
     
     local port = 1
     local timeout = 100
     local addr485 = 1
     local regaddr = 0  
     re = modbus_write_u16(port, timeout, addr485, regaddr, -0.1234, 789.123)
     print(re)
     beep()
     
----------------------------------------------------------
modbus_read_u16(port, timeout, addr485, regaddr, regnum)
功能: 发0x03功能码读16位无符号整数寄存器
参数:
  - port : 串口号, 1 或 7
  - timeout : 超时
  - addr485 :485地址 0-255
  - regaddr : 寄存器地址
  - regnum : 寄存器个数
  
  返回: err_code, value0, value1 ...
        err_code 错误代码
              0x00  OK
              0x01  不支持的功能码
       0x02  寄存器地址错误
              0x03  数据值域错误
              0x04  写入失败

              0x05  自己定义错误包应答
              0x06  超时 自定义的 */
  范例:
     local re
     local data1
     local data2   
     local port = 1
     local timeout = 100
     local addr485 = 1
     local regaddr = 0
     local value = {}  
     
     value = {modbus_read_u16(port, timeout, addr485, regaddr, 2)}
     -- value[1] : 错误代码
     -- value[2] : 第1个寄存器的值
     -- value[3] : 第3个寄存器的值
     
     re. data1, data2 = modbus_read_u16(port, timeout, addr485, regaddr, 2)
     -- re : 错误代码
     -- data1 : 第1个寄存器的值
     -- data2 : 第2个寄存器的值

----------------------------------------------------------
modbus_read_s16(port, timeout, addr485, regaddr, regnum)
功能: 读16位有符号整数寄存器,用法同 modbus_read_u16()

----------------------------------------------------------
modbus_read_u32(port, timeout, addr485, regaddr, regnum)
功能: 读32位无符号整数寄存器,用法同 modbus_read_u16()
      2个16位寄存器组合为1个32位寄存器
      
----------------------------------------------------------
modbus_read_s32(port, timeout, addr485, regaddr, regnum)
功能: 读32位有符号整数寄存器,用法同 modbus_read_u16()
      2个16位寄存器组合为1个32位寄存器

----------------------------------------------------------
modbus_read_float(port, timeout, addr485, regaddr, regnum)
功能: 读32位单精度浮点寄存器,用法同 modbus_read_u16()
      2个16位寄存器组合为1个32位寄存器

----------------------------------------------------------
modbus_write_do(port, timeout, addr485, regaddr, value0, value1 ...)
功能: 发0x10功能码写1个或多个DO寄存器(控制继电器)
参数:
  - port : 串口号, 1 或 7
  - timeout : 超时
  - addr485 :485地址 0-255
  - regaddr : 寄存器地址
  - value0 : 寄存器值,0或1. 可以罗列多个寄存器,函数自动识别寄存器个数
  
返回: err_code 错误代码
              0x00  OK
              0x01  不支持的功能码
       0x02  寄存器地址错误
              0x03  数据值域错误
              0x04  写入失败

              0x05  自己定义错误包应答
              0x06  超时 自定义的 */
  范例:
     local port = 1
     local timeout = 100
     local addr485 = 1
     local regaddr = 0  
     re = modbus_write_do(port, timeout, addr485, regaddr, 1, 0, 1, 1, 0) --写0开始的5个寄存器
     print(re)
     
----------------------------------------------------------
modbus_read_do(port, timeout, addr485, regaddr, regnum)
功能: 发0x01功能码读DO寄存器
参数:
  - port : 串口号, 1 或 7
  - timeout : 超时
  - addr485 :485地址 0-255
  - regaddr : 寄存器地址,起始地址
  - regnum : 寄存器个数
  
  返回: err_code, value0, value1 ...
        err_code 错误代码
              0x00  OK
              0x01  不支持的功能码
       0x02  寄存器地址错误
              0x03  数据值域错误
              0x04  写入失败

              0x05  自己定义错误包应答
              0x06  超时 自定义的 */
  范例:
     local re
     local data1
     local data2   
     local port = 1
     local timeout = 100
     local addr485 = 1
     local regaddr = 0
     local value = {}  
     
     value = {modbus_read_do(port, timeout, addr485, regaddr, 2)}
     -- value[1] : 错误代码
     -- value[2] : 第1个寄存器的值
     -- value[3] : 第3个寄存器的值
     
     re. data1, data2 = modbus_read_u16(port, timeout, addr485, regaddr, 2)
     -- re : 错误代码
     -- data1 : 第1个寄存器的值
     -- data2 : 第2个寄存器的值

----------------------------------------------------------
modbus_read_di(port, timeout, addr485, regaddr, regnum)
功能: 发0x02功能码读DI寄存器
参数:
  - port : 串口号, 1 或 7
  - timeout : 超时
  - addr485 :485地址 0-255
  - regaddr : 寄存器地址,起始地址
  - regnum : 寄存器个数
  
  返回: err_code, value0, value1 ...
        err_code 错误代码
              0x00  OK
              0x01  不支持的功能码
       0x02  寄存器地址错误
              0x03  数据值域错误
              0x04  写入失败

              0x05  自己定义错误包应答
              0x06  超时 自定义的 */
  范例:
     local re
     local data1
     local data2   
     local port = 1
     local timeout = 100
     local addr485 = 1
     local regaddr = 0
     local value = {}  
     
     value = {modbus_read_do(port, timeout, addr485, regaddr, 2)}
     -- value[1] : 错误代码
     -- value[2] : 第1个寄存器的值
     -- value[3] : 第3个寄存器的值
     
     re. data1, data2 = modbus_read_u16(port, timeout, addr485, regaddr, 2)
     -- re : 错误代码
     -- data1 : 第1个寄存器的值
     -- data2 : 第2个寄存器的值
      
     
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
105942
QQ
发表于 2021-9-25 09:55:17 | 显示全部楼层
下个月专门整理个文档。
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2021-9-28 08:53:18 | 显示全部楼层
端口校验模式还是有缺失:
----------------------------------------------------------------------------
uart_cfg(port, BaudRate, Parity, WordLength, StopBits)
功能: 配置串口硬件参数
参数:
  - port : 串口号, 1 或 7
  - BaudRate : 波特率
  - Parity : 0-无校验  1-奇校验  2-偶校验
  - WordLength : 字长 8或9
  - StopBits : 停止位 1,2
----------------------------------------------------------------------------


我们的设备校验位全部是“MARK”,导致不能使用LUA小程序,希望后续能够增加校验位,谢谢!!!


123456.png




@armfly
@eric2013


回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
105942
QQ
发表于 2021-9-28 10:59:53 | 显示全部楼层
lijun6 发表于 2021-9-28 08:53
端口校验模式还是有缺失:
-------------------------------------------------------------------------- ...

好的,已经记录
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-3-29 22:07 , Processed in 0.162321 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表