关于linux下NB模块AT指令接收方式的思考与疑问
移远bc28模块,对接电信NB平台;arm向模块发送AT指令,对于接收到的模块应答,每条应答都不大一样,而且接收到的应答条数也不同,造成接收的时候不大好处理。
具体举例如下:
正常通讯情况下:
arm->模块:AT+NMGS=5,0102030405;(某数据上报指令)
模块->arm:①: AT+NMGS=5,0102030405; (模块应答的指令回显)
②:OK; (模块的应答)
//应答②、③间会有1~3秒的延迟(电信服务器延迟)
③:+NNMI:4,AAAA0000 (服务器应答)
异常通讯情况下:
arm->模块:AT+NMGS=5,010203040506;(某数据上报指令,指令错误)
模块->arm:①: AT+NMGS=5,010203040506; (模块应答的指令回显)
②:ERROR; (模块的应答)
针对以上情况:接收方式如下:
1、采用read()+串口超时的方式;
设置该条指令应答的超时时间为5s(>3s);一次性接收到(①②③)所有的应答指令,然后统一处理;
但是这种方式指令接收时间太长,效率低;而且对于错误指令,同样需要等待5s。
2、采用getline()/fgets()函数一行一行接收;
每接收一行则写到buffer中,所有的接收完成之后,对buffer统一进行处理;
但是这种方式接收的时候并不知道需要接收多少行,即不知道需要调用多少次getline();
两种方式都存在问题,不知道有没有其他更好的办法? 对模块的指令进行封装,串口接收使用select机制,把数据放到环形队列 我目前单片机是按第一种方式处理的。反正他也不干其它的事情。慢点就慢点吧。 对了。请教一下: ③:+NNMI:4,AAAA0000 (服务器应答)这一句是电信平台下发的数据还是你自己的平台下发的数据,如果是电信的平台,是自动应答的吗?如何设置自动应答?谢谢。 dongwang_fl 发表于 2019-4-8 14:31
对了。请教一下: ③:+NNMI:4,AAAA0000 (服务器应答)这一句是电信平台下发的数据还是你自己的 ...
电信平台自动下发的,编解码插件->新增消息->勾选添加响应字段 wq_601840968 发表于 2019-4-8 15:19
电信平台自动下发的,编解码插件->新增消息->勾选添加响应字段
找到了。谢谢。 广轻电气091 发表于 2019-4-8 13:49
对模块的指令进行封装,串口接收使用select机制,把数据放到环形队列
没大明白,能详细说下吗
页:
[1]