稀饭放姜 iRTU 学习日记 (2):实现最基本的一个应用-RS485透传

openluat Air720D 4G DTU主控板 是由合宙开源社区技术专家“稀饭放姜”设计,上海合宙物联网公司推出的一款移动2G/4G 双模DTU产品。只需要加上壳子就成为一个性能优秀的DTU产品。今天的学习日记里面,我将尝试使用iRTU 配合另一个开源小项目UPWS做一个最基本的工业应用案例:RS485数据双向透传。

基本功能:

通过一个手机浏览器和iRTU的485端口建立透传连接,可以互相透明传输文本或者二进制数据。

实现原理

  1. 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串口调试工具建立起双向的文本命令传输,传输支持中文和英文。

下面是硬件连线示意图

硬件连接具体步骤

器材准备

  1. Air720D 4G DTU主控板+2G/4G全频段天线

2)RS485转UART小板+USB转串口线

  1. USB 5V电源+ USB线

  1. DTU供电连接线两根+RS485传输线一盘

  2. 手机一部+电脑一部 (很普通,就不拍照了)

连接方式如下

电路连接好后,将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小板均为淘宝公板电路,请自行选购。

谢谢您阅读本文,并祝您开发一切顺利

上次更新 2021-01-28