openluat Air720D 4G DTU主控板 是由合宙开源社区技术专家“稀饭放姜”设计,上海合宙物联网公司推出的一款移动2G/4G 双模DTU产品。只需要加上壳子就成为一个性能优秀的DTU产品。今天的学习日记里面,我将尝试使用iRTU 配合另一个开源小项目UPWS做一个最基本的工业应用案例:RS485数据双向透传。
基本功能:
通过一个手机浏览器和iRTU的485端口建立透传连接,可以互相透明传输文本或者二进制数据。
实现原理
- iRTU通过UDP端口连接到远程的UPWS服务器,并发送上线消息
服务地址为 udp://box.miuser.net:7101
2)手机通过微信扫描二维码或浏览器输入网址打开iRTU测试小程序页面通过Websocket接口连接到UPWS服务器,并发送上线消息
服务地址为:ws://box.miuser.net:9000
3)电脑客户端接一个USB转UART串口的连接线,再转接一个UART转RS485的连接板连接到iRTU上,并使用串口调试工具打开USB串口
4)通过手机客户端可以和LLCOM串口调试工具建立起双向的文本命令传输,传输支持中文和英文。
下面是硬件连线示意图
硬件连接具体步骤
器材准备
- Air720D 4G DTU主控板+2G/4G全频段天线
2)RS485转UART小板+USB转串口线
- USB 5V电源+ USB线
DTU供电连接线两根+RS485传输线一盘
手机一部+电脑一部 (很普通,就不拍照了)
连接方式如下
电路连接好后,将sim卡插入iRTU板子sim卡座上,通上电源我们应该能看到iRTU灯有规律的闪烁,此时证明iRTU工作已经正常。准备开始接收指令
iRTU配置步骤
此时我们打开LLCCOM调试工具,发送如下指令序列,对iRTU进行配置
串口波特率训练
--发送
AT
--返回
AT
查询版本
--发送
rrpc,getver
--返回
rrpc,getver,1.8.7
查询设备IMEI
--发送
rrpc,getimei
--返回
rrpc,getimei,866262042499144
配置为连接UPWS服务器
--发送
config,writeconfig,{"fota":0,"uartReadTime":"25","flow":"","param_ver":"1","pwrmod":"normal","password":"","netReadTime":"0","passon":1,"nolog":"0","plate":0,"reg":0,"convert":0,"uconf":[[1,"115200",8,2,0,""],[2,"115200",8,2,0,""]],"conf":[["udp","005501B01000000000100000000000000011234iRTUUPWs 1.0.000",10,"box.miuser.net",7101,1,"","",""],[],[],[],[],[],[]],"preset":{"number":"","delay":"","smsword":""},"apn":["","",""],"cmds":[[],[]],"pins":[],"gps":{"pio":[],"fun":[]},"upprot":["\nfunction\nlocal str=...\nlocal totallen=41+str:len()\nlocal ret=string.format(\"%04d\",totallen)..\"01\"..\"C\"..\"01\"..\"0000000001\"..\"0000000000000001\"..\"1234\"..str..\"05\"\nreturn ret\nend","","","","","",""],"dwprot":["function\nlocal str=...\nlocal ret=str:sub(40,-3)\nreturn ret\nend","","","","","",""],"warn":{"adc0":[],"adc1":[],"vbatt":[],"gpio":[]} }
--返回
OK
配置iRTU的是一个Json字符串,具体各个字段的含义在 “iRTU参考手册”上可查,目前最新版是V3.1
此配置字段的含义如下:
1) 配置iRTU为UDP传输模式,服务器地址为 box.miuser.net,端口为7101
2) 每隔10 S发送一次心跳包,心跳包的内容为 005501B01000000000100000000000000011234iRTUUPWs 1.0.000
3) 使用数据通道1通过数据模板进行透传,并绑定到到iRTU串口1
4) 上行数据流模板代码为
--固定头,标识模板开始
function
--接收从硬件通道传入的数据
local str=...
--计算包长度
local totallen=41+str:len()
--拼接发送的数据包,各个字段内容详见MTCP通讯协议,包含在UPWS协议中,文末有开源地址
local ret=string.format("%04d",totallen).."01".."C".."01".."0000000001".."0000000000000001".."1234"..str.."05"
--返回拼接好的数据包,给iRTU底层发送
return ret
end
5) 下行数据流模板代码为
--固定头,标识模板开始
function
--接收从服务器发来的原始数据
local str=...
--提取其中的有效数据字段
local ret=str:sub(40,-3)
--输出给硬件数据通道
return ret
end
关于UPWS数据报文格式及iRTU数据流模板更详细的介绍篇幅所限就不在此敷述了,请参与文末的资料链接进行相关阅读。也可以在Bilibili上 搜索“稀饭放姜” 相关视频教程了解。
方便起见”飞思创-Luat生态伙伴” 提供了一款图形化的iRTU配置工具:“iRTU ConfigTool” 最新版本是V1.3.6,性能很不错。
iRTU透传使用方法
下面我说说使用iRTU透传的具体的使用方法。
打开手机浏览器输入如下网址,打开IRTU连接测试小工具
http://box.miuser.net/iRTU_UPWs/UPWsiRTU.htm?ID=0000000001&MM=0000000000000001
为了简便起见我已经生成好了一个二维码,直接扫描二维码就行了。
其中ID为10位10进制数字,MM为16位16进制数字,作用为UPWS的通讯信道UID和通讯密码,此处设置要与上面iRTU设置的心跳包与数据流模板的相对应的字段相一致,才能正常通讯。 使用前需要相应修改为任意合规的数字,直接在iRTU配置字段里进行相应的搜索替换即可。
打开电脑,运行LLCOM,在程序底部,确认对应的串口号,并点击打开串口即可收到iRTU透传工具发送的心跳包。此时通过软件发送的指令就可以传输到了手机上了,反之手机上发送的指令也可以在LLCOM接收到。
常见故障排除
1 iRTU状态灯不亮,或反复重启(灯亮一会,就灭,间隔大于3s)
A:供电不足,5V供电需要较粗的电缆及2A的电源输出电流,如果没有条件可以提高输入电压到6V-12V
B:固件不可恢复错误,可以开盒重刷DTU固件,固件下载地址在QQ群952343033,群文件中
2 iRTU接收不到心跳包
A: 检查服务器地址,端口,MM,ID均设置正常,注意数字的位数,发送字段是有长度校验的,错误的包长度会导致解析错误。
B:检查RS458 A端口 B端口是否接反
3 通讯数据格式混乱
A: 检查数据流模板是否被魔改了
参考资料
本文所提及的文档及工具资料包:
https://pan.baidu.com/s/15QICk163bI5NCB8M0SSDpA 提取码:a610
本文参考资料如下:
1 iRTU项目开源地址
https://github.com/hotdll/iRTU
2 UPWS项目开源地址
https://github.com/miuser00/UdpPlugWebsocket
3 LLC能跑Lua脚本的串口调试工具项目开源地址
https://github.com/chenxuuu/llcom
技术咨询方式
合宙Luat(稀饭放姜iRTU) QQ群:952343033
720DTU主控板购买链接
http://m.openluat.com/product/724
供电电源,串口转USB电缆,485转Uart小板均为淘宝公板电路,请自行选购。
谢谢您阅读本文,并祝您开发一切顺利