Я делаю конечный автомат, используя NodeJS, используя последовательный порт, который мне нужен, чтобы получить и отправить серию команд для проверки правильности связи, во втором состоянии я получаю 31 байт данных и мне нужно отправить их на мой четвертое состояние, для этого я просто копирую полученный массив, чтобы отправить его позже, но в моем четвертом состоянии console.log ничего не показывает, что может происходить?
Вот мой код:
const SerialPort = require('serialport');
const ByteLength = SerialPort.parsers.ByteLength;
const port = new SerialPort("COM6");
const parser = new ByteLength({length: 1});
port.pipe(parser);
var state = 0;
var cache = [];
var history;
parser.on('data', function (data) {
cache.push(data[0]);
flowcontrol();
});
function porterr() {
console.log('error');
process.exit(1);
}
function flowcontrol() {
switch (state) {
case 0:
// ---------------------------------------------
// State 0 -> Recives ENQ, Sends ACK
// ---------------------------------------------
// Receives 1 byte
if (cache.length !== 1) {
return;
}
// Verify answer received
if (cache[0] !== 5) {
// Wrong answer received
porterr();
}
console.log('state ' + state);
// Sends Answer, clears cache, and waits for next state
port.write(Buffer.from([6]));
state++;
cache.length = 0;
break;
case 1:
// ---------------------------------------------
// State 1 -> Recives DATA, Sends ACK
// ---------------------------------------------
// Receives 31 bytes
if (cache.length !== 31) {
return;
}
console.log('state ' + state);
history = cache; // <--- data is saved for later use
// Sends Answer, clears cache, and waits for next state
port.write(Buffer.from([6]));
state++;
cache.length = 0;
break;
case 2:
// ---------------------------------------------
// State 1 -> Recives EOT, Sends ENQ
// ---------------------------------------------
// Receives 1 byte
if (cache.length !== 1) {
return;
}
// Verify answer received
if (cache[0] !== 4) {
// Wrong answer received
porterr();
}
console.log('state ' + state);
// Sends Answer, clears cache, and waits for next state
port.write(Buffer.from([5]));
state++;
cache.length = 0;
break;
case 3:
// ---------------------------------------------
// State 3 -> Recives ACK, Sends DATA
// ---------------------------------------------
// Receives 1 byte
if (cache.length !== 1) {
return;
}
// Verify answer received
if (cache[0] !== 6) {
// Wrong answer received
porterr();
}
console.log('state ' + state);
console.log[history]; // <-- Nothing is shown here!!!
// Sends Answer, clears cache, and waits for next state
//port.write(Buffer.from(history));
//state++;
//cache.length = 0;
break;
default:
console.log('not yet completed');
console.log(cache.length);
break;
}
}