已解决问题: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=PVar2 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
(编辑:威海站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|