在论坛和找答案里面有不少朋友问在WinCC里面用脚本怎么对一个非BOOL型的变量中的某一位进行操作,这里分别就用C和VBS脚本对变量的每一位的操作介绍一下。
在VBS脚本脚本里面,“AND”即有逻辑与运算的功能,也有对变量进行按位与运算,“OR”即有逻辑或运算的功能,也能对变量进行按位或运算,字面意思就能分辨。在C脚本里面的是按位与运算“&”;按位或运算是“|”。
当对一个变量的某一位操作的时候,需要注意不能影响其他位的状态,根据逻辑运算可以知道,和TRUE进行逻辑运算,结果是不变的,和False进行或运算,结果也是不会发生改变的,所以不管VBS还是C脚本,对位操作都是这个思路,想对一个变量的某一位置1的时候,就进行按位或运算,该位是1,其他位都是0,对变量的某一位置0的时候,进行按位与运算,该位是0,其他位是1,举个例子,在VBS脚本里面对一个8位无符号的变量的第4位(0位开始),分别进行置1和置0的脚本如下:
'对第4位置1
Dim BIT
Set BIT = HMIRuntime.Tags("8BIT")
BIT.Write BIT.Read Or 16
'下面是对第4位置0
Dim BIT
Set BIT = HMIRuntime.Tags("8BIT")
BIT.Write BIT.Read And &HEF
C脚本里面对第7位置1和置0如下:
// 下面是对第7位置1,去除了WinCC里面的注释
#define TAG "8BIT"
SetTagyte(TAG,(BYTE)(GetTagByte(TAG) | 0x80));
// 下面是对第7位置0
// WINCC:TAGNAME_SECTION_START
// syntax: #define TagNameInAction "DMTagName"
#define TAG "8BIT"
// next TagID : 1
// WINCC:TAGNAME_SECTION_END
// WINCC:PICNAME_SECTION_START
// syntax: #define PicNameInAction "PictureName"
// next PicID : 1
// WINCC:PICNAME_SECTION_END
SetTagByte(TAG,(BYTE)(GetTagByte(TAG) & 0x7F));
上面是对变量的写操作,那还有对变量的读操作,下面以WinCC8.0为例,我个人认为常用的4中方法分别说明一下。
1、忘了哪个版本新增的动画组态功能,有点类似博途组态动画的操作,组态的大题过程看图里面的箭头

2、再就是WinCC所有版本里面都有的直接动态对话框组态,看附图

3、VBS脚本,这次以图片的形式显示吧

4、C脚本,也是用图片显示

如果只是一般的状态显示,推荐第一种或者第二种,除非脚本还有别的功能,要不然不推荐脚本,一个画面里面脚本多了,会影响运行速度的。
本来有个动图演示来的,论坛改版之后不允许上传gif图片了,暂时就免了吧