请教个问题,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)
离线
再次测试。pc通过串口助手向air724的串口发送了717帧,总数据10755字节。
air724 程序里通过log.info() 打印出了724接收的帧数量,也显示接收了717帧。
通过mqtt发送出去后,mqtt服务器统计到的是706帧。
mqtt客户端收到的是也是706帧,总数据10590字节。
看来,串口接收这里是没问题的,只是串口任务里通过消息将数据传到mqtt任务,再通过mqtt发送出去,这个过程有问题。
离线
试过串口助手向air724的串口发送数据,发送周期试过50ms,就是上边的结果发送600帧左右,mqtt再发出来,丢失10帧左右。
如果发送周期调整为25ms,则发送600帧,丢失300帧左右。
发送周期调整为100ms,发送600帧,丢失1帧。
感觉像是消息传递的问题,消耗速度慢于生产速度。
我是这样传递数据的,串口任务里将数据作为消息的参数发送出去,这样操作是不是会额外占用了过多开销?
想过该成消息里不带参数,串口发消息前,将接收数据存入全局列表里,mqtt任务收到消息再从全局列表里取。但是感觉这样顺序是不是可能会乱?本来打算是做应答通讯的。
试过irt固件,配置为串口透传,测试结果也是会丢数据,在50ms的发送周期下。
离线