NodeJS和node-serialport我在编写

时间:2016-03-03 09:28:55

标签: node.js serial-port node-serialport

我无法通过RS232串行连接向RFID阅读器发送命令。我可以连接到阅读器并向其发送消息,但我没有得到任何回复。

在读者的documentation中,我可以找到这个问题的可能解释(第16页):

如果协议帧出现故障,读者无法回复。

以下信息可用于协议帧格式:

enter image description here

这样就可以使用十六进制的0x02 0x00 0x09 0x00 0xB0 0x01 0x00 0xCA 0x86作为清单(获取范围内的所有标记)命令。

我100%确定阅读器正常工作且串口设置正确,但我不确定我是否以正确的方式使用缓冲区。

这就是我目前的代码:

settings.json

{
  "serialport":"COM3",
  "baudrate":38400
}

app.js

var settings = require('./settings');
var serialport= require('serialport');
var SerialPort = serialport.SerialPort;

var inventorycommand = new Buffer([0x02,0x00,0x09,0x00,0xB0,0x01,0x00,0xCA,0x86],'hex');

var serialconnection = new SerialPort(settings.serialport,{baudRate:settings.baudrate,parity:'even',encoding:'hex'},false);

serialconnection.open(portOpened);

function portOpened(err) {
    if(err)console.log('ERR: '+ err);
    console.log('serial port opened: '+ settings.serialport+' with baudrate '+ settings.baudrate);

    setTimeout(function(){
        serialconnection.write(inventorycommand.toString('hex'));
        console.log(inventorycommand.toString('hex'));
    },1000);


    serialconnection.on('data',dataReceived);
    serialconnection.on('close', portClosed);
    serialconnection.on('error',errorReceived);

    function dataReceived(data) {
        console.log('data received: ' +data);
    }

    function portClosed() {
        console.log('port closed.')
    }

    function errorReceived(err) {
        console.log('error: ' + err);
    }
}

1 个答案:

答案 0 :(得分:3)

似乎在write()函数调用中添加回调函数可以解决问题。

serialconnection.write(inventorycommand,function(err,result){
            if(err){
                console.log('ERR: ' + err);
            }
            console.log('result:' + result)
        });