通过TCP IP节点接收数据头红色

时间:2018-11-23 16:41:27

标签: tcp node-red

我正在编写一个程序,以通过以下数据结构从2D扫描仪接收数据。 我已经在VBA中完成了相同的程序,但是现在我迁移到了Node Red,并且我不知道如何从Node Network的传感器数据头中获取每个数据。

下面是传感器手册数据标题的照片。

数据头:
data header

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:0)

因此,基本上,您的问题是如何解析/解压缩来自传感器的二进制数据以检索有意义的信息。在Node-RED中很正常,有两种可能的路径:手动完成或使用一些现有的库来帮助您。

手动执行操作将需要以下操作:将二进制数据存储到缓冲区中,使用Node-RED中的功能节点将缓冲区切成单独的片段(使用协议结构作为映射),最终转义字符(如果需要)根据协议),计算校验和等。鉴于您的帖子中提供的信息稀少,因此无法进一步帮助您。但是,您肯定会在Node-RED forum中找到一个支持社区,所以我鼓励您to go there寻求帮助。

另一种方法是利用现有库。这可能会减慢您的速度,因为您需要研究图书馆,选择一个图书馆并学习如何使用它。我可以尝试通过提供一些阅读链接来帮助您:

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模块binary-parser-encoder。您的流程的核心将是具有以下代码的单个功能节点(已通过随机数据测试正常):

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;