【问题标题】:Converting the type casted array received from Labview program into float array using php使用php将从Labview程序接收到的类型转换数组转换为浮点数组
【发布时间】:2016-12-16 10:47:57
【问题描述】:

我在 labview 中有一个程序,它发送 UDP 数据包并使用 php 程序接收这些数据包。所以labview程序是发送者,php程序是接收者。

在labview 程序中,浮点数组使用类型转换功能块被类型转换为字符串,并作为UDP 数据包发送。在使用 php 接收这些数据包时,我收到了一些不可读格式的数据。

我尝试使用 array_map ('floatval', $array) 将字符串数组转换为浮点数组。但值仍然不是可读格式。

请帮我解决这个问题。

【问题讨论】:

  • 如果您向我们展示一个好的数据和一个坏的数据,我们可能会提供更多帮助
  • 还有用于处理它的代码
  • floatval 使用 64 位 IEEE 数据点。您使用的是 32 位 IEEE 浮点数的 LabVIEW SGL。然后考虑数据的字节序。

标签: php arrays labview


【解决方案1】:

Type Cast 的 LabVIEW 帮助将您指向flattened data 上的文档,其中提到该表示是大端(最高有效字节在前)。 How LabVIEW Stores Data in Memory 上的条目显示了单精度浮点数 (SGL) 的实际表示:

既然您知道 LabVIEW 发送的是什么,那么您的问题就变成了如何在 PHP 中对其进行解码 - 如果您自己无法解决这个问题,我建议您提出一个新问题。

如果您可以更改 LabVIEW 代码,您可以更改发送数据的格式,以便在另一端更容易解码。可能的选项可能包括:

  • 如果网络带宽不是问题,请使用基于文本的标准格式,例如JSON
  • 如果 JSON 太大,但每个值可以承受 8 个字节,请转换为 DBL - 使用数字调色板中的转换“项目符号” - 在展平为字符串之前,然后将字符串的字节重新排序为 little-endian在 LabVIEW 端。根据 Ton Plomp 的评论,这对于您当前的 PHP 代码可能是正确的。
  • 如果你真的不能承受每个值超过四个字节,但你的数据值的范围不是太宽,你可以在展平之前将它们缩放为整数值(U32I32);同样,这可能更容易在另一端解码。

请注意,尽管您从 Type Cast 和/或 Flatten to String 获得的数据格式已记录在案并且在历史上一直很稳定,但我不认为绝对保证不会在 LabVIEW 版本之间发生变化。

【讨论】:

    【解决方案2】:

    数据的不可读部分也可能是 UDP 函数添加的标头信息。您也许可以解析该数据并丢弃。

    要尝试的另一件事是在 Labview 中读取 UDP Rx 数据并与 Tx 数据进行比较以尝试确定发生了什么。

    【讨论】:

    • 我尝试使用labview接收数据包。在这种情况下,如果我再次在接收程序中使用类型转换功能块,那么我将获得可读格式的数据。否则它会以不可读的格式出现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-20
    • 2021-11-13
    • 1970-01-01
    • 2019-07-05
    相关资源
    最近更新 更多