2017-09-13 136 views
0

我有一個關於從SPS與Labview讀取數據類型時遇到的問題。Labview將編號解釋爲浮點數

S7 read

我得到32位整數值的一維數組出S7Read_VI我有那些值是在SPS類型REAL來interprete作爲浮點值。

Labview顯示我這樣的數字:1131655987這應該是243.7(當解釋爲浮點數時)。

s7Read_VI也提供REAL類型的讀取,但不知何故,這是行不通的(有些同事也注意到了這個問題)。

我現在試圖將這些數字(1131655987)解釋爲labview中的浮點數,並且到目前爲止還沒有提出有效的解決方案。

是否和我有一個想法如何我可以將一個十進制數解釋爲一個浮點數?像圖片中所示的SGL轉換,我相信沒有意義,因爲numner已經浮動並且只顯示爲十進制。

最好的問候, jonnyx

+2

'1131655987'是一個32位整數。如果你將這個值(32位)解釋爲一個32位的浮點數,你確實會得到'243.7'(我剛剛檢查過這個)。不過,我不知道如何將這樣一個整數放在Labview中。在帕斯卡,這將是'IntValue:= 1131655987; myFloat:= PSingle(@Intvalue)^;',在C中(可能是UB,雖然):'int invalue = 1131655987; float'myfloat = *((float *)(void *)&intvalue);' –

+0

是的,對於那些想知道的人,'1131655987'是十六進制的'4373B333',你可以通過一個浮點轉換器在網上找到,例如: [鏈接](https://www.h-schmidt.net/FloatConverter/IEEE754de.html) – jonnyx

回答

3

To Single Precision節點是陣列的每個元件上的轉換運算符。它不會將數組重新解釋爲單精度值的數組。如果要重新解釋數組作爲單精度值,使用在單個恆定的陣列的Type Cast功能和線的類型(中心)終端,將陣列與x(左手)終端:
TypeCast

0

我做了什麼,以解決我的問題是從REAL改變數據類型的SPS爲DWORD。

L value_REAL*1000 //REAL value like 243.7 RND T value_DWORD //now DWORD but accuracy not lost: 243700

然後我就看在我的LabVIEW值和1000

希望任何人都可以獲利的是他們分開。 問候, jonnyx

相關問題