yd031wcy
級別: 探索解密
|
圖片:
圖片:
圖片:
各位前輩好 我使用MX 控件讀取FX3S中浮點數遇到了一些問題,懇請前輩指導 1.我使用c#調用 ReadDeviceBlock2("D0",2, out arr[0])方法讀取D0中小數 為何都是16320呢 ? 2.當DMOV k7000 D2 時 只要是用到兩個寄存器 都不對 這個應該怎么換算呢 接受被噴 畢竟太菜了 虛心請教 |
---|---|
|
yd031wcy
級別: 探索解密
|
我試過INT16 32感覺都不對 這個好像是基礎知識全忘記了 可以告訴我怎么修改嗎 |
---|---|
|
不小心遇見你
自動項目、PLC、視覺、通訊等工控軟件開發QQ3515716
級別: 工控俠客
|
因為你是浮點數 轉成浮點數就好了 |
|
---|---|---|
|
yd031wcy
級別: 探索解密
|
short[] arr = new short[2]; float[] b = new float[arr.Length]; int rtn= com.ReadDeviceBlock2("D0",2, out arr[0]); for (int ia= 0; a < arr.Length; a++) { b[a] = (float)arr[a]; } 我這樣輸出的還是一樣的 我很懵逼 |
---|---|
|
不小心遇見你
自動項目、PLC、視覺、通訊等工控軟件開發QQ3515716
級別: 工控俠客
|
圖片:
暈倒 我說你那D0 D1是浮點數 你以整型讀出來了,所以要在二進制上或者十六機制上轉換,不是整型轉浮點型 [ 此帖被030403118在2018-11-12 08:09重新編輯 ] |
|
---|---|---|
|
instanttw
級別: 探索解密
|
IEEE754:基本觀念 BitConverter.GetBytes、BitConverter.ToSingle:本問題核心,您的場合不應使用型別轉換 Endianness、Array.Reverse:補充資料 |
---|---|
|
不小心遇見你
自動項目、PLC、視覺、通訊等工控軟件開發QQ3515716
級別: 工控俠客
|
代碼給你 拿走吧 //第一種方法: short D0 = 0; short D1 = 16320; byte[] L = System.BitConverter.GetBytes(D0); byte[] H = System.BitConverter.GetBytes(D1); byte[] f = new byte[H.Length + L.Length]; Buffer.BlockCopy(L, 0, f, 0, L.Length); Buffer.BlockCopy(H, 0, f, L.Length, H.Length); float FF = BitConverter.ToSingle(f, 0); textBox1.Text = "結果應該是:" + FF.ToString(); //第二種方法: int HH=0; short D0 = 0; short D1 = 16320; HH |= (D1 & 0x0000ffff); HH = (HH << 16) | (D0 & 0x0000ffff); byte[] intBuff = BitConverter.GetBytes (HH); float FF = BitConverter.ToSingle(intBuff, 0); textBox1.Text = "結果應該是:" + FF.ToString(); |
|
---|---|---|
|
yd031wcy
級別: 探索解密
|
謝謝 前輩 |
---|---|
|
yd031wcy
級別: 探索解密
|
謝謝前輩 真心非常感謝 想給你打個賞 給個途徑 |
---|---|
|
不小心遇見你
自動項目、PLC、視覺、通訊等工控軟件開發QQ3515716
級別: 工控俠客
|
不用了 謝謝 |
|
---|---|---|
|