我在运行 Ubuntu mate 的 Raspberry PI 2 上使用 node-serialport(版本 2.0.6)。我有一根 USB 转串行电缆连接到 RP 的 USB 端口,名称为 \dev\ttyUSB0。我正在尝试使用名为 PHP(不是编程语言)的协议与旧的串行设备通信。使用 minicom 时,串行通信工作得很好。
在 minicom 中,我可以输入字符串;402'\PT\GC1.FE02:CV'980B
,后跟回车,设备返回'=CV65204E0000A30'
。这是正确的反应。
当我运行 node.js 程序(版本 4.3.1)时,我只得到部分数据。零件每次都在变化。例如,我会得到4E0000A
一次3D0
又一次。 3D0
很有趣,因为返回消息中应该没有D
。
/*jslint node : true, bitwise: true, esnext: true, vars: true, plusplus: true, devel: true, nomen: true, indent: 4, maxerr: 50, globalstrict: $
"use strict";
var SerialPort = require("serialport").SerialPort;
var serialPort = new SerialPort("/dev/ttyUSB0", {
baudrate: 9600,
databits: 8,
parity: 'none',
stopbits: 1,
flowcontrol: false
});
serialPort.on("open", function () {
console.log('open');
serialPort.on('data', function(data) {
console.log('data received: ' + data);
});
var bytesToSend = ";402'\\PT\\GC1.FE02:CV'980B\r";
console.log("sending:",bytesToSend);
serialPort.write(bytesToSend, function(err, results) {
serialPort.drain();
if (err) {
console.log('err ' + err);
}
console.log('results ' + results);
});
});
下面的实际输出(应该返回'=CV65204E0000A30'
)
tvann@tvann-pi2:~/node/serial$ node app
open
sending: ;402'\PT\GC1.FE02:CV'980B
results 26
data received: 00A
^C
tvann@tvann-pi2:~/node/serial$ node app
open
sending: ;402'\PT\GC1.FE02:CV'980B
results 26
data received: 65
data received: 0000A3
data received: D0
^C
tvann@tvann-pi2:~/node/serial$ node app
open
sending: ;402'\PT\GC1.FE02:CV'980B
results 26
data received: A
data received: 3D0
^C
tvann@tvann-pi2:~/node/serial$ node app
open
sending: ;402'\PT\GC1.FE02:CV'980B
results 26
data received: 4E
^C
tvann@tvann-pi2:~/node/serial$ node app
open
sending: ;402'\PT\GC1.FE02:CV'980B
results 26
data received: 4E0000A
我还有一个程序变体,它以 Uint8Array 的形式发送数据。结果完全一样。