组合框连接变量为a,数据类型int。b,c,d是3个BOOL量。当a=1,将变量b置1,a=2,将变量c置1;a=3,将变量d置1.请问这个如何实现,C脚本程序应该怎么编。谢谢大家。
最佳答案
这个可以用全局脚本来实现,打开全局脚本编辑器,然后新建“全局动作”
然后写入下面代码
inta;
a=GetTagWord("a");
switch(a)
{
cASe1:{SetTagBit("b",1);
SetTagBit("c",0);
SetTagBit("d",0);
};
break;
case2:{SetTagBit("c",1);
SetTagBit("b",0);
SetTagBit("d",0);
};
break;
case3:{SetTagBit("d",1);
SetTagBit("b",0);
SetTagBit("c",0);
};
break;
}
或者用ifelse也可以
inta;
a=GetTagWord("a");
if(a==1)
{
SetTagBit("b",1);
SetTagBit("c",0);
SetTagBit("d",0);
}
if(a==2)
{
SetTagBit("c",1);
SetTagBit("b",0);
SetTagBit("d",0);
}
if(a==3)
{
SetTagBit("d",1);
SetTagBit("c",0);
SetTagBit("b",0);
}
完成代码后编译,保存,然后选择触发器,建议选择变量"a”作为触发器,这样当a发生变化时,执行全局动作,减少系统负载。当然你选择循环触发C全局动作也是可以的,就是浪费了系统的资源。
最后,不要忘了,设置全局脚本,在wincc激活时,自动启动,WINCC服务器的属性里设置
当然,楼上的方法很好,直接在PLC里面做吗,也很简单
La
L1
==I
SB
RC
RD
TAK
L2
==I
SC
RB
RD
TAK
L3
==I
SD
RB
RC
提问者对于答案的评价:
谢谢您的回答,功能我试了的确可以实现。但是目前我有40个变量,类型是BOOL。像这样做,有一个变量置1,另外39个变量要置0.请问有更简单的方法吗?
最佳答案作者回复:
恩,把你的这些BOOL为分成2个DWORD类型的双字
比如
W=DB1.DBD0
A=DB1.DBX0.0
B=DB1.DBX0.1
C=DB1.DBX0.2
然后通过SetTagDWord("W",0x1000);
就是把A=DB1.DBX0.0置1了,
SetTagDWord("W",0x2000);
就是把B=DB1.DBX0.0置1了,
SetTagDWord("W",0xF000);
就是把DB1.DBX0.0-DB1.DBX0.7全部置1.