NodeJS, асинхронная последовательная запись и обработка сообщений

Я борюсь с последовательной связью в узле JS. Я использую функцию записи из этой библиотеки, которая является асинхронной.

Итак, подведем итог моего кода:

const SERIAL_INTERVAL = 1; //as fast as possible

var raspi = require('raspi');
var Serial = require('raspi-serial').Serial;
var ci = require('correcting-interval');

var datas = [];

raspi.init(function() {

  serial = new Serial();

  serial.open(function() {
        process.send({SS: 'ready'});
        process.on('message', function(m) {
            if (m.datas) { //new incoming data from main process
                datas = m.datas;
            }
        });

ci.setCorrectingInterval(function() {
        if(datas.length>0){
         serial.write(datas[dataIndex].data)
         dataIndex++;
         dataIndex = dataIndex%datas.length;
        }, SERIAL_INTERVAL);

Сообщения поступают из основного процесса и представляют собой большой массив из 45 * 4-байтовых массивов. При вызове serial возвращается 4-байтовый массив, отправленный основным процессом. Когда последовательный порт поступает в HC12 (RF-модуль), предполагается, что процесс будет продолжать отправлять одни и те же данные навсегда, чтобы иметь дело с непереданными пакетами.

serial.write (Данные [dataIndex].data)

Все это прекрасно работает, за исключением того, что оно ускоряет рост памяти и задержка между отправкой новых команд процессу и их последовательной передачей является худшей и худшей. Приложение должно быть в реальном времени, поэтому оно довольно плохое. Если я увеличу задержку интервала, переданного setIntervalвыглядит лучше, но не реагирует вообще. Мы попытались setCorrectingIntervalбез лучших результатов.

У кого-нибудь есть предложение разобраться с этим?

0 ответов

Другие вопросы по тегам