WinCC OA-CTRL-图形界面の定时器
2021-03-05 16:28
标签:padding none time ali display logs lse int inf Hello ,小伙伴们,我又来更新啦,我们知道WinccOA 是一个事件驱动的系统,报警按钮数值变化都可以驱动一个事件, 有了这些事件,我们就可以捕捉,实现我们的功能,因此没有在Gedi面板上给大家一个可以拖拽的定时器,但是有的时候呢 我们想用定时器给界面界面添加些效果该怎么办呢?别急,下面我们就操练起来: OK ,我们首先咨询了西门子WinCC OA中国区客服,拿到了官方实现定时器的代码 其中 timedFunc 函数只能运行在单独的ctl脚本文件中,不可以放在图形界面(详见函数手册) 但是我们发现demo中用到了dpCreate函数,咦?这不是创建一个DataPoint么? 机智的我跑了一遍代码迅速的打开了Para面板 我们知道了官方的定时器原理其实就是创建一个"_TimedFunc" datapoint, 然后 调用timedFunc 注册回调函数. 但是timedFunc 不能在Gedi里使用,下面我们变通一下 实现一个自己的Gedi可用的定时器. 如图一个作为5s的定时器 一个作为2s的定时器 将文件添加至Control Manager管理器 然后启动 打开para查看是否添加成功 bingo! 好的现在定时器已经做好了, "System1:every5sec.flag" 每隔5s 触发一次 "System1:every2sec.flag" 每隔2s 触发一次 而且做得这两个定时器 任何Gedi界面都可以使用,比其他组态的拖拽定时器 性能要强很多~~~ 下面就来做个实验 initalize代码用来周期性改变白色矩形框颜色 OK 跑起来 我把两张图合在了一起 定时器好用~ WinCC OA-CTRL-图形界面の定时器 标签:padding none time ali display logs lse int inf 原文地址:https://www.cnblogs.com/indus-eric/p/12876699.html引子
官方定时器实现
main()
{
int rc;
dpCreate( "_testTimedFunc", "_TimedFunc" );
dpSet("_testTimedFunc.validFrom", makeTime(2020,5,5,13,10,0),//起始时间
"_testTimedFunc.validUntil", makeTime(2020,12,5,13,11,00),//结束时间
"_testTimedFunc.mode", 1,
"_testTimedFunc.interval", 2, //时间间隔
"_testTimedFunc.syncTime:_original.._value", -1);
rc=timedFunc( "workFunc","_testTimedFunc");
}
void workFunc(string dp,time t1,time t2)
{
DebugN( dp, t1, t2 );
}
创建自己的Gedi定时器
1)创建Timer 数据类型
2)创建两个Timer 数据点
3)利用官方脚本关联两个定时器
main()
{
int rc;
//2s
dpCreate( "_every2sec", "_TimedFunc" );
dpSet("_every2sec.validFrom", makeTime(2020,5,5,13,10,0),
"_every2sec.validUntil", makeTime(2120,12,5,13,11,00),
"_every2sec.mode", 1,
"_every2sec.interval", 2,
"_every2sec.syncTime:_original.._value", -1);
//5s
dpCreate( "_every5sec", "_TimedFunc" );
dpSet("_every5sec.validFrom", makeTime(2020,5,5,13,10,0),
"_every5sec.validUntil", makeTime(2120,12,5,13,11,00),
"_every5sec.mode", 1,
"_every5sec.interval", 5,
"_every5sec.syncTime:_original.._value", -1);
//设置2s回调
rc=timedFunc( "workFunc2","_every2sec");
//设置5s回调
rc=timedFunc( "workFunc5","_every5sec");
}
//2秒回调
void workFunc2(string dp,time t1,time t2)
{
dpSet("System1:every2sec.flag",TRUE);
}
//5秒回调
void workFunc5(string dp,time t1,time t2)
{
dpSet("System1:every5sec.flag",TRUE);
}
4) 定时器使用
main()
{
dpConnect("fun01","System1:every5sec.flag");
}
void fun01(string dp1, bool a)
{
if(colorTag){
setValue("RECTANGLE1", "backCol", "red");
}else{
setValue("RECTANGLE1", "backCol", "blue");
}
colorTag = !colorTag;
}
欢迎关注,及时获取更新
上一篇:C#中HashTable的用法
下一篇:23_API_System
文章标题:WinCC OA-CTRL-图形界面の定时器
文章链接:http://soscw.com/index.php/essay/60524.html