newtlk
級別: 探索解密
|
大家好, 我是ifix新手, 請教一下: 我已用ifix的 MBE 驅動讀取到一臺溫度傳感器(modbus tcp)的值, 寄存器位置為第2個 但是該設備的表示方式是16進制的, 例如: 1c05, 高位 1c 的十進位是 28, 低位05 的十進位是05, 高低位合併後為 280510 , 它就是 28.5 度的意思 問題是設定 ifix 的 datablock 是好像只有 integer 合適, 所以型態(tài)選integer (我不太熟 ifix) 在database 中 tag 顯示的值就變成 717310 了 , 也就是 1c0516 的十進位數(shù) 請問有辦法讓database直接抓到或是顯示的是 28.5 的數(shù)值嗎? 要怎麼設定配置呢? 先提前謝謝了 |
---|---|
|
newtlk
級別: 探索解密
|
自己用了一個很笨的方法解決, 就是新增一個tag_F的sim tag用來暫存轉好小數(shù)的值, 再新增一個schedules, 讓它執(zhí)行以下程式碼 Private Sub TempFloat_OnTimeOut(ByVal lTimerId As Long) Dim tag, tmp, dec1, dec2 tag= ReadValue("tag", 2) ' 讀取 tag 值 If tag> 0 Then tmp = Hex$(tag) ' convert to Hex, eg: 1C05 dec1 = Left(tmp, 2) ' get high part of Hex, eg: 1C dec2 = Right(tmp, 2) ' get low part of Hex, eg: 05 WriteValue Str(CInt("&H" & dec1) & "." & CInt("&H" & dec2)), "tag_F", 2 ' 寫入 tag Else WriteValue "0", "tag_F", 2 End If End Sub 一定有更好的方法, 不吝指教一下. 另外不知 ca 型的 tag 能不能到類似效果? 但它好像只支持 +-*/ 的運算而已 |
---|---|
|