wincc6.0 过程画面如何做到自动切换的效果我的整个生产过程分为四个主要的画面,我想做一个类似于电脑待机时,隔一段时间自动切换一张壁纸那样的效果。
比如,有一个输入输出口,连接一个布尔型内部变量,当我输入1时,启动自动切换的效果。
如果可以的话,能检测到鼠标一定时间(5分钟)没有动作时,就启动自动切换的效果。
有没有前辈做过类似的事情,烦请指点。
甲方的这个要求,弄的我有点头大。
-------自动切换画面可以较容易实现。
PLC取4个布尔位,各对应1个画面。要显示某个画面则将对应的布尔位=1,置其它3个布尔位=0。
wincc做4个窗口画面,各关联PLC的对应布尔位。
--------我是这么理解的,这四个布尔型数据,可以是内部变量,不用PLC自己的存储空间。
我这4个画面是画中画。
有没有相关例程可以参考?
-------画面是画中画就是画面窗口。深入浅出WINCC.pdf(网上有下载)有介绍,一看就会。
---------画中画我已经搞完了,就是这个自动切换,还没想出解决办法。
--------画面的显示属性和变量关联起来,变量为True画面显示,为False,不显示。
--------自动切换有数组, 全局脚本, 周期触发
#include "apdefap.h"
int gscAction( void )
{
#pragma option(mbcs)
const char* p[4] = {"pdl1", "pdl2", "pdl3", "pdl4"};
static int i = 0;
extern int flag;
if(flag) return 0;
OpenPictrue(p[i++ % 4]);
return 0;
}
int flag = 0;
附: 判断鼠标不动的脚本, 1分钟周期
#include "apdefap.h"
int gscAction( void )
{
#pragma option(mbcs)
#pragma code("user32.dll")
BOOL GetCursorPos( LPPOINT lpPoint);
#define cmp(a, b) (a.x == b.x && a.y == b.y)
static POINT lastPos;
POINT currPos;
static int count = 0;
extern int flag;
GetCursorPos(&currPos);
if(cmp(currPos, lastPos))
{
++count;
}
else
{
count = 0;
flag = 0; //恢复正常状态
}
if(5 == count)
{
//鼠标5分钟不动满足
printf("Trig\r\n");
flag = 1;
count = 0;
}
//printf("(%d, %d), (%d, %d)\r\n", lastPos.x, lastPos.y, currPos.x, currPos.y);
lastPos = currPos;
return 0;
}
|