Получение заголовка данных через TCP IP-узел Красный - PullRequest
0 голосов
/ 23 ноября 2018

Я создаю программу для получения данных с 2D-сканера, которые отправляются через структуру данных ниже.Я сделал эту же программу в VBA, но теперь, когда я перехожу на Node Red, и я не знаю, как получить все данные из заголовка данных датчика в сети Node.

Ниже приведена фотографиязаголовок данных датчика.

заголовок данных:
data header

введите описание изображения здесь

введите описание изображения здесь

1 Ответ

0 голосов
/ 24 ноября 2018

Итак, в основном ваш вопрос заключается в том, как проанализировать / распаковать двоичные данные, поступающие с датчика, для получения значимой информации.Как обычно в Node-RED, есть два возможных пути: сделать это вручную или использовать какую-то существующую библиотеку, чтобы помочь вам.

Выполнение этого вручную потребует таких вещей, как: сохранить двоичные данные в буфере, используя узлы функций в Node-RED, чтобы разделить буфер на отдельные части (используя структуру протокола в качестве вашей карты), в конечном итоге экранируя символы(если этого требует протокол), подсчет контрольных сумм и т. д. Невозможно оказать вам дополнительную помощь, учитывая ограниченный объем информации, представленной в вашем сообщении.Однако вы, безусловно, найдете поддерживающее сообщество на форуме Node-RED , поэтому я призываю вас пойти туда за помощью.

Другой способ - воспользоваться существующимибиблиотеки.Это может замедлить вас, так как вам нужно исследовать библиотеки, выбрать одну и научиться ее использовать.Я могу попытаться помочь, предоставив некоторые ссылки для вашего чтения:

1- Узел Node-RED имеет узел для обработки двоичных данных (node-red-contrib-binary).Я никогда не использовал его, поэтому я не могу сказать вам, будет ли он предлагать все необходимые вам возможности.В общем, использование уже существующих узлов (из библиотеки Node-RED) - это более быстрый и безопасный способ работы.https://flows.nodered.org/node/node-red-contrib-binary

2- Дополнительные библиотеки, которые в конечном итоге можно было бы рассмотреть:

https://github.com/bigeasy/packet

https://github.com/substack/node-binary

https://github.com/jDataView/jBinary

https://www.npmjs.com/package/binary-parser-encoder

https://www.npmjs.com/package/protobufjs

Редактировать: Допустим, вы решили использовать двоичный кодер-анализатор модуля npm.Ядром вашего потока будет отдельный функциональный узел с этим кодом (проверено нормально со случайными данными):

var Packet = global.get('binary_parser');
var buf = msg.payload;

var typea = new Packet()
  .endianess("little")
  .uint16("magic")
  .uint16("packet_type")
  .uint32("packet_size")
  .uint16("header_size")
  .uint16("scan_number")
  .uint16("packet_number")
  .double("timestamp_raw")
  .double("timestamp_syncw")
  .uint32("status_flags")
  .uint32("scan_frequencye")
  .uint16("num_points_scan")
  .uint16("num_points_packet")
  .uint16("first_index")
  .uint32("first_angle")
  .uint32("angular_increment")
  .uint32("iq_input")
  .uint32("iq_overload")
  .double("iq_timestamp_raw")
  .double("iq_timestamp_sync")
  .uint8("header_padding");

msg.payload = typea.parse(buf);
return msg;
...