您尚未登录。

楼主 # 2023-04-21 10:36:12

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,212
积分: 1148.5

air724 luat编程,串口收到数据然后通过mqtt发出去,在串口收发频率比较高的情况下,偶尔会丢失数据。

请教个问题,air724,目前主要运行两个任务:
1,串口任务,不停的读取一个字节数据进行处理,空闲超时后将收到的字符串作为参数发送消息;
2,mqtt任务,mqtt接收等待,等到串口任务发送过来的消息后,将得到的参数通过mqtt发送出去。

发送频率低的情况下没问题。发送频率高,就有丢的现象。在9600波特率,50ms自动发送的情况下,每次发送15个字节,发送几百条可能就丢一条。

尝试串口任务里收到数据,空闲超时后,不发送消息,只是将串口接收累计条数打印出来。发现,这种情况下,串口接收是没问题的。发送频率再高一倍也没事。

搞不清问题出在哪里,是串口任务发送消息太频繁,mqtt任务没处理过来?还是说mqtt任务发送时,影响了串口任务的接收,使串口任务少接收了?

--------------------------

刚测试的数据,每50ms发送15字节,发送了12180字节,计812帧。看了下mqtt服务器统计,只收到了810帧。
另一个mqtt客户端总计收到了12150字节,就是少了2帧。

最近编辑记录 Gentlepig (2023-04-21 11:00:49)

离线

楼主 #1 2023-04-21 14:05:24

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,212
积分: 1148.5

Re: air724 luat编程,串口收到数据然后通过mqtt发出去,在串口收发频率比较高的情况下,偶尔会丢失数据。

再次测试。pc通过串口助手向air724的串口发送了717帧,总数据10755字节。
air724  程序里通过log.info() 打印出了724接收的帧数量,也显示接收了717帧。

通过mqtt发送出去后,mqtt服务器统计到的是706帧。
mqtt客户端收到的是也是706帧,总数据10590字节。

看来,串口接收这里是没问题的,只是串口任务里通过消息将数据传到mqtt任务,再通过mqtt发送出去,这个过程有问题。

离线

楼主 #2 2023-04-24 14:53:24

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,212
积分: 1148.5

Re: air724 luat编程,串口收到数据然后通过mqtt发出去,在串口收发频率比较高的情况下,偶尔会丢失数据。

试过串口助手向air724的串口发送数据,发送周期试过50ms,就是上边的结果发送600帧左右,mqtt再发出来,丢失10帧左右。
如果发送周期调整为25ms,则发送600帧,丢失300帧左右。
发送周期调整为100ms,发送600帧,丢失1帧。

感觉像是消息传递的问题,消耗速度慢于生产速度。
我是这样传递数据的,串口任务里将数据作为消息的参数发送出去,这样操作是不是会额外占用了过多开销?
想过该成消息里不带参数,串口发消息前,将接收数据存入全局列表里,mqtt任务收到消息再从全局列表里取。但是感觉这样顺序是不是可能会乱?本来打算是做应答通讯的。

试过irt固件,配置为串口透传,测试结果也是会丢数据,在50ms的发送周期下。

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn