如何在JavaScript中输出变量rs232 hex命令

时间:2017-10-26 02:05:59

标签: javascript serial-port hex ascii

我一直在尝试编写JavaScript以通过串口向rs232发送可变音量命令。我让它以另一种方式工作,发送硬编码的十六进制命令并回读响应。写入rs232时遇到的问题似乎与我发送的内容中无法使用单个\斜杠有关。如果我发送硬编码的十六进制命令来设置它每次都有效。但是,当我尝试向此命令添加变量时,它会失败。我尝试了很多东西,包括使用双黑色斜线。这样做时输出看起来很好(使用单斜线),但RS232设备没有响应。

当发送硬编码命令时,它的工作原理的线索似乎是控制台将其输出为ASCII而不是HEX。所以我尝试以这种方式构造输出命令,但是当我这样做时,我得到了一个。在输出的每一端,我找不到原因,我也尝试删除它们无济于事。

在编程时,我非常喜欢业余/新手。我已经筋疲力尽了谷歌和论坛,我真的陷入困境。我已经尝试过如此多的代码迭代,但是这里是最新的,它很麻烦且效率低下我确定,但我真的只是在寻找一个有效的解决方案比最精致的。

一旦我完成这项工作,计划是在其周围构建一个家庭桥接插件,以启用homekit卷滑块。我相信这对于许多没有可联网的RS232电视家庭影院放大器的人来说会很有用。

控制台中下面代码的输出是HEX和ASCII的混合似乎如下:PC_01 \ x5d然而当它与硬编码版本一起工作时它是:PC_01]如上所述,如果我试图通过以下方式强制执行此操作转换变量' hexadded'到HEX我然后在控制台中得到PC_01]但它不起作用,如果我做一个串行循环,它显示它实际输出.PC_01]。

var SerialPort = require('serialport');
var port = new SerialPort('/dev/ttyAMA0', {
  baudRate: 38400
});

//this is hex number need to add as per manufacturers manual to get correct volume
hexnumin = 30;
//set desired volume number here
hexnumin2 = decToHex(45);
num = parseInt(hexnumin,16); //hex in
num2 = parseInt(hexnumin2,16); //hex in
var number = num; //decimal out
var number2 = num2; //decimal out

//addition to get correct num as per rs232 device manual
var hexaddansv = eval(number) + eval(number2);
var decaddans = (hexaddansv); //decimal 
var hexaddans = Number(hexaddansv).toString(16); //hex
var hexadded = '\\x' + hexaddans + '\x0d';
console.log('HexOut:', hexaddans);
console.log('HexOut2:', hexadded);

//Below works perfectly, but is of course just one volume setting 45
//datawrite = '\x50\x43\x5f\x30\x31\x5d\x0d';

//here is key problem
var datawrite = '\x50\x43\x5f\x30\x31'+hexadded;
console.log('Datawrite:', datawrite);

port.write(datawrite, function(err) {
  if (err) {
    return console.log('Error on write: ', err.message);
  }
  console.log('message written:', datawrite);
});

//dec to hex
function decToHex(dec) {
    return (dec + Math.pow(16, 6)).toString(16).substr(-2);
}

0 个答案:

没有答案