gps模块停止输出信息

时间:2018-08-03 20:36:52

标签: node.js gps serial-port uart at-command

为尽可能简洁,我正在连接由multitech制造的telit ME910c1-nv套接字调制解调器。并不是很重要,但是我知道有人会认为这个问题与硬件无关。

该设备同时具有4g cat m-1调制解调器和内置的gps模块。我通过UART将它们连接到树莓派。

问题在于,当我发送AT命令以获取GPS位置时,模块最终将停止发送和/或无法再从串行端口读取我的代码。

我正在使用节点js与模块进行通信,但是python也遇到了相同的问题。我在C语言中没有任何问题,这使我认为这是一个更高层次的编程问题和计时问题。

一个基本的例子是:

getGpsData=(modem, callback)=>{
   modem.write("AT$GPSACP\r");
   const timer = setTimeout( ()=>{
     callback(null);   
   }, 5000); //wait 5 sec before returning null
   modem.on('readable', readRaw=()=>{
     let data = modem.read();
     let output = "";
     if(data){
       data = data.toString();
       output += data;
       if(data.includes(escape_character)){ //escape character is "OK" or "ERROR"
         clearTimeout(timer);
         callback(output);
       }
     }
   });
}

//connect to serial port
modem = new serialport("/dev/serial0");
on.('connect', ()=>{
//on connect read gps data at constant interval
   setInterval(()=>{
     getGpsData(modem, (data)=>{
        modem.removeListener('readable', rawRead);
        console.log(data); 
     }
   }, 10000); //loop every 10 sec
});

运行此命令时,我将获得约10-20 gps的读数,然后显示所有null。当我停止代码并再次启动它时,它可以正常工作。有时它会运行一个小时或更长时间而没有任何问题,然后开始产生null值,并且永远无法恢复。如果我直接连接到调制解调器并发送AT指令,则根本不会遇到此问题。好像我的读取与其写入串行端口的模块不同步。

模块的输出为:

$gpsacp: "gpsdata..........."

OK

我得到空数据读取,因为它超时并且从不读取我的转义字符。有时我会得到“ OK”转义字符,并且还会得到空数据。 我已经多次重写命令和读取函数,但始终遇到相同的问题。任何人都知道为什么会这样或有类似的经历吗?

0 个答案:

没有答案