网站首页
公司介绍
产品中心
新闻中心
技术文章
工程案例
在线留言
人才招聘
联系我们
产品搜索:
 PLC控制箱(柜)
 除尘控制箱(柜)、系统
 自动化系统
 启动箱(柜)
 低压配电箱(柜)
 高炉探尺
 水处理
 脉冲控制仪
 防爆箱(柜)
郑州创信电气设备有限公司
地址:河南省郑州市高新区长椿路11号国家大学科技园
电话:013523517231
手机:张经理13523517231
传真:0135-23517231
E-mail:HNzzcxdq@163.com
联系人:张经理
 
ww首页 - 用户服务 - 技术文章 
[图文]WinCC中定时器使用方法

WinCC中定时器使用方法

The usage of Timer in WinCC Project 

 

    本文主要介绍WinCC中定时器的使用,以及使用 C 脚本实现一些定时器功能,比如整点归档,延时执行脚本。

 

1定时器功能介绍

2脚本中定时器介绍

3使用脚本实现更多定时器功能

3.1整点归档

3.2 WinCC项目激活时避免脚本初次执行及延迟执行脚本


1 定时器功能介绍

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

2 脚本中定时器介绍

    既然在全局脚本中可以编程控制其他功能的执行,那么首先看看全局脚本的触发:

 

[转载]WinCC中定时器使用方法精讲【工控老鬼】

图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:

 [转载]WinCC中定时器使用方法精讲【工控老鬼】

图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;

}

   不管是整点归档或者延迟执行脚本,脚本中的参数都可以在运行期间通过WinCC的画面动态设定。

 上一条:没有数据了     下一条:[图文]用S7-PLCSIM V5·4对WINCC V6·2的仿真
Copyright©2012-2013 版权所有 | 郑州创信电气设备有限公司      
地址:河南省郑州市高新区长椿路11号国家大学科技园    24小时热线电话:张经理13523517231
电话(TEL):013523517231  联系人:张经理   传真(FAX):0135-23517231
邮箱(E-MAIL):HNzzcxdq@163.com   备案号:豫ICP13010008号 |