组态提示:
当在 WinCC 全局脚本/ VBScript 中逐位关联一个或更多 32 位变量时,如果某个变量中的最高位(位 31 )被置位,会导致溢出并且脚本执行失败。
实例:
如果在画面中 VBScript 用于显示一个双字中特定位的状态,当双字中的位 31 被置位那么会有一个错误的显示。
补救措施:
当对双字类型的变量进行位操作时(如“ And ” 运算)确保位 31 不被使用或置位。在进行逐位处理之前应检查 32 位变量最高位的状态, 如果需要可改变它。使用“ greater than or equal to ”查询可以确定一个 32 位变量的位 31是否被置位。如果 32 位变量的值大于或等于 231,那么说明位 31 被置位。这样,可以从 32 位变量中减去值 231 来使位 31 复位。用这种方法可以正确的计算其他位的值。下图的 VBSeript 就清楚地显示了这个过程。在这个例子中,32 位变量中位 0 的状态被动态化地使用。如果位 0 被置位,对象的背景颜色被设置成“ green ”的数值,否则被设置成“ gray ”的数值。
图. 01
下列 VBScript 使用了上面描述的方法转移一个 32 位变量位的数值到一个二进制位数组。那么,在这个二进制位数组中可以正确地调用并处理单独的位。
WinCC_VBOverflowBit31_vbs.pdf ( 9 KB )
这个脚本的文本形式文件可以在下面下载。
WinCC_VBOverflowBit31.zip ( 6 KB )
关键字:
VBS, Visual Basic Script, 位 31,位 32, 最高有效位
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc334844.html