background image

怎么定时启动一个或

个项目函数

问:

1、在 C 脚本里,为什么只有全局动作的属性里可以设置触发器来定时启动全局动作

的程序,而项目函数的属性却没有触发器设置呢?
2、如果我要系统运行时就自动启动运行一次项目函数 A,该怎么做?
3、如果我要求系统运行时就自动周期运行项目函数 B,周期可以设置,该怎么做?
4、如果在全局动作里新建一个动作***.pas,在里面统一调用系统需要周期运行的项目函
数,然后在这个全局动作属性里设置触发器定时器。这样是否可以实现我的第三个问题?
如下:
int gscAction( void )
{
项目函数

A;

项目函数

B;

// WINCC:TAGNAME_SECTION_START
// syntax: #define TagNameInAction "DMTagName"
// next TagID : 1
// WINCC:TAGNAME_SECTION_END // WINCC:PICNAME_SECTION_START
// syntax: #define PicNameInAction "PictureName"
// next PicID : 1
// WINCC:PICNAME_SECTION_END
}
答:

1、全局动作带触发器,所以只要动作被触发了,就执行。对于时间类的触发器(定点

定时的除外),系统刚开始激活运行时都会触发一次。而项目函数是用户函数,本身不会
被执行,只能通过其它动作来调用它,才会运行。也就是说,如果没有其它程序调用它,
这个项目函数就永远不会运行。
2、第 1 条里已经说明了,全局动作一般在系统启动时会执行一次。如果只允许执行一次
(如初始化等工作),可以先建个内部变量

blnBegin(布尔型的),这个变量可以在主画

面的

Open Picture 事件中赋值为 1。然后永远保持为 1。

然后,建一个全局动作,触发器为变量触发(

blnBegin),代码如下:

if (GetTagBit("blnBegin")==1)
{
  项目函数 A;
} return 1;
3、全局动作的触发器周期必须组态时设置,不能运行时动态设定。用户周期可以在项目属
性里定义。
4、可以。一个动作里可以调用多个项目函数。但定时器只能有一个。