因为画面上有多个同样的搅拌机,我打算做一个公共面板,然后公共面板有一个下位机传来的远方状态信号,对应公共面板也有一个公共远方状态信号,当点击1号搅拌机按钮时选用单击事件激活函数,以下是2台搅拌机的代码:
其中各变量含义为
"@NOP::2#flocculant-agitator"、"@NOP::1#flocculant-agitator" 公共面板的激活变量,依据其真假来决定主循环do...while语句的循环条件判断;
"@NOP::remote-status" 公共面板的远方状态信号,此HMI变量链接到了DB块中已被存储;
"@NOP::#1coagulantagitatorremotestatus"、"@NOP::#2coagulantagitatorremotestatus"下位机传来的实际远方状态信号,利用PLCSIM进行仿真;
#include "GlobalDefinitions.h" //第一台搅拌机
void OnClick(char* screenName, char* objectName, char* propertyName)//左键激活系统函数
{
SetTagBit("@NOP::2#flocculant-agitator",FALSE); //设定2号搅拌机操作面板激活变量为0
SetTagBit("@NOP::1#flocculant-agitator",TRUE);//设定1号搅拌机操作面板激活变量为1
do//循环将下位机I点远方状态的值赋值给公共面板的远方状态变量
{
SetTagBit("@NOP::remote-status",GetTagBit("@NOP::#1coagulantagitatorremotestatus"));
ActivateScreenInScreenWindow ("flocculant & congulant screen", "1# agitator controler", "1#flocculant agitator controler");//在画面中的固定窗口中激活公共面板画面
}
while(GetTagBit("@NOP::1#flocculant-agitator") == TRUE);//当1号搅拌机操作面板激活变量为1时才继续循环
}
#include "GlobalDefinitions.h" //第二台搅拌机
void OnClick(char* screenName, char* objectName, char* propertyName)//左键激活系统函数
{
SetTagBit("@NOP::1#flocculant-agitator",FALSE); //设定1号搅拌机操作面板激活变量为0
SetTagBit("@NOP::2#flocculant-agitator",TRUE);//设定2号搅拌机操作面板激活变量为1
do//循环将下位机I点远方状态的值赋值给公共面板的远方状态变量
{
SetTagBit("@NOP::remote-status",GetTagBit("@NOP::#2coagulantagitatorremotestatus"));
ActivateScreenInScreenWindow ("flocculant & congulant screen", "1# agitator controler", "1#flocculant agitator controler");//在画面中的固定窗口中激活公共面板画面
}
while(GetTagBit("@NOP::2#flocculant-agitator") == TRUE);//当2号搅拌机操作面板激活变量为1时才一直循环
}
现在遇到的问题是,以上代码鼠标先点击#1搅拌机后再点击#2搅拌机的时候,"@NOP::1#flocculant-agitator"和"@NOP::2#flocculant-agitator 俩个变量通过链接的DB块中的地址发现该变量并没有随之更改,现请教各位大佬如何利用脚本制作公共面板,谢谢大佬!