2016-12-16 53 views
1

在labview中有一個程序正在發送UDP數據包並使用php程序接收這些數據包。所以labview程序是發送者,php程序是接收者。將從Labview程序收到的類型轉換數組轉換爲浮點數組使用php

在labview程序中,浮點數組使用類型轉換功能塊類型轉換爲字符串並作爲UDP數據包發送。當使用php接收這些數據包時,我收到一些數據不可讀。

enter image description here

我曾嘗試使用array_map(「floatval」,$陣列)字符串數組轉換成浮點陣列。但是仍然值不處於可讀格式的到來。

請幫我解決這個問題。

+1

也許如果您向我們展示了一段好的數據和一段糟糕的數據,我們可以提供更多的幫助 – RiggsFolly

+0

還有正在使用的代碼代碼 – RiggsFolly

+2

floatval使用64位IEEE數據點。你已經使用了一個32位IEEE浮點數的LabVIEW SGL。並考慮數據的端到端性。 –

回答

0

另外,數據的不可讀部分可能是由UDP功能添加的標題信息。您可能能夠解析該數據並放棄。

要嘗試的另一件事是讀取Labview中的UDP Rx數據,並與Tx數據進行比較以嘗試識別發生了什麼。

+0

我試圖用labview接收數據包。在這種情況下,如果我再次在接收程序中使用類型轉換功能塊,那麼我將以可讀格式獲取數據。否則它會出現不可讀的格式。 – uddipana

2

LabVIEW幫助Type Cast指向flattened data的文檔,其中提到表示是big-endian(最重要的字節在前)。在How LabVIEW Stores Data in Memory的條目顯示的單精度的實際表示浮點數(SGL):

SGL representation

現在你知道什麼是LabVIEW是發送,你的問題就變成了如何這種在PHP解碼 - 如果你不能自己解決這個問題,我建議問一個新問題。

如果您可以更改LabVIEW代碼,您可以更改數據的發送格式,以便於在另一端進行解碼。可能的選項有可能包括:

  • 如果網絡帶寬不是問題,使用標準的基於文本的格式,如JSON
  • 如果JSON是太大,但你能負擔得起八個字節每個值,轉換爲DBL - 在壓扁爲字符串之前,使用數字調色板中的轉換「項目符號」,然後在LabVIEW末尾將字符串的字節重新排序爲小端。從Ton Plomp的評論來看,這對您當前的PHP代碼可能是正確的。
  • 如果您確實無法承受每個值超過四個字節,但您的數據值範圍不太寬,可以在展平之前將它們縮放爲整數值(U32I32);再次,這可能更容易在另一端進行解碼。

請注意,儘管從Type Cast和/或Flatten轉換爲String的數據格式是有記錄的,並且歷史上一直保持穩定,但我不認爲絕對保證不會在LabVIEW版本之間進行更改。