QQ登录

只需一步,快速开始

循环调用全局脚本,怎么无法实现,求指导

[ 复制链接 ]
循环调用全局脚本,怎么无法实现,求指导我在做洗衣机的控制面板程序,其中水量键设定水量(通过棒图显示),时间键控制清洗时间(两个LED),按下启动键后,棒图清零,然后实时进水量,LED实时显示剩余时间。我在按下启动键时设定了一个触发,调用全局脚本,进行水量累加和时间递减,这里是水量增加的程序,shuiwei是设定的水量,dianyuan是电源键,cf是全局脚本触发变量。求指导啊
6358396245320100889446438.png

循环调用全局脚本,怎么无法实现,求指导

循环调用全局脚本,怎么无法实现,求指导


-------养成好习惯, 程序加注释, 最起码给别人的程序加上注释。


-------根据你的需求, 我按自己的理解如下:

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嵌套吗?


-------Act_WaterPos的值是怎么来的?我主要就是实际水量增加以及时间减少不太会。

我给你解释下我的程序,麻烦你看看:

先定义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,满足条件执行你脚本的内容,否则直接结束。


------在按钮的事件里做, 不要在全局脚本里做。


-------我全局脚本里只有累加,在按键脚本里做了循环调用全局脚本,结果没实现。。。。


-------我用for的目的是让每次累加之间有个间隔,这样累加的结果在棒图中显示可以看出是断续变化的,不知道还有什么延时可用,sleep不会用。我把写的程序贴出来,麻烦看看

按键C动作


----------您说用周期触发,意思是全局里触发器既有周期触发,又有变量触发?设定周期触发不是程序运行就开始触发了吗?我也试过,没成功。。。。要是能实现,这肯定很NICE,简单好用,求指导


-------脚本触发用周期触发,然后脚本中判断:

if hmiruntime.tags("cf").read then

cf为1需要执行的脚本

end if


----------您这用的是VBS吧,我不会VB。。。。我这样写对吗?为什么定时器里面没东西?

shuiwei是水量的变量

6358438657966997862310513.png


------你这是编写的项目程序块,你需要编辑vbs动作,然后调用项目程序块。


--------我的程序中,是按下启动按钮触发这里的,那就是要编辑启动按钮的VBS动作了??这个按钮里有其他的C动作。。。怎么办


-------那就不需要触发变量了呀!直接按钮中调用这个项目程序块就行了,触发是按钮动作触发的。按钮的动作分为按下,抬起,动作。你可以把vbs和c分别写在不同的动作里面。比如vbs写在按下,c写在抬起中。



回复

使用道具 举报

快速回复 返回列表 客服中心 搜索