您现在所在的是:

工控软件

回帖:1个,阅读:313 [上一页] [1] [下一页]
587
newtlk
文章数:2
年度积分:50
历史总积分:587
注册时间:2014/6/16
发站内信
发表于:2014/7/9 17:36:40
#0楼
大家好, 我是ifix新手, 請教一下:

我已用ifix的 MBE 驅動讀取到一台溫度傳感器(modbus tcp)的值, 寄存器位置為第2個
但是該設備的表示方式是16進制的, 例如: 1c05, 高位 1c 的十進位是 28, 低位05 的十進位是05,
高低位合併後為 2805[sub]10[/sub] , 它就是 28.5 度的意思

問題是設定 ifix 的 datablock 是好像只有 integer 合適, 所以型態選integer (我不太熟 ifix)
在database 中 tag 顯示的值就變成 7173[sub]10[/sub] 了 , 也就是 1c05[sub]16[/sub] 的十進位數

請問有辦法讓database直接抓到或是顯示的是 28.5 的數值嗎? 要怎麼做呢?

先提前謝謝了
587
newtlk
文章数:2
年度积分:50
历史总积分:587
注册时间:2014/6/16
发站内信
发表于:2014/8/12 14:26:33
#1楼
自己用了一個很笨的方法解決, 就是新增一個tag_F的sim tag用來暫存轉好小數的值, 再新增一個schedules, 讓它執行以下程式碼
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 能不能到類似效果? 但它好像只支持 +-*/ 的運算而已

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

31.2002