#javascript #node.js #serial-port #hex
#javascript #node.js #последовательный порт #шестнадцатеричное
Вопрос:
Я пытаюсь связаться со старой машиной, используя node.js / electron и RS232C. Базовая связь работает, но машина будет принимать только байты, которым предшествует 0x.
var buffer = new Buffer([0x59]);
port.write(buffer);
будет работать, и команда будет выполнена, однако:
var buffer = new Buffer([59]);
port.write(buffer);
приведет к зависанию компьютера.
Моя проблема в том, что я пытаюсь динамически создавать байты, а машина продолжает зависать. С помощью анализатора портов я вижу, что отправляется 59, к сожалению, анализатор отображает 59 как для 0x59, так и для 59.
Мой код:
var bufferHead = new Buffer([0x06,0x02]);
var bufferHead2 = new Buffer([0x30,0x41,0x46,0x4C]);
var bufferData = new Buffer([0x4E,0x45,0x57,0x54,0x45,0x58,0x7E,0x31,0x2E,0x54,0x58,0x54,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x30,0x20,0x32,0x30,0x2D,0x31,0x30,0x2D,0x32,0x30,0x20,0x20,0x20,0x37,0x48,0x33,0x30,0x4D,0x0D]);
var bufferFoot = new Buffer([0x03]);
var bufferNum=0;
var preBuffer = Buffer.concat([bufferHead2, bufferData, bufferFoot]);
for (let x of preBuffer) {
bufferNum = bufferNum ^ x;
}
var finalBuffer = Buffer.concat([bufferHead, preBuffer, new Buffer([parseInt(bufferNum.toString(16))])]);
port.write(finalBuffer);
Теперь почти все байты жестко закодированы, но, наконец, все должно быть динамичным.
Как я могу добавить 0x, чтобы создать байт, идентичный жестко закодированному?
Есть много сообщений, в которых говорится, что 0x не требуется, но, похоже, это в моем случае, если в моем коде нет ошибки.
Приветствуется любая помощь в поиске решения.
Ответ №1:
после целого дня попыток в течение 10 минут после публикации я понял это. в моем parseInt отсутствует 16-й радиус
new Buffer([parseInt(bufferNum.toString(16))])]
должно быть
new Buffer([parseInt(bufferNum.toString(16),16)])]
Надеюсь, этот или какой-то другой код будет кому-то полезен.