2.5-Air302(NB-IOT)-基础外设-串口(485,422),CRC校验
时间:2022-07-28
本文章向大家介绍2.5-Air302(NB-IOT)-基础外设-串口(485,422),CRC校验,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/Learn-NB-IOT-Air302-ForLua" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>
电路说明
模块有三个串口:
日志打印口: HOST_TXD;HOST_RXD
AT/程序下载口: UART1_TXD;UART1_RXD
串口2: UART2_TXD;UART2_RXD (连接了485/422)
配置串口2,接收到什么回什么
local UART_ID=2 --串口2
-- 订阅串口发布消息的主题
sys.subscribe("uart_write", function(data)
uart.write(UART_ID, data) --返回接收的数据
end)
uart.on(UART_ID, "receive", function(id, len)
local data = uart.read(id, 1024)
sys.publish("uart_write", data) --发布主题为 uart_write 的消息
end)
-- 配置串口2,波特率115200,8位数据位.1位停止位,无校验位,小端模式,缓存大小1024字节
uart.setup(UART_ID, 115200,8,1,uart.None,uart.LSB,1024)
485接法
422接法
处理串口数据
1.字符串
2.16进制数据
sys.subscribe("uart_write", function(data)
if data == "123" then --接收到 "123" 返回 "456"
uart.write(UART_ID, "456") --返回接收的数据
end
--接收到 0xaa 0x55 返回 0x01 0x03
if data:byte(1) == 0xaa and data:byte(2) == 0x55 then
local hexdata = string.char(0x01, 0x03)
uart.write(UART_ID,hexdata)--返回数据
end
end)
补充 CRC校验
--计算crc 报错,有时间再询问官方
local RevLen = string.len (data)
local i; local datatable={};
for i=1,RevLen do
datatable[i] = data:byte(i);
end
log.info("CRC16=", CRC16(datatable,RevLen));
--计算CRC
function CRC16(modbusdata,length)
local i=0;local j=0;local crc=0;local k=1;local l=1;
for k=1 ,length do
crc = bit.bxor(crc,modbusdata[k])
for l=1,8 do
if bit.band(crc,1) == 1 then
crc = bit.rshift(crc,1);
crc = bit.bxor(crc,0xa001);
else
crc = bit.rshift(crc,1);
end
end
end
return crc;
end
function CRC16Flage(modbusdata,length)
local Receive_CRC = 0;local calculation = 1;
Receive_CRC = CRC16(modbusdata,length-2)
calculation = modbusdata[length];
calculation = calculation * 256;
calculation = calculation + modbusdata[length-1];
if Receive_CRC == calculation then
return 1;
else
return 0;
end
end
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法