找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2917|回复: 20

WinCC中定时器使用方法

 火... [复制链接]
  • 打卡等级:常驻代表
  • 打卡总天数:34
  • 打卡月天数:6
  • 打卡总奖励:9027
  • 最近打卡:2025-12-17 23:15:51

2823

主题

541

回帖

2万

积分

管理员

积分
22569
发表于 2022-10-11 22:54:14 | 显示全部楼层 |阅读模式
1定时器功能介绍
WINCC中定时器的使用可以使WinCC按照指定的周期或者时间点去执行任务,比如周期执行变量归档、在指定的时间点执行全局脚本或条件满足时打印报表。WinCC已经提供了一些简单的定时器,可以满足大部分定时功能。但是在有些情况下,WinCC 提供的定时器不能满足我们需求,这时我们就可以通过 WinCC提供的脚本接口通过编程的方式实现定时的功能,因为脚本本身既可以直接调用WinCC其他功能,比如报表打印,也可以通过中间变量来控制其他功能的执行,比如通过置位/复位归档控制变量来触发变量记录的执行。WinCC 提供了C 脚本和VBS脚本,本文主要以全局 C 脚本编程为例介绍定时功能的实现。
2脚本中定时器介绍
既然在全局脚本中可以编程控制其他功能的执行,那么首先看看全局脚本的触发:

图1 脚本触发器分类
如图1所示: 脚本触发器分为使用定时器和使用变量, 定时器又分为周期执行和非周期执行一次,比如每分钟执行一次脚本属于周期执行,指定2012年10月1日执行一次属于非周期执行。 使用变量触发脚本,即在变量发生变化时,脚本就执行一次, 而变量的采集可以根据指定周期循环采集,或者根据变化采集,根据变化实际是1秒钟采集变量一次。
3使用脚本实现更多定时器功能
利用脚本自身的定时器, 可以通过在脚本中编程的方式实现更多其它定时功能。
3.1整点归档
WinCC提供了变量归档,变量归档分为周期归档和非周期归档,不管是周期归档或非周期的归档,都又可以通过一些变量或脚本返回值来控制归档, 比如:整点归档。下面的设置结合WinCC脚本,实现了在整点开始归档,归档五分种后停止归档,即每个小时仅归档前五分钟的数据。
软件环境:Windows 7 Professional Service Pack1 , WinCC V7.0 SP3
归档名称:ProcessValueArchive
归档变量:NewTag
归档周期:1 分钟
归档控制变量 startarchive
C脚本触发周期:10秒
脚本代码:
#include "apdefap.h"
int gscAction( void )
{
#pragma option(mbcs)
#pragma code ("kernel32.dll");
void GetLocalTime (SYSTEMTIME* lpst);
#pragma code();
SYSTEMTIME time;
int t1;
GetLocalTime(&time);
t1=time.wMinute;
if(t1==00)
{
SetTagBit("startarchive",1);
}
if(t1==05)
{
SetTagBit("startarchive",0);
}
return 0;
}
归档设置如图2:

图2 归档设置
同理,在以上脚本的基础上做修改,可以实现在某个指定的时间点打印报表,只要在满足触发条件时调用下列函数:
RPTJobPrint("Myprintjob");
Myprintjob为事先创建好的打印作业。
脚本主要部分在于获取系统当前时间,下面的脚本实现了获取当前时间并分别获取年、
月、日、时、分、秒、毫秒,星期几的功能。
Varname1到Varname8为WinCC内部变量。若在WinCC画面上显示时,由于默认I/O 域
的格式为999.99, 要把 Varname1的显示格式改为9999。
#include "apdefap.h"
int gscAction( void )
{
#pragma option(mbcs)
#pragma code ("kernel32.dll");
void GetLocalTime (SYSTEMTIME* lpst);
#pragma code();
SYSTEMTIME time;
GetLocalTime(&time);
SetTagWord("Varname1",time.wYear);
SetTagWord("Varname2",time.wMonth);
SetTagWord("Varname3",time.wDayOfWeek);
SetTagWord("Varname4",time.wDay);
SetTagWord("Varname5",time.wHour);
SetTagWord("Varname6",time.wMinute);
SetTagWord("Varname7",time.wSecond);
SetTagWord("Varname8",time.wMilliseconds);
return 0;
}
设置或读取系统时间的函数如下:
SetSystemTime
SetLocalTime
GetSystemTime
GetLocalTime
系统中本地计算机时间和格林威治时间是有区别的。函数“SetSystemTime /
GetSystemTime”用于设置或读取格林威治时间。
函数“SetLocalTime / GetLocalTime”用于设置或读取本地计算机时间。
两种时间会因地理的时区不同而改变。两个函数使用方法相同。
3.2 WinCC项目激活时避免脚本初次执行及延迟执行脚本
全局脚本在项目激活时,是要执行一次的,在有些情况下,需要避免脚本执行,就采用在脚本中去判断。比如可以创建WinCC内部布尔型变量 flag,脚本如下:
#include "apdefap.h"
int gscAction( void )
{
#pragma option(mbcs)
if ( GetTagBit("flag")==1)
SetTagWord("NewTag",1);//根据自己的需求编写对应代码.
else
SetTagBit("flag",1); //Return-Type: BOOL
return 0;
}
除了避免项目运行激活时触发脚本执行,我们还可以通过Sleep() 延迟脚本功能执行,比如开机后五分钟开始执行脚本具体功能,代码如下:
#include "apdefap.h"
int gscAction( void )
{
#pragma option(mbcs)
#pragma option(mbcs)
#pragma code("Kernel32.dll");
void Sleep(int milliseconds);
#pragma code()
Sleep(300000); //延迟300秒即五分钟
int temp;
//根据自己的需求编写对应代码.
temp=GetTagWord("NewTag"); //Return-Type: WORD
temp++;
SetTagWord("NewTag",temp);
return 0;
}


工控课堂 www.gkket.com

0

主题

94

回帖

348

积分

注册会员

积分
348
发表于 2025-11-12 16:57:34 | 显示全部楼层
我先占个楼,等下再慢慢看~
工控课堂 www.gkket.com

0

主题

102

回帖

169

积分

新手上路

积分
169
发表于 2025-11-13 16:01:38 | 显示全部楼层
赞同 + 10086,没毛病,完全没毛病
工控课堂 www.gkket.com

0

主题

69

回帖

114

积分

新手上路

积分
114
发表于 2025-11-13 18:27:58 | 显示全部楼层
蹲一波同款,有没有小伙伴推荐?
工控课堂 www.gkket.com

0

主题

103

回帖

158

积分

新手上路

积分
158
发表于 2025-11-13 18:41:29 | 显示全部楼层
楼主辛苦啦,期待下一篇分享
工控课堂 www.gkket.com

0

主题

93

回帖

148

积分

新手上路

积分
148
发表于 2025-11-13 18:46:38 | 显示全部楼层
水贴也要有仪式感,我先来打卡~
工控课堂 www.gkket.com

0

主题

103

回帖

161

积分

新手上路

积分
161
发表于 2025-11-13 19:13:24 | 显示全部楼层
同款经历!简直是世另我
工控课堂 www.gkket.com

0

主题

78

回帖

118

积分

新手上路

积分
118
发表于 2025-11-13 20:15:22 | 显示全部楼层
内容太顶了!疯狂点赞,已默默收藏~
工控课堂 www.gkket.com

0

主题

84

回帖

246

积分

注册会员

积分
246
发表于 2025-11-13 20:25:34 | 显示全部楼层
同款经历!我当初也这么过来的😂
工控课堂 www.gkket.com

0

主题

110

回帖

342

积分

注册会员

积分
342
发表于 2025-11-13 20:27:16 | 显示全部楼层
理性围观,感觉大家说得都有道理
工控课堂 www.gkket.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|手机版|免责声明|本站介绍|工控课堂 ( 沪ICP备20008691号-1 )

GMT+8, 2025-12-23 09:28 , Processed in 0.083971 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表