已解决问题:WINCC6.2 VB脚本如何对变量进行位操作?
如题,在WINCC的VB脚本中如何对一变量的某一位进行操作?比如有一16位内部变量:Tag1<BR>,如何对它的第5位进行IF判断?
最佳答案
第5位进行IF判断:
IfHMIRuntime.Tags("Tag1").ReadAnd&H10Then
...
Else
...
EndIF
直接使用GetTagWord(tag)&&0x1作为变量来判断
回答者: cloud21 - 顶级工程师第12级
2010-02-24 10:59:15
VBS在线按F1,看帮助吧。
回答者: YHKingKong - 中级工程师第10级
2010-02-24 12:20:00
VBScript将一个32位变量位的数值到一个二进制位数组。那么,在这个二进制位数组中可以正确地调用并处理单独的位。
DimPVar
DimstrText
DimarrArray(32)
Dimi
Dimganzzahl
Dimwert
'-------------------------
'读取wincc变量
'-------------------------
PVar=HMIRuntime.Tags("Ernie_dword_pw").Read
'----------------------------------------------
'
'32位转成数组
'
'----------------------------------------------
'resetbit31
'transferbit31intobitarray
If(PVar>=2147483648)Then
PVar=(PVar-2147483648)
arrArray(31)=1
Else
arrArray(31)=0
EndIf
'transferbit0..30intobitarray
Fori=0To30
ganzzahl=PVar\2
arrArray(i)=PVarMod2
PVar=ganzzahl
Next
'----------------------------------------------
'
'convertbitarraytostring(reverSEOrder)
'
'----------------------------------------------
Fori=31To0Step-1
strText=strText&CStr(arrArray(i))
Next
'traceintodiagnosticwindow
HMIRuntime.TracestrText&vbNewLine
'----------------------------------------------
'
'transferbitsofbitarraytoreferencetag
'
'----------------------------------------------
'transferbit0..30
Fori=0To30
wert=wert+(arrArray(i)*2^i)
Next
'transferbit31
IfarrArray(31)=1Then
wert=wert+2147483648
EndIf
'traceintodiagnosticwindow
HMIRuntime.Trace"Wert:"&wert&vbNewLine
得到数组后用“fornet”对其操作就可以得到想要的位。
回答者: 塞上雁 - 中级工程师第10级
2010-02-24 12:37:22
SetTag1=HMIRuntime.Tags("Tag1")
msgBoxTag1.Readand32
回答者: youhm - 高级工程师第11级
2010-02-24 12:42:29
用and语句:如:
dimtag16
settag16=hmiruntime.tags("tag16")
tag16.read
iftag16.valueand32then
'为真执行语句
else
'为假执行语句
endif
判断其他位的话分别and几次方,比如判断第8位的话就and2^8即and256.
回答者: mugui - 中级工程师第10级
2010-02-25 09:01:58
dima,b a=hmiruntime.tags("tag16").read先读取该变量 b=aand16对a进行与运算,16对应二进制10000,刚好是tag16的第五位 ifb=16then 该变量第五位为1 else 不为1 endif