BOOL s_run = GetTagBit("run"); //启动标志
if(s_run)
{
SetTagFloat("Dis_WaterPos", GetTagFloat("Act_WaterPos"));//运行状态, 显示实际水位, Dis //是I棒图连接的变量;
}
else
{
SetTagFloat("Dis_WaterPos", GetTagFloat("Set_WaterPos"));//not运行状态, 显示set水位, Dis是I棒图连接的变量;
}
//time expires., Action with one second period.
int t = GetTagWord("time");
if(t && GetTagBit("run")) // when t is not zero and the system is running, time is expiring.
{
SetTagWord("time", --t);
}
if(!t && GetTagBit("run")) //when t is zero and the system is running, it triggles //time_expired event.
{
SetTagWord("Time_Expired", true); // when time expires, set a bool tag.
}
--------你设置脚本的触发变量了吗?
你说的循环是指的你的两个for嵌套吗?
我给你解释下我的程序,麻烦你看看:
先定义swz保存设定的水量(shuiwei变量,棒图也是连接这个变量的),按下启动后shuiwei变量值清零,定义h保存实际水量并与swz比较,h<swz时触发全局脚本进行水量增加,cf是全局脚本的触发变量。for循环是用来延时的,不知道对不对、
-----cf是触发变量,for是用来延时的,其他的延时不会。。。。if(h>swz)是进行循环判断的,h是实际水量,swz是设定水量
-------1、你不应该用for循环做延时,这样会造成wincc假死,应该直接把for循环改成有条件的读取wincc内部变量自加,并保存到wincc内部变量中,然后判断自加的结果是否大于设定值。
2、你的脚本应该是用周期触发(比如触发周期为1s),然后脚本中判断cf,满足条件执行你脚本的内容,否则直接结束。
------在按钮的事件里做, 不要在全局脚本里做。
按键C动作
----------您说用周期触发,意思是全局里触发器既有周期触发,又有变量触发?设定周期触发不是程序运行就开始触发了吗?我也试过,没成功。。。。要是能实现,这肯定很NICE,简单好用,求指导
if hmiruntime.tags("cf").read then
cf为1需要执行的脚本
end if
----------您这用的是VBS吧,我不会VB。。。。我这样写对吗?为什么定时器里面没东西?
shuiwei是水量的变量
------你这是编写的项目程序块,你需要编辑vbs动作,然后调用项目程序块。 --------我的程序中,是按下启动按钮触发这里的,那就是要编辑启动按钮的VBS动作了??这个按钮里有其他的C动作。。。怎么办 -------那就不需要触发变量了呀!直接按钮中调用这个项目程序块就行了,触发是按钮动作触发的。按钮的动作分为按下,抬起,动作。你可以把vbs和c分别写在不同的动作里面。比如vbs写在按下,c写在抬起中。
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4