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

node.js のすべてのストリームと同様に、データの読み取りは、dataendの 2 つの個別のイベントで構成されます。

dataイベントは、一部のデータがストリームで読み取り可能になったときに発生します (この場合は 2 回)。

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 に答える
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 に答える