已解决问题:WINCC6.2 VB脚本如何对变量进行位操作?
如题,在WINCC的VB脚本中如何对一变量的某一位进行操作?比如有一16位内部变量:Tag1 <BR> ,如何对它的第5位进行IF判断?
最佳答案
第5位进行IF判断:
If HMIRuntime.Tags("Tag1").Read And &H10 Then
...
Else
...
End IF
直接使用GetTagWord(tag)&&0x1作为变量来判断
回答者: cloud21 - 顶级工程师 第12级
2010-02-24 10:59:15
VBS在线按F1,看帮助吧。
回答者: YHKingKong - 中级工程师 第10级
2010-02-24 12:20:00
VBScript 将一个 32 位变量位的数值到一个二进制位数组。那么,在这个二进制位数组中可以正确地调用并处理单独的位。
Dim PVar
Dim strText
Dim arrArray(32)
Dim i
Dim ganzzahl
Dim wert
'-------------------------
'读取wincc变量
'-------------------------
PVar = HMIRuntime.Tags("Ernie_dword_pw").Read
'----------------------------------------------
'
'32位转成数组
'
'----------------------------------------------
'reset bit 31
'transfer bit 31 into bit array
If (PVar >= 2147483648) Then
PVar = (PVar -2147483648)
arrArray(31) = 1
Else
arrArray(31) = 0
End If
'transfer bit 0..30 into bit array
For i = 0 To 30
ganzzahl = PVar \ 2
arrArray(i) = PVar Mod 2
PVar = ganzzahl
Next
'----------------------------------------------
'
'convert bit array to string (reverse order)
'
'----------------------------------------------
For i = 31 To 0 Step -1
strText = strText & CStr(arrArray(i))
Next
'trace into diagnostic window
HMIRuntime.Trace strText & vbNewLine
'----------------------------------------------
'
'transfer bits of bit array to reference tag
'
'----------------------------------------------
'transfer bit 0..30
For i = 0 To 30
wert = wert + (arrArray(i)*2 ^ i )
Next
'transfer bit 31
If arrArray(31) = 1 Then
wert = wert + 2147483648
End If
'trace into diagnostic window
HMIRuntime.Trace "Wert: " & wert & vbNewLine
得到数组后用“for net ”对其操作就可以得到想要的位。
回答者: 塞上雁 - 中级工程师 第10级
2010-02-24 12:37:22
Set Tag1= HMIRuntime.Tags("Tag1")
msgbox Tag1.Read and 32
回答者: youhm - 高级工程师 第11级
2010-02-24 12:42:29
用and语句:如:
dim tag16
set tag16=hmiruntime.tags("tag16")
tag16.read
if tag16.value and 32 then
'为真执行语句
else
'为假执行语句
end if
判断其他位的话分别and几次方,比如判断第8位的话就and 2^8即and 256.
回答者: mugui - 中级工程师 第10级
2010-02-25 09:01:58
dim a,b
a=hmiruntime.tags("tag16").read 先读取该变量
b=a and 16 对a进行与运算,16对应二进制10000,刚好是tag16的第五位
if b=16 then
该变量第五位为1
else
不为1
end if