在labview中有一個程序正在發送UDP數據包並使用php程序接收這些數據包。所以labview程序是發送者,php程序是接收者。將從Labview程序收到的類型轉換數組轉換爲浮點數組使用php
在labview程序中,浮點數組使用類型轉換功能塊類型轉換爲字符串並作爲UDP數據包發送。當使用php接收這些數據包時,我收到一些數據不可讀。
我曾嘗試使用array_map(「floatval」,$陣列)字符串數組轉換成浮點陣列。但是仍然值不處於可讀格式的到來。
請幫我解決這個問題。
在labview中有一個程序正在發送UDP數據包並使用php程序接收這些數據包。所以labview程序是發送者,php程序是接收者。將從Labview程序收到的類型轉換數組轉換爲浮點數組使用php
在labview程序中,浮點數組使用類型轉換功能塊類型轉換爲字符串並作爲UDP數據包發送。當使用php接收這些數據包時,我收到一些數據不可讀。
我曾嘗試使用array_map(「floatval」,$陣列)字符串數組轉換成浮點陣列。但是仍然值不處於可讀格式的到來。
請幫我解決這個問題。
另外,數據的不可讀部分可能是由UDP功能添加的標題信息。您可能能夠解析該數據並放棄。
要嘗試的另一件事是讀取Labview中的UDP Rx數據,並與Tx數據進行比較以嘗試識別發生了什麼。
我試圖用labview接收數據包。在這種情況下,如果我再次在接收程序中使用類型轉換功能塊,那麼我將以可讀格式獲取數據。否則它會出現不可讀的格式。 – uddipana
LabVIEW幫助Type Cast指向flattened data的文檔,其中提到表示是big-endian(最重要的字節在前)。在How LabVIEW Stores Data in Memory的條目顯示的單精度的實際表示浮點數(SGL
):
現在你知道什麼是LabVIEW是發送,你的問題就變成了如何這種在PHP解碼 - 如果你不能自己解決這個問題,我建議問一個新問題。
如果您可以更改LabVIEW代碼,您可以更改數據的發送格式,以便於在另一端進行解碼。可能的選項有可能包括:
DBL
- 在壓扁爲字符串之前,使用數字調色板中的轉換「項目符號」,然後在LabVIEW末尾將字符串的字節重新排序爲小端。從Ton Plomp的評論來看,這對您當前的PHP代碼可能是正確的。U32
或I32
);再次,這可能更容易在另一端進行解碼。請注意,儘管從Type Cast和/或Flatten轉換爲String的數據格式是有記錄的,並且歷史上一直保持穩定,但我不認爲絕對保證不會在LabVIEW版本之間進行更改。
也許如果您向我們展示了一段好的數據和一段糟糕的數據,我們可以提供更多的幫助 – RiggsFolly
還有正在使用的代碼代碼 – RiggsFolly
floatval使用64位IEEE數據點。你已經使用了一個32位IEEE浮點數的LabVIEW SGL。並考慮數據的端到端性。 –