WinCC 中定时器使用方法介绍?

..7
1、定时器功能介绍.4
2、脚本中定时器介绍.4
3、使用脚本实现更多定时器功能.5
3.1 整点归档..5
3.2 WinCC 项目激活时避免脚本初次执行及延迟执行脚本 n

1 定时器功能介绍n

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

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

图1 脚本触发器分类 如图1所示: 脚本触发器分为使用定时器和使用变量, 定时器又分为周期执行和非周期执行一次,比如每分钟执行一次脚本属于周期执行,指定2012年10月1日执行一次属于非周期执行。 使用变量触发脚本,即在变量发生变化时,脚本就执行一次, 而变量的采集可以根据指定周期循环采集,或者根据变化采集,根据变化实际是1秒 钟采集变量一次。n

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

利用脚本自身的定时器, 可以通过在脚本中编程的方式实现更多其它定时功能。n

3.1整 点归档

WinCC提供了变量归档,变量归档分为周期归档和非周期归档,不管是周期归档或非周期的归档,都又可以通过一些 变量或脚本返回值来控制归档, 比如:整点归档。下面的设置结合WinCC脚本,实现了在 整点开始归档,归档五分种后停止归档,即每个小时仅归档前五分钟的数据。n

软件环境:Windows 7 Professional Service Pack1 , WinCC V7.0 SP3n

归档名称:ProcessValueArchiven

归档变量:NewTagn

归档周期:1 分钟n

归档控制变量 startarchiven

C脚本触发周期:10秒n

脚本代码:n

#include "apdefap.h"n

intgscAction( void )n

{n

#pragma option(mbcs)n

#pragma code ("kernel32.dll");n

void GetLocalTime (SYSTEMTIME* lpst);n

#pragma code();n

SYSTEMTIME time;n

int t1;n

GetLocalTime(&time);n

t1=time.wMinute;n

if(t1==00)n

{n

SetTagBit("startarchive",1);n

}n

if(t1==05)n

{n

SetTagBit("startarchive",0);n

}n

return0;n

}n

归档设置如图2:n

WinCC 中定时器使用方法介绍?

图2 归档设置n

同理,在以上脚本的基础上做修改,可以实现在某个指定的时间点打印报表,只要在满足触发条件时调用下列函数:n

RPTJobPrint(" Myprintjob");
Myprintjob为 事先创建好的打印作业。n

脚 本主要部分在于获取系统当前时间,下 面的脚本实现了获取当前时间并分别获取年、月、日、时、分、秒、毫秒,星期几的功能。n

Varname1 到 Varname8 为 WinCC 内部变量。若在 WinCC画面上显示时,由于默认 I/O 域的 格式为999.99, 要把 Varname1 的显示格式改为9999。n

#include "apdefap.h"n

intgscAction( void )n

{n

#pragma option(mbcs)n

#pragma code ("kernel32.dll");n

void GetLocalTime (SYSTEMTIME* lpst);n

#pragma code();n

SYSTEMTIME time;n

GetLocalTime(&time);n

SetTagWord("Varname1",time.wYear);n

SetTagWord("Varname2",time.wMonth);n

SetTagWord("Varname3",time.wDayOfWeek);n

SetTagWord("Varname4",time.wDay);n

SetTagWord("Varname5",time.wHour);n

SetTagWord("Varname6",time.wMinute);n

SetTagWord("Varname7",time.wSecond);n

SetTagWord("Varname8",time.wMilliseconds);n

return 0;n

}n

设置或读取系统时间的函数如下:n

SetSystemTimen

SetLocalTimen

GetSystemTimen

GetLocalTimen

系统中本地计算机时间和格林威治时间是有区别的。函数“SetSystemTime / GetSystemTime”用于设置或读取格林威治时间。n

函数“SetLocalTime / GetLocalTime”用于设置或读取本地计算机时间。n

两种时间会因地理的时区不同而改变。两个函数使用方法相 同。n

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

全局脚本在项目激活时,是要执行一次的,在有些情况下,需要避免脚本执行,就采用在脚本中去判断。比如 可以创建 WinCC 内部布尔型变量 flag,脚本如下:n

#include "apdefap.h"n

intgscAction( void )n

{n

#pragma option(mbcs)n

if ( GetTagBit("flag")==1)n

SetTagWord("NewTag",1);//根据自己的需求编写对应代码.n

elsen

SetTagBit("flag",1); //Return-Type: BOOLn

return0;n

}n

除了避免项目运行激活时触发脚本执行,我们 还可以通过Sleep()延迟脚步功能执行,比如开机后五分钟开始执行脚本具体功能,代码如下:n

#include "apdefap.h"n

intgscAction( void )n

{n

#pragma option(mbcs)n

#pragma option(mbcs)n

#pragma code("Kernel32.dll");n

voidSleep(int milliseconds);n

#pragma code()n

Sleep(300000); //延迟300秒即五分钟n

int temp;n

//根据自己的需求编写对应代码.n

temp=GetTagWord("NewTag");//Return-Type: WORDn

temp++;n

SetTagWord("NewTag",temp);n

return 0;n

}n

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

注意事项

应用示例与所示电路、设备及任何可能结果没有必然联系,并不完全相关。应用示例不表示客户的具体解决方案。它们仅对典型应用提供支持。用户负责确保所述产品 的正确使用。这些应用示例不能免除用户在确保安全、专业使用、安装、操作和维护设备方面的责任。当使用这些应用示例时,应意识到西门子不对在所述责任条款 范围之外的任何损坏/索赔承担责任。我们保留随时修改这些应用示例的权利,恕不另行通知。如果这些应用示例与其它西门子出版 物(例如,目录)给出的建议不同,则以其它文档的内容为准。

关键词定时器 ,C 脚本,触发器 Key Words Timer C Script Trigger

原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc327738.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2020年11月5日 下午12:03
下一篇 2021年4月12日 上午12:00

相关推荐

发表回复

登录后才能评论