WINCC脚本实例 下载本文

}union

Union.Dword=GetTagDword(\SetTagWord(\SetTagWord(\

这样两个参数LTN44001和LTN44023就通过一个Tag传送上来了理论上只要下位机内存足够可以传送任意数量的参数而不受WinCC版本外部Tag数目的限制. 字串4

42:如何在WinCC里用C语言调用SQL语言? 1、创建一个SQL文件。

此文件在ISQL中创建,文件内容是所希望执行的SQL语句。

2、在WinCC的C Script中编写程序调用此SQL文件,如以下程序所示: #i nclude \字串6

void OnLButtonDown(char* lpszPictureName, 字串1

char* lpszObjectName, 字串8 char* lpszPropertyName, 字串7 UINT nFlags, int x, int y) 字串8 { 字串5

char*a=\字串9 UID=DBA;PWD=SQL;DBF=E:\\\\testsql\\\\testsqlRT.DB; 字串1 DBN=CC_testsql_99-12-03_12:48:26R; 字串2 READ 字串6 E:\\\\testsql\\\\test.sql\ 字串8

printf(\字串4

ProgramExecute(a); 字串1 } 字串2

下面是一个简单的SQL文件内容: 字串3 select * from pde#hd#t#test; 字串6 output to E:\\\\test2.txt FORMAT ascii 注意:文件名及路径中不要带空格。 字串1

43:如何整点启动归档?

在\下的Project functions编写函数:cyclicarchive 字串2 BOOL cyclicarchive() 字串6 { 字串1

#pragma code (\ 字串2

void GetLocalTime (SYSTEMTIME* lpst); 字串6

#pragma code(); 字串8 SYSTEMTIME time; 字串9 Int t1; 字串6

GetLocalTime(&time);

字串8

t1=time.wMinute; 字串8

if(t1==00) 字串6 { 字串8

SetTagBit(\字串1

return(BOOL)(GetTagBit(\字串5 } 字串1 } 字串4

在Tagloging中的\中的\下的Archiving type选择Cycle-selective,在\标签下的\内选择cyclicarchive函数。 字串3

44:如何在按键组合被禁用的情况下,从WinCC运行环境进入WinCC Control Center? 最好是做一个按钮,该按钮需要用用户权限保护,在该钮中编写如下C-action: 低于WinCC 5.0版本: #pragma code (\ 字串8

BOOL SetForegroundWindow(HWND); 字串8 #pragma code(); 字串1 HWND handle; 字串1

handle=FindWindow(\字串8 If (!SetForegroundWindow(handle)) 字串3

Printf (\字串2

WinCC 5.0版本以及更高的版本: 字串7 #pragma code(\ 字串4

BOOL SetForegroundWindow(HWND); 字串6 #pragma code(); 字串4 HWND handle; 字串5

handle=FindWindow(\ 字串9

If (!SetForegroundWindow(handle)) 字串7 Printf (\ 字串6

45:WinCC如何实现鼠标OnMouseOVer事件?

用WINDOWAPI函数GetCusorPos获取当前鼠标位置,用GetWindowRect函数获取窗口位置,两值相减得鼠标在WINCC frame上的相对位置。用全局脚本(设定为1s定时刷新),然后获取要OnMouseOver事件的物体的位置,并与鼠标位置相比较,如一致则触发自己定义的动作。 字串2

#i nclude \字串1 int gscAction( void ) {

#pragma code(\

BOOL GetCusorPos(POINT lpPoint); //获取鼠标的位置(绝对位置-对应屏幕分辨率) BOOL GetWindowRect(HWND hwnd,LPRECT lpRect); //获取窗体??位置 #pragma code(); POINT pPos; RECT rRec; HWND hwnd; BOOL bRet,bRet2;

long lLeft,lTop,lWidth,lHeight; long lX,lY; char szStr[100]; 字串8

hwnd=FindWindow(NULL,\//如语言为中文应为\运行系统-\ 字串7

if (hwnd==0) {printf(\字串2 bRet=GetCursorPos(&pPos); if (bRet==0) goto over; 字串4

bRet2=GetWindowRect(hwnd,&rRec); if (bRet2==0) goto over;

lX=pPos.x-rRec.left; //鼠标 对{置 lY=pPos.y-rRec.top; //鼠标 ??位置

//如果为非全屏模式,需将上述数值中的高height判断减去标题栏的宽度 //printf(\

//printf(\ lLeft=GetLeft(\//Return - Type :long int lTop=GetTop(\//Return - Type :long int lWidth=GetWidth(\//Return - Type :long int lHeight=GetHeight(\//Return - Type :long int 字串8

if ((lX>=lLeft)&&(lY>=lTop)&&(lX<=lLeft+lWidth)&&(lY<=lTop+lHeight)) { 字串9

sprintf(szStr,\

SetText(\//Return - Type :char* 字串8 }

//printf(\