1

我在 ubantu 上连接 了 wavecom GSM 调制解调器。我使用 node.js 语言与 GSM 调制解调器进行通信。我通过Child Process向调制解调器发送命令。这里的例子

var spawn         = require("child_process").spawn,
    exec          = require('child_process').exec;

 // Write dev_ttyUSB15.tmp file
 var child = exec('cat < /dev/ttyUSB15 > /tmp/dev_ttyUSB15.tmp');

 // Read dev_ttyUSB15.tmp file
 var m1 = spawn('tail',['-f','/tmp/dev_ttyUSB15.tmp']);

 // on data event is emitted when dev_ttyUSB15.tmp file has some data 
 m1.stdout.on('data', function (data) {
     console.log("Data : "+data); // this is executed as output
 });

现在,当我在端口 /dev/ttyUSB15 上触发某些命令时,我无法正确获得输出。

例如

假设我的输出应该是

Data : abcd1234

但我得到的不是它

Data : abc
Data : d1234

简而言之,我的输出被破坏了。我无法从我的输出完全中断的地方推断出来。这是随机的。谁能给我任何想法?

提前致谢。

4

2 回答 2

1

很难说不知道您正在与调制解调器交谈什么协议,但如果它是例如\n分隔的,您将不得不缓冲数据并拆分\n

var buffer = '';
m1.stdout.on('data', function(data) {
    var received = (buffer + data).split('\n');
    buffer = received.pop().trim();
    console.log(received.join(''));
});
于 2012-03-21T16:39:40.187 回答
1

与 node.js 中的所有流一样,数据的读取由 2 个独立的事件组成:dataend

当流中的某些数据可读(在您的情况下为两次)时,将触发data事件。

当不再触发数据事件时触发end事件。

var blob = "";
m1.stdout.on('data', function (data) {
 blob += data;
});

m1.stdout.on('end', function () {
 console.log("Data : " + blob); // here you have all the data within one variable
});
于 2012-03-21T09:50:44.920 回答