文档库 最新最全的文档下载
当前位置:文档库 › wincc-全套脚本总结

wincc-全套脚本总结

wincc-全套脚本总结
wincc-全套脚本总结

——————1、wincc全局脚本动作-------隐藏控件——————

#include "apdefap.h"

int gscAction( void )

{

// WINCC:TAGNAME_SECTION_START

// syntax: #define TagNameInAction "DMTagName"

// next TagID : 1

// WINCC:TAGNAME_SECTION_END

int value;

value=GetTagBit("IM_in");//"IM_in"为触发的变量。

if(value==1)

{

SetVisible("lianxi.pdl","按钮8",TRUE);//lianxi.pdl为控制对象所在画面名,“按钮8”为对象名称

}

else

{

SetVisible("lianxi.pdl","按钮8",FALSE);//lianxi.pdl

}

// WINCC:PICNAME_SECTION_START

// syntax: #define PicNameInAction "PictureName"

// next PicID : 1

// WINCC:PICNAME_SECTION_END

return 0;

}

=====================================================

说明:在触发器里选择变量IM_in

——————2、wincc全局脚本动作----提示框——————

#include "apdefap.h"

int gscAction( void )

{

// WINCC:TAGNAME_SECTION_START

// syntax: #define TagNameInAction "DMTagName"

// next TagID : 1

// WINCC:TAGNAME_SECTION_END

int value;

value=GetTagBit("IM_in");

if(value==1)

{

MessageBox(NULL,"请确认三厅相关门是否关好,或者请解锁。","提示框",MB_OK|MB_ICONEXCLAMATION|MB_SETFOREGROUND|MB_SYSTEMMODAL);

}

// WINCC:PICNAME_SECTION_START

// syntax: #define PicNameInAction "PictureName"

// next PicID : 1

// WINCC:PICNAME_SECTION_END

return 0;

}

=============================

说明:在触发器中选择变量触发。

——————3、趋势面板——————————

char * str_a = NULL;

int Hi;

int Lo;

str_a = GetTagChar("TrendTagName1");

Lo= GetTagSWord("TrendLo");

Hi= GetTagSWord("TrendHi");

SetPropWord(lpszPictureName,"qushi","TrendIndex",0);

SetPropChar(lpszPictureName,"qushi","TrendTagName",str_a);

SetPropWord(lpszPictureName,"qushi","ValueAxisBeginValue",Lo);

SetPropWord(lpszPictureName,"qushi","ValueAxisEndV alue",Hi); ————————————————————————

——————4、获取位号————————

SetTagChar("TrendTagName1","ProcessValueArchive\\PT111"); //Return-Type: BOOL SetTagSWord("TrendHi",200);

SetTagSWord("TrendLo",0);

SetTagByte("Trenden",1);

————————————————————————

——————5、调用登陆函数——————

#pragma code("useadmin.dll")

#include "PWRT_API.H"

#pragma code()

if (strcmp(GetTagChar("@CurrentUser"),"")==0)

{

PWRTLogin('c');

-------------------------------------

——————6、时间同步——————void SetCpuTime()

{

#pragma code("kernel32.dll");

void GetLocalTime(SYSTEMTIME *lpst);

#pragma code();

SYSTEMTIME time

BOOL ret;

//printf("Start function SetCpuTime\r\n");

GetLocalTime(&time);

ret= SetTagMultiWait("%d%d%d%d%d%d%d",

"data_year",time.wYear-2000,

"data_month",time.wMonth,

"data_day",time.wDay,

"data_hour",time.wHour,

"data_MINUTE",time.wMinute,

"data_SECOND",time.wSecond,

"data_FLAG",1

)

}

-------------------------------------

——————7、对话框调用——————BOOL A;

BOOL B;

HWND hwnd=NULL;

int RetMsg;

A=GetTagBit("TJ_ANNIU"); //Return-Type: BOOL

hwnd=FindWindow(NULL,"WinCC-运行系统- ");

if (A==0)

RetMsg =MessageBox (hwnd, "确定要停机?", "停机警告", MB_OKCANCEL|MB_SYSTEMMODAL|MB_SETFOREGROUND);

if (RetMsg==IDOK)

{

SetTagBit("TJ_ANNIU",1);

MessageBox (hwnd, "停机", "停机警告", MB_OK|MB_SYSTEMMODAL|MB_SETFOREGROUND);

SetTagBit("TJ_ANNIU",0);

}

else B=0;

}

else

{

}

------------------------------------------

——————8、声音报警——————

#pragma code("Winmm.dll")

VOID WINAPI PlaySoundA(char* pszSound,char* hmode,DWORD dwflag);

#pragma code()

if(GetTagFloat("LIST555")>500)

PlaySoundA("D:\\DCSDATA\\CG_wincc\\Horn\\Horn_Attention.wav",NULL,1);

if(GetTagFloat("LIST555")<300)

PlaySoundA("D:\\DCSDATA\\CG_wincc\\Horn\\alsndmgr.wav",NULL,1);

-----------------------------------------------

——————9、水平移动——————

建立内部变量BOOL-Q,无符号32位-P

全局动作

int a;int a1;

a=GetTagBit("Q");a1=GetTagDWord("P");

if(a==1)

{

a1=a1+10;

}

if(a1>=100)

{

a1=0;

SetTagDWord("P",a1);

然后用一个按钮控制二进制变量Q,为启动信号。物体的X位置对应的是变量P,设置为模拟量。当P为1的时候对应的X位置。P为2的时候对应X的位置,以此类推,就可以做出物体移动画面了,要做全局脚本

-----------------------------------------------

——————10、WinCC中调用SQL语言——————

1、创建一个SQL文件,此文件在ISQL中建立,文件内包含所要执行的SQL语句。Windows 对话框实现。具体如下:

2、在WinCC中用C Script 调用上述SQL文件,如下所示:

#include"apdefap.h"

void OnLButtonDown(char* lpszPictureName,

char* lpszObjectName,

char* lpszPropertyName,

UINT nFlags,int x,int y)

{

char*a="c:siemenscommonSQLANYISQL-q-b-c

UID=DBA;PWD=SQL;DBF=E:testsqltestsqlRT.DB;

DBN=CC_testsql_99-12-03-12:48:26R;READ

E:testsqltest.sql";

Printf("%srn",a);

ProgramExcute(a);

}

下面是一个简单的SQL文件内容:

select *from pde#hd#t#test;

output to e:test2.txt FORMAT ascii

注意:文件名及路径中不要带空格。

——————11、设置或重置一个变量——————

void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) {

BOOL z;

z=GetTagBit("MyBitVariable");//获得变量值

if (z==0)

SetTagBit("MyBitVariable",1); //设置变量值

else

SetTagBit("MyBitVariable",0);

}

——————12、运行时图形产生动态旋转——————

#include "apdefap.h"

long _main(char* lpszPictureName, char* lpszObjectName, char*

lpszPropertyName)

{

static int x=25,y,z;//x为半径的初始值为25,y为切换变量,z为搅拌机运行状态变量

z=GetTagBit("202搅拌机运行"); //取得PLC搅拌机的运行状态

if(z!=0)

{

switch(y)

{

case 0:

x=x-4;

if(x<=0)

y=1;

break;

default :

x=x+4;

if(x>=25)

y=0;

break;

}

}

return x;

}

——————13、WINCC--如何在程序中动态修改用户密码——————1、点击“开始”--》“设置”--》“控制面板”--》“管理工具”--》“数据源(ODBC)”,打开ODBC 数据源管理器

2、在用户DSN页面的用户数据源中找到与当前项目所关联的一项,其名称为“CC_项目名_项目建立日期时间”,记下该项的名称

3、在脚本中加入以下代码:

#pragma code("UseGen.dll")

#include "USEGENAP.H"

#pragma code()

LPCMN_ERROR err; //定义的LPCMN_ERROR型变量,在函数调用中需使用

if (PWGENConnect("CC_ass_04-09-21_16:35:22",err)) //建立与数据库的联接,其中

CC_ass_04-09-21_16:35:22用第二步中记下的名称取代

{

if

(PWGENChangePassword(GetTagChar("user"),GetTagChar("oldpassword"),GetTagChar ("password"),err)) //修改密码,user,oldpassword,password分别为存贮用户名,原密码,新密码的内部变量,类型为文本变量8位字符集

{

//密码修改成功后的操作,如给用户提示等

}

}

PWGENDisconnect(err); //断开与数据库的联接

4、编译运行程序

5、工作完成

6、与用户管理相关的函数定义存贮在APPLIB目录下的USEGENAP.H文件中,可根据上面示例自行完成添加用户,修改权限等功能。

——————14、WinCC如何实现鼠标OnMouseOVer事件——————

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

#include "apdefap.h"

int gscAction( void )

{

#pragma code("user32.dll");

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

hwnd=FindWindow(NULL,"WinCC-Runtime - "); //如语言为中文应为"WinCC 运行系统-"

if (hwnd==0) {printf("rnError! WinCc Handle is %d",hwnd);goto over;}

bRet=GetCursorPos(&pPos);

if (bRet==0) goto over;

bRet2=GetWindowRect(hwnd,&rRec);

if (bRet2==0) goto over;

lX=pPos.x-rRec.left; //鼠标对{置

lY=pPos.y-rRec.top; //鼠标位置

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

//printf("The Current Cusor Pos is x:%d,y:%drn",pPos.x,pPos.y);

//printf("The Cusor Pos in Window is x:%d,y:%drn",pPos.x-lLeft2,pPos.y-lTop2);

lLeft=GetLeft("NewPdl0.Pdl","Text1"); //Return - Type :long int

lTop=GetTop("NewPdl0.Pdl","Text1"); //Return - Type :long int

lWidth=GetWidth("NewPdl0.Pdl","Text1"); //Return - Type :long int

lHeight=GetHeight("NewPdl0.Pdl","Text1"); //Return - Type :long int

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

sprintf(szStr,"%d,%d",lX,lY);

SetText("NewPdl0.Pdl","Text1",szStr); //Return - Type :char*

}

//printf("The Text1 Pos is x:%d,y:%drn",lLeft2,lTop-lTop2);

over:

return 0;

} ———————————————————————————————————————

——————15、如何在退出WINCC监控时直接关闭电脑——————

1.利用动态向导

2.在脚本中加入DMExitWinCCEx (DM_SDMODE_SYSTEM);也可以

——————16、过WINCC API函数读出当前报警消息——————

1、使用GMsgFunction中读出当前报警信息的ID(dwMsgNr);

2、使用MSRTGetMsgCSData函数读出该报警信息ID对应文本库TEXTLIB中的文本ID (dwTextID1);

3、使用MSRTGetMsgText函数读出该文本ID的文本。

信息到达处理:如果读取文本成功,则置文本变量MSG。

信息离去处理:如果MsgNr与上一次相同,则复位MSG,如果不是,则继续保持信息。具体函数说明请看ODK文档

BOOL GMsgFunction( char* pszMsgData)

{

#pragma code("msrtcli.dll")

#i nclude "msrtapi.h"

#pragma code();

MSG_TEXT_STRUCT tMeld;

MSG_CSDATA_STRUCT sM;

CMN_ERROR err;

BOOL bRet;

DWORD dwTextID1;

DWORD dwMsgNum;

char szMsg[255];

#define TAG_MSG "MSG"

MSG_RTDATA_STRUCT mRT;

memset( &mRT, 0, sizeof( MSG_RTDA TA_STRUCT ) );

if( pszMsgData != NULL )

{

printf( "Meldung : %s rn", pszMsgData );

sscanf( pszMsgData, "%ld,%ld,%04d.%02d.%02d,%02d:%02d:%02d:%03d,%ld, %ld, %ld, %d,%d",

&mRT.dwMsgNr, // Meldungsnummer

&mRT.dwMsgState, // Status MSG_STA TE_COME, .._GO, .._QUIT, .._QUIT_SYSTEM

&mRT.stMsgTime.wYear, // Tag

&mRT.stMsgTime.wMonth, // Monat

&mRT.stMsgTime.wDay, // Jahr

&mRT.stMsgTime.wHour, // Stunde

&mRT.stMsgTime.wMinute, // Minute

&mRT.stMsgTime.wSecond, // Sekunde

&mRT.stMsgTime.wMilliseconds, // Millisekunde

&mRT.dwTimeDiff, // Zeitdauer der anstehenden Meldung

&mRT.dwCounter, // Interner Meldungsz?hler

&mRT.dwFlags, // Flags( intern )

&mRT.wPValueUsed,

&mRT.wTextValueUsed );

//***************************************************************************** *********code for dcount

if (mRT.dwMsgState==MSG_STATE_COME)//信息到达处理

{

dwMsgNum=mRT.dwMsgNr;

printf("rnThe Alarm Message No is %d !rn",dwMsgNum);

bRet=MSRTGetMsgCSData(dwMsgNum,&sM,&err);

if (bRet==TRUE)

{

dwTextID1=sM.dwTextID[0];

printf("rnThe TextID of The MessageNr %d is %d !rn",dwMsgNum,dwTextID1);

bRet=MSRTGetMsgText(1,dwTextID1,&tMeld,&err);

if (bRet==TRUE)

{

sprintf(szMsg,"%s",tMeld.szText);

printf("rnThe Text of TextID %d is %s !rn",dwTextID1,szMsg);

}

}

}

if (mRT.dwMsgState==MSG_STATE_GO)//信息离去处理

{

dwMsgNum=mRT.dwMsgNr;

if (dwMsgNum==GetTagDWord(TAG_MSG_NR)) SetTagChar(TAG_MSG,"");

}

//***************************************************************************** *********code for dcount

// Meldungsdaten einlesen

// Prozesswerte lesen, falls gew???????§???1nscht

}

printf("Nr : %d, St: %x, %d-%d-%d %d:%d:%d.%d, Dur: %d, Cnt %d, Fl %drn" ,

mRT.dwMsgNr, mRT.dwMsgState, mRT.stMsgTime.wDay, mRT.stMsgTime.wMonth, mRT.stMsgTime.wYear,

mRT.stMsgTime.wHour, mRT.stMsgTime.wMinute, mRT.stMsgTime.wSecond, mRT.stMsgTime.wMilliseconds, mRT.dwTimeDiff,

mRT.dwCounter, mRT.dwFlags ) ;

SetTagChar(TAG_MSG,szMsg);

return( TRUE );

}

——————17、实现用户登陆日志(wincc中用c脚本实现?)——————用户登陆日志:(包括用户的登陆退出信息,以便查询在什么时间段是哪个用户在使用这个监控软件)

#i nclude "apdefap.h"

int gscAction( void )

{

#pragma code("kernel32.dll")

VOID GetLocalTime(LPSYSTEMTIME lpSystemTime);

#pragma code()

char* username;

char buf[128];

static char preuser[128];

unsigned a,b,c,d,e,f;

FILE* fp;

SYSTEMTIME sysTime;

//读取系统时间,并且复制给变量a,b,c,d,e,f

GetLocalTime(&sysTime);

a=sysTime.wHour;

b=sysTime.wMinute;

c=sysTime.wSecond;

f=sysTime.wYear;

e=sysTime.wMonth;

d=sysTime.wDay;

//得到当前用户名称

username = GetTagChar("@CurrentUser");

fp= fopen("c:wincclog.txt", "a+");

if(strcmp(username, preuser)!=0) //如果当前用户名称和前一个用户名不同

{

if((strcmp(username, "") != 0)&&(strcmp(preuser, "") == 0)) //如果当前用户名称不空同时前一个用户名为空

{

sprintf(buf, "用户:%st登陆时间是:t %d-%d-%d,%d-%d-%dn", username,a,b,c,d,e,f);

fputs(buf, fp);

}

else

{

if((strcmp(username, "") == 0)&&(strcmp(preuser, "") != 0)) //如果当前用户名称为空同时前一个用户名不空

{

sprintf(buf, "用户:%st退出时间是:t %d-%d-%d,%d-%d-%dn", preuser,a,b,c,d,e,f);

fputs(buf, fp);

}

else

{

sprintf(buf, "用户:%st退出时间是:t %d-%d-%d,%d-%d-%dn", preuser,a,b,c,d,e,f);

fputs(buf, fp);

sprintf(buf, "用户:%st登陆时间是:t %d-%d-%d,%d-%d-%dn", username,a,b,c,d,e,f);

fputs(buf, fp);

}

}

}

strcpy(preuser, username);

fclose(fp);

return 0;

}

——————18、全局脚本--声音报警——————#pragma code("Winmm.dll")

VOID WINAPI PlaySoundA(char* pszSound,char* hmode,DWORD dwflag);

#pragma code()

if (GetTagBit("XY")==0)

{

if(GetTagFloat("LIST555")>500) //热井液位

{

PlaySoundA("D:\\DCSDATA\\CG_wincc\\Horn\\热井液位高1.wav",NULL,0);

}

if(GetTagFloat("LIST555")<300) //热井液位

{

PlaySoundA("D:\\DCSDATA\\CG_wincc\\Horn\\热井液位低1.wav",NULL,0);

}

if(GetTagFloat("TE421A")>100 || GetTagFloat("TE421B")>100 || GetTagFloat("TE423A")>100 || GetTagFloat("TE423B")>100 || GetTagFloat("TE425")>100 || GetTagFloat("TE427")>100 || GetTagFloat("TE442")>100) //轴瓦温度

{

PlaySoundA("D:\\DCSDATA\\CG_wincc\\Horn\\轴瓦温度高1.wav",NULL,0);

}

if(GetTagFloat("TIE485")>45) //冷油器出口油温

{

PlaySoundA("D:\\DCSDATA\\CG_wincc\\Horn\\冷油器出口油温高.wav",NULL,0);

}

if(GetTagFloat("PT091")<0.5) //进汽压力

{

PlaySoundA("D:\\DCSDATA\\CG_wincc\\Horn\\蒸汽压力低.wav",NULL,0);

}

if(GetTagFloat("PT109")>40) //真空低{

PlaySoundA("D:\\DCSDATA\\CG_wincc\\Horn\\排汽压力高.wav",NULL,0);

}

if(GetTagFloat("PT131")<0.13) //润滑油压力低

{

PlaySoundA("D:\\DCSDATA\\CG_wincc\\Horn\\润滑油压力低1.wav",NULL,0);

}

if(GetTagFloat("PDT213")>0.05 || GetTagFloat("PDT215")>0.05 || GetTagBit("PDS071")==0 || GetTagBit("PDS073")==0) //滤油器差压

{

PlaySoundA("D:\\DCSDATA\\CG_wincc\\Horn\\滤油器差压高.wav",NULL,0);

}

if(GetTagFloat("PT121")<0.65) //主油泵出口压力

{

PlaySoundA("D:\\DCSDATA\\CG_wincc\\Horn\\主油泵出口压力低.wav",NULL,0);

}

if(GetTagFloat("LIST551")<-190) //油箱油位

{

PlaySoundA("D:\\DCSDATA\\CG_wincc\\Horn\\油箱油位低.wav",NULL,0);

}

if(GetTagFloat("VE735A")>52 | GetTagFloat("VE737A")>52 | GetTagFloat("VE745A")>52 || GetTagBit("XE202")==1 || GetTagBit("XE204")==1 || GetTagBit("XE206")==1) //振动大

{

PlaySoundA("D:\\DCSDATA\\CG_wincc\\Horn\\轴瓦振动高.wav",NULL,0);

}

if(GetTagFloat("ZE769")>0.4 || GetTagFloat("ZE769")<-0.4 || GetTagBit("ZE208")==1) //汽机转子轴向位移{

PlaySoundA("D:\\DCSDATA\\CG_wincc\\Horn\\轴相位移高.wav",NULL,0);

}

if(GetTagFloat("ZDE785")>3 || GetTagFloat("ZDE785")<-2 || GetTagBit("VE209")==1) //汽机转子胀差

{

PlaySoundA("D:\\DCSDATA\\CG_wincc\\Horn\\胀差高.wav",NULL,0);

}

if(GetTagFloat("AI_0094")>3240) //转速{

PlaySoundA("D:\\DCSDATA\\CG_wincc\\Horn\\汽轮机转速高.wav",NULL,0);

}

if(GetTagBit("DI_0175")==1 || GetTagBit("DI_0180")==1) //保护跳闸

{

PlaySoundA("D:\\DCSDATA\\CG_wincc\\Horn\\发电机保护跳闸.wav",NULL,0);

}

if(GetTagBit("DI_0177")==1 || GetTagBit("DI_0181")==1 ) //定子转子一点接地

{

PlaySoundA("D:\\DCSDATA\\CG_wincc\\Horn\\发电机转子接地.wav",NULL,0);

}

if(GetTagBit("DI_0176")==1) //过负荷{

PlaySoundA("D:\\DCSDATA\\CG_wincc\\Horn\\发电机过负荷.wav",NULL,0);

}

if(GetTagBit("DI_0182")==1) //失磁{

PlaySoundA("D:\\DCSDATA\\CG_wincc\\Horn\\发电机失磁.wav",NULL,0);

}

if(GetTagBit("SOE_15")==1) //ETS动作{

PlaySoundA("D:\\DCSDATA\\CG_wincc\\Horn\\ETS动作.wav",NULL,0);

}

}

----------------------------------------------------------------------------------------------

——————19、闪烁边框图片的脚本——————

Flash - 简短描述

使用Flash组中的函数可以修改或调用各种闪烁属性。

1.long int GetBackFlashColorOff(LPCTSTR lpszPictureName, LPCTSTR lpszObjectName)函数,指定取消激活状态的闪烁背景色

读出闪烁颜色的实例

{

long int flashcol_on;

//获得背景闪烁颜色

Flash col_on = GetBackFlashColorOn(lpszPictureName,"Group 1");

//自定义代码

//在那里用户可以使用返回值做某事

}

GetBackFlashColorOn函数参数:

“lpszPictureName”是在其中组态该对象的画面的名称。

“Group 1”是该对象的名称。

1). 读出该对象的开状态的当前背景闪烁颜色以及flashcol_on中的缓冲区。

2). 执行处理返回值的自定义代码。

2. long int GetBackFlashColorOn(LPCTSTR lpszPictureName, LPCTSTR lpszObjectName)函数,指定激活状态的背景闪烁颜色。

读出闪烁颜色的实例

{

long int flashcol_on;

//获得背景闪烁颜色

Flash col_on = GetBackFlashColorOn(lpszPictureName,"Group 1");

//自定义代码

//在那里用户可以使用返回值做某事

}

GetBackFlashColorOn函数参数:

“lpszPictureName”是在其中组态该对象的画面的名称。

“Group 1”是该对象的名称。

1). 读出该对象的开状态的当前背景闪烁颜色以及flashcol_on中的缓冲区。

2). 执行处理返回值的自定义代码。

3. long int GetBorderFlashColorOff(LPCTSTR lpszPictureName, LPCTSTR lpszObjectName)函数,指定取消激活状态的边框或线闪烁颜色。

读出闪烁颜色的实例

{

long int flashcol_on;

//获得背景闪烁颜色

flashcol_on = GetBackFlashColorOn(lpszPictureName,"Group 1");

//自定义代码

//在那里用户可以使用返回值做某事

}

GetBackFlashColorOn函数参数:

“lpszPictureName”是在其中组态该对象的画面的名称。

“Group 1”是该对象的名称。

4. long int GetBorderFlashColorOn(LPCTSTR lpszPictureName, LPCTSTR lpszObjectName)函数,指定激活状态的边框或线闪烁颜色。

读出闪烁颜色的实例

{

long int flashcol_on;

//获得背景闪烁颜色

flashcol_on = GetBackFlashColorOn(lpszPictureName,"Group 1");

//自定义代码

//在那里用户可以使用返回值做某事

}

GetBackFlashColorOn函数参数:

“lpszPictureName”是在其中组态该对象的画面的名称。

“Group 1”是该对象的名称。

5. BOOL GetFlashBackColor(LPCTSTR lpszPictureName, LPCTSTR lpszObjectName)函数,指定是否激活背景闪烁。

读出“闪烁背景激活”属性的实例

{

BOOL bflash_col;

//了解闪烁是开还是关bflash

_col = GetFlashBackColor(lpszPictureName,"Group 1");

if(bflash_col)

{

// 自定义代码

// 闪烁是否被激活

}

else

{

// 自定义代码

// 闪烁是否被取消激活

}

}

GetFlashBackColor函数参数:

“lpszPictureName”是在其中组态该对象的画面的名称。

“Group 1”是该对象的名称。

1). 读出背景色闪烁是否被激活以及bflash_col中的缓冲区。

2). 根据该函数的返回值执行自定义代码。

——————20、I/0脚本——————

使用i_o组中的函数可以修改或调用影响输入和输出值的各种属性。

1.char* GetAssignments(LPCTSTR lpszPictureName, LPCTSTR lpszObjectName)函数,对于列表,分配文本给数值范围

2.BOOL GetAssumeOnExit(LPCTSTR lpszPictureName, LPCTSTR lpszObjectName)函数,使用I/O域时,它指定退出该域时是否应用输入的数值。

3.BOOL GetAssumeOnFull(LPCTSTR lpszPictureName, LPCTSTR lpszObjectName)函数,使用I/O域时,它指定完成输入时是否应用输入的数值。

4. long int GetBitNumber(LPCTSTR lpszPictureName, LPCTSTR lpszObjectName)函数,使用列表类型“位”时,它指定输出值中相关的位。

读出布尔型属性的实例

{

BOOL bHiddenInput;

//获得隐藏输入的状态bHiddenInput

= GetHiddenInput(lpszPictureName,"IO Field 1");

if(bHiddenInput)

{ // 自定义代码// 隐藏输入是否被激活

}

else

{

// 自定义代码// 隐藏输入是否被取消激活

}

}

GetHiddenInput函数参数:

“lpszPictureName”是在其中组态该对象的画面的名称。

“IO Field1”是该对象的名称。

1). 读出文本是否是粗体字以及bHiddenInput中的缓冲区。

2). 根据该函数的返回值执行自定义代码。

5. BOOL GetClearOnError(LPCTSTR lpszPictureName, LPCTSTR lpszObjectName)函数,使用I/O域时,它指定错误输入后是否激活删除内容。

6. long int GetDataFormat(LPCTSTR lpszPictureName, LPCTSTR lpszObjectName)函数,对于I/O域,它指定域内容的数据类型。

读出布尔型属性的实例

{

BOOL bHiddenInput;

//获得隐藏输入的状态bHiddenInput

= GetHiddenInput(lpszPictureName,"IO Field 1");

if(bHiddenInput)

{

// 自定义代码// 隐藏输入是否被激活

}

else

{

// 自定义代码// 隐藏输入是否被取消激活

}

}

——————21tag脚本——————

使用来自Tag组的函数可以设置或调用变量。

1. BOOL GetTagBitStateWait(Tag Tag_Name, PDWORD lp_dwstate)函数,

建立数据类型“二进制变量”的过程变量的数值。直接从PLC读取该数值。也返回变量的状态。

读出二进制类型变量的实例

{

DWORD dwstate;

BOOL bValue;

dwstate = 0xFFFFFFFF;

//获得该变量值//dwstate是变量状态bValue

= GetTagBitStateWait("gs_tag_bit",&dwstate);//创建包含该变量值的字符串

if (bValue)

{

// 自定义代码// 该变量的数值是否是true..

}

else

{

// 自定义代码// 该变量的数值是否是false

}

}

GetTagBitStateWait函数参数:

“gs_tag_bit”是该变量的名称。

“&dwstate”是应在其中存储变量状态的变量地址。

1). 读出该变量值以及bstate中的缓冲区。该函数将变量状态存储在dwstate中。

2). 根据该函数的返回值执行自定义代码。

——————22、Wincc项目脚本——————

使用来自WinCC组的函数可以在运行系统中定义各种设置。

使用System子组中的函数可以操作WinCC运行系统。

1. BOOL DeactivateRTProject()函数,取消激活该项目。

取消激活WinCC运行系统的实例

{

//取消激活运行系统

DeactivateRTProject ();

}

该函数取消激活WinCC运行系统。

2.BOOL ExitWinCC()函数,终止WinCC

3.退出WinCC的实例

{

//退出wincc

ExitWinCC ();

}该函数终止WinCC。

WinCC组包含影响整个WinCC系统的函数。

1. BOOL GetHWDiag(LPCTSTR lpszPictureName, LPCTSTR lpszObjectName, LPCTSTR lpProperties)函数

运行时该函数可实现诊断的直接启动,由事件触发。必须在对象上组态、运用该事件。

如果该事件发生,硬件诊断功能从关联PLC的STEP7被启动。

为了使用该功能,必须满足下列条件:

? WinCC项目,带有从其进行访问的画面,而且STEP7项目必须在同一台计算机上。

? 必须将WinCC项目存储为STEP7项目(STEP7 Projekt\wincproj\WinCC Projekt)的子目录。

? 已将S7变量映射到WinCC。

2. BOOL GetHWDiagLevel(LPCTSTR lpszPictureName, LPCTSTR lpszObjectName, LPCTSTR lpProperties, DWORD dwLevel)函数

根据在dwLevel下面指定的用户管理员功能号为激活的用户执行用户配置文件级测试。

之后,运行时诊断被直接启动并由事件触发,须在对象上组态该事件。

如果该事件发生,硬件诊断功能从关联PLC的STEP7被启动。

为了使用该功能,必须满足下列条件:

? 在WinCC中激活的用户必须有必要的用户配置文件级。

? WinCC项目,带有从其进行访问的画面,而且STEP7项目必须在同一台计算机上。

? 必须将WinCC项目存储为STEP7项目(STEP7 Projekt\wincproj\WinCC Projekt)的子目录.

? 已将S7变量映射到WinCC。

3. BOOL GetKopFupAwl(LPCTSTR lpszPictureName, LPCTSTR lpszObjectName, LPCTSTR lpProperties)函数

该函数执行WinCC Step7编辑器“KFA”的网络激活。

执行该函数,完成两项子任务:

? 建立从WinCC访问网络所需要的数据。

? 将该数据传送到Step 7并使用AUTAPI定位Step 7程序中操作数的利用点。

4. BOOL GetKopFupAwlLevel(LPCTSTR lpszPictureName, LPCTSTR lpszObjectName,LPCTSTR lpProperties, DWORD dwLevel)函数

根据在dwLevel下面指定的用户管理员功能号为激活的用户执行用户配置文件级测试,然后访问Step 7编辑器“KFA”。

作为三项子任务执行该函数:

? 建立从WinCC进行网络访问所需要的数据。

? 在WinCC中为激活的用户执行用户配置文件级测试。

? 将该数据传送到Step 7并使用AUTAPI定位Step 7程序中操作数的利用点。

5. void OnDeactivateExecute()函数

终止WinCC时调用该函数。

由于它是标准函数,可以插入指令,然后执行它们。

6. void OnErrorExecute(CCAPErrorExecute ErrorExecute)函数

执行动作或函数而发生错误时由系统调用OnErrorExecute。

此函数能够确定出错的准确原因。

由系统调用该函数,并且不要求附加的调用命令。

由于包括作为标准函数的此函数,可以改变输出的类型。

7. void OnTime(CCAPTime time)函数

OnTime只能由系统调用。该函数给出所有动作的运行时间或确定哪个动作的运行时间超出了指定时间。通过APDIAG可以激活和取消激活时间测量。

由于此函数是一个标准函数,所以可以通过修改函数代码来改变输出的类型。

结构定义CCAPTime

typedef struct {

DWORD dwCurrentThreadID; 当前线程的线程ID

DWORD dwCode; 代码

BOOL bCycle; 周期/非周期

char* szApplicationName;应用程序的名称

char* szFunctionName; 函数的名称

LPVOID lpParam; 指向动作堆栈的指针

DWORD dwParamSize; 动作堆栈的大小

double dblTime;

DWORD dwFlags; 标记

} CCAPTime;

组成部分

dwCode

dwCode结构元素提供OnTime调用信息:

dwCode = 113 用每个动作的时间调用

dwCode = 114 用一个动作的超时调用

dwFlags

dwFlags结构元素提供输出类型的信息:

dwFlags = TRUE 结果被输出到文件中。

dwFlags = FALSE 结果被输出到诊断窗口中

——————23、Alarm脚本——————

Alarm组包含控制WinCC报警控件的函数。标准函数可用于工具栏中的每一个按钮。这些函数可用来创建自定义工具栏,例如选择画面,或者定义控件上的设置。

1.void AcknowledgeMessage(DWORD MsgNr)函数,确认消息系统中带编号的消息,该编号被传递为参数。

使用标准函数操作WinCC报警控件的实例

{//确认选择的报警记录消息

AcknowledgeMessage(GetTagWord("U08i_MsgNr"));

}

指定待确认的消息号。在本例中是从变量读取的。

2.BOOL AXC_OnBtnArcLong(char* lpszPictureName, char* pszMsgWin)函数,在消息窗口中该函数表示消息存储在长期归档中。

使用标准函数操作WinCC报警控件的实例

{// 跳转到WinCC报警控件中的第一条消息

AXC_OnBtnMsgFirst("gs_alarm_00","Control1");

}

AXC_OnBtnMsgFirst函数参数:

“gs_alarm_00”是在其中组态WinCC报警控件的画面的名称。

Control 1是WinCC报警控件的对象名。

3.BOOL AXC_OnBtnArcShort(char* lpszPictureName, char* pszMsgWin)函数,在消息窗口中该函数表示消息存储在短期归档中。

使用标准函数操作WinCC报警控件的实例

{// 跳转到WinCC报警控件中的第一条消息

AXC_OnBtnMsgFirst("gs_alarm_00","Control1");

}

AXC_OnBtnMsgFirst函数参数:

“gs_alarm_00”是在其中组态WinCC报警控件的画面的名称。

Control 1是WinCC报警控件的对象名。

4.BOOL AXC_OnBtnComment(char* lpszPictureName, char* pszMsgWin)函数

外部消息窗口操作,该函数显示先前所选消息的注释。

使用标准函数操作WinCC报警控件的实例

{// 跳转到WinCC报警控件中的第一条消息

AXC_OnBtnMsgFirst("gs_alarm_00","Control1");

}

AXC_OnBtnMsgFirst函数参数:

“gs_alarm_00”是在其中组态WinCC报警控件的画面的名称。

Control 1是WinCC报警控件的对象名。

5.BOOL AXC_OnBtnEmergAckn(char* lpszPictureName, char* pszMsgWin)函数,外部消息窗口操作,此函数打开确认对话框(紧急确认/复位)。

使用标准函数操作WinCC报警控件的实例

{// 跳转到WinCC报警控件中的第一条消息

AXC_OnBtnMsgFirst("gs_alarm_00","Control1");

}

AXC_OnBtnMsgFirst函数参数:

“gs_alarm_00”是在其中组态WinCC报警控件的画面的名称。

wincc 常用脚本

DeactivateRTProject ();//退出系统 #pragma code("useadmin.dll") #include"PWRT_api.h" #pragma code() char* CUser=NULL; CUser=GetTagChar("@CurrentUser"); if (strlen(CUser)==0) { PWRTSilentLogin("operator","123456");//用户“operator",密码"123456”登录} OpenPicture("@MAIN.pdl"); } 在画面中结合不同按钮来组态下面 C 操作 Login Action for login (for example, "mouse click" event): #pragma code ("useadmin.dll") #include "PWRT_api.h" #pragma code() PWRTLogin('c'); Logout Action for logout (for example, "mouse click" event): #pragma code ("useadmin.dll") #include "PWRT_api.h" #pragma code() PWRTLogout(); PWRTLogin 参数必须是CHAR 字符。它指定了显示对话框的监视器。如果只使用一个监视器,那么保留默认参数“c”或者指定“1”。 注意 可以使用PASSLoginDialog 函数来代替PWRTLogin 或者PWRTLogout 函数。这个函数需要和函数PWRTLogin 相同的参数。PWRTLogin 和PASSLoginDialog 函数可以调用登录界面,在上面可以登录或者注销。函数PWRTLogout 被正确执行并且不调用登录界面。 正确执行后这两个函数都返回“1”。然而,登录不会等到显示对话框之后。 注意 如果使用多个显示器,为了能使登录对话框显示在合适的显示器上,需要WinCC Basic Process Control (OS项目编辑器)。 不使用WinCC Basic Process Control 时,可以指定显示器编号,但登录对话框始终显示在第一个显示器上。 #include"apdefap.h"//调用函数代码 void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)

wincc功能使用总结

1、Wincc online trend控件实现多条曲线查询 项目要求,查询任意时段内的两条曲线的历史数据 1、首先在变量记录中设置需要记录的变量,如果需要在一个控件内显示两条曲线,做数据 归档时,归档属性最好是一致的,归档属性不一样是否会出现问题,这个没测试,有兴趣的可以测试一下。 2、数据记录设置OK后,新建画面插入online trend控件,我的项目需要把趋势打印出来, 所以把控件的工具栏全部隐藏。 3、双击online trend控件,添加需要显示的归档变量。选择公共X,Y轴等参数。坐标显示 根据自己使用选择,基本上不用设置太多参数。 4、添加需要显示的历史归档变量后,就需要写脚本了,西门子工控网论坛有实例,实例提 示针对于一条曲线时使用,咨询西门子技术支持,如果需要同时显示两条曲线时,需要对两条曲线分别进行设置属性“控件.index=0,1”,但是测试其实只设置index=0的起始及结束时间就OK,就是论坛给的实例不是只针对于一条曲线,两条曲线时同样适用,再多的曲线就没测试了。 5、西门子默认的时间格式为“MM-DD-YYYY HH-MM-SS”格式,所以在设置趋势起始及 结束时间时需要注意。 6、注:导入归档数据需要一定的时间,建议按钮触发。尝试在画面打开时触发脚本,有的 时候会出现历史数据加载不上来。 7、脚本如下,仅供参考 Dim objConnection Dim strConnectionString Dim strSQL Dim objrs Dim chaxun '定义曲线控件 Dim TREND Dim strval_1

Dim strval_2 Dim strval_t1 Dim strval_t2 '初始化程序,省略N行。。。。。。。。。。。。。。。。。。。。。。。。。。。。 '初始化程序,省略N行。。。。。。。。。。。。。。。。。。。。。。。。。。。。 chaxun=HMIRuntime.Tags("管号查询输入").Read strConnectionString = "Provider=MSDASQL;DSN=REPORT;UID=;PWD=;" strSQL = "select * from report where guanhao='"&chaxun&"';" Set objConnection = CreateObject("ADODB.Connection") objConnection.ConnectionString = strConnectionString objConnection.Open Set objrs = CreateObject("ADODB.RecordSet") objrs.open strSQL,objConnection /赋值程序,省略,,,,,,,,,,,,,,,,,,,,,,/ /赋值程序,省略,,,,,,,,,,,,,,,,,,,,,,/ objrs.close Set objrs = Nothing objConnection.Close Set objConnection = Nothing '趋势时间设定 Set trend = ScreenItems("控件1") strval_r=HMIRuntime.Tags("测试日期_read").Read strval_t1=HMIRuntime.Tags("开始时间_read").Read strval_t2=HMIRuntime.Tags("测试时间_read").Read

WINCC脚本个人经验总结

语音报警的组态 在工业现场安全是极其重要的,无论从那个角度讲我们应该利用一切手段减少故障的发生。在故障已经发生的时候,应该在第一时间以多种方式通知操作人员有故障发生。现代微处理计算机的处理速度可以完全胜任对于图形,语音地同时处理。所以我们可以利用计算机的声卡和音箱在有故障发生的时候产生语言报警,但是问题是WinCC本身并不能产生语音的功能,而且其内部的上千个函数也没有提供处理声音的函数。解决这个问题的方法归功于微软开发的WinCC与操作系统地完美结合,因为在WinCC中可以直接调用Windows的API函数。实现的具体C脚本代码如下: long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) { #pragma code(\"Winmm.dll\") void WINAPI PlaySoundA(char *pszSound,char *hmode,DWORD dwflay); #pragma code() if(GetTagBit(\"112排泥备泵故障\")) PlaySoundA(\"d:\\\\\\\\winnt\\\\\\\\media\\\\\\\\Mircosoft sound.wav\",NULL,8); return 1020; }重新启动后,不使用登录窗口如何以一个缺省用户的身份自动登录?怎样确保运行期间有个缺省用户始终处于登入状态?即使另外一个用户已经预先退出。 解答: 重新启动以及在运行期间,您希望HMI系统达到最小的实用性而不使用登录窗口。然而,对于高级操作,登录功能应当保留。此外,如果没有用户登录,则有一个缺省的用户自动登录。缺省用户的权限可以在用户管理器中根据需要设定。 可使用下面的C脚本执行此项功能,请按照下列步骤进行: 将附件中的函数“Silentlogin.pas”复制到项目中的“PAS”子文件夹中。 在项目中选择Global Script > C Editor > Actions > Global Actions并打开全局动作(Global Action)“Silentlogin.pas”。 在“PWRTSilentLogin (“Login”,“Password”);”一行中,用缺省的用户名替换用户“Login”,用缺省用户的口令代替“Password”。 无限循环命令 static int a=0, b=0; if(GetTagBit("BINi_pictu_dyn_09")) { if(b==0) a++; else a--; if(a==7) b=1; if(a==0) b=0; }

WinCC脚本案例保留

WinCC脚本案例保留 2010-09-16 16:44 最近做一个WinCC跟ERP通讯的一个小项目,将脚本语言保留下来,以备不时之需! 仅仅是保留,各位看官如发现不妥之处请加以指教. 1.通过扫描枪扫描到ID号传给PLC,WinCC读取到ID号从ERP数据库中查找相关数据,写回到PLC,并给PLC一个写完成确认信号.(数据库是SqlServer2000) Dim DB240trigger,db241trigger db240trigger=HMIRuntime.Tags("db240itrigger").Read db241trigger=HMIRuntime.Tags("DB241itrigger").Read Dim ss,str str=HMIRuntime.Tags("DB240szcoil_ID").Read ss=CStr(str) If (db240trigger=1 And db241trigger=0 ) Then Dim sPro,sDsn,sSer,sCon,sSql Dim oRsMaterial,conn,oCom,oItem,oRsSCHEMA Dim database,server,uid,pwd sCon ="driver=sql server;server=10.51.103.96;DATABASE=brgs_release;uid=sa;pwd=pasword" Set conn = CreateObject("ADODB.Connection") conn.ConnectionString = sCon conn.Open Set oRsMaterial = CreateObject("ADODB.Recordset") sSql= "SELECT * FROM dbo.BRGS_GP_Material where MkNo='" & CStr(ss) & "'" oRsMaterial.open ssql,conn,1,1 Dim m,n m=oRsMaterial.recordcount If m<>1 Then MsgBox "这个ID号找不到唯一的一条参数信息,请手动输入信息!" Exit Function End If Dim sCon2,sSql2

VB操作wincc脚本心得

Vbs 操作wincc画面脚本总结 一:不使用变量单纯的操作界面 1.操作某个画面中控件的属性如Home1.Pdl(总窗体)下的画面窗口2(画面窗口) Sub OnClick(ByVal Item) Dim objCircle Dim screenname Dim pwname Set objCircle= ScreenItems("圆1" ) objCircle.Radius = 60 Set screenname=HMIRuntime.Screens("Home1") //获取要操作的窗体 Set pwname=screenname.ScreenItems("画面窗口2") //获取要操作的控件,这里填入你要操作的控件名 MsgBox(objCircle.Radius) //输出圆的半径 MsgBox (pwname.Picturename) //输出当前画面窗口2的名字 End Sub 注意当调用某窗体下的某控件的某个属性时,需要声明两个对象,一个接纳这个控件,一个接纳值例如 Dim object Dim value Set object =HMIRuntime.Screens("Home1").ScreenItems("画面窗口2") Set value=object.picturename 2.更改画面窗口的对象 Sub OnClick(Byval Item) Dim opObject Set opObject=HMIRuntime.Screens ("Home1").ScreenItems("画面窗口2") opObject.PictureName="Page1.Pdl" End Sub 3.设置文本 Set titleTxt=HMIRuntime.Screens ("Home1").ScreenItems("静态文本2") titleTxt.Text =titleTxt.Text+"EF" //获取文本的值并追加字符 4.vb 字符串函数 VB的字符串截取函数有Left(字符串,n),返回字符串前N个字符;Mid(字符串,p,n),从第p个字符开始,向后截取N个字符;right(字符串,n),返回字符串的最后n个字符。 获取下标

WinCC实例教程

WinCC 视频教程知识点总结 第一讲组态软件基础 一、WinCC简介 1、WinCC 西门子视窗控制中心SIMATIC WinCC(Windows Control Center)是在计算机上对PLC 控制的运行设备进行状态监控的软件,是PC上的监控软件。 运行该软件,可以动画监视现场设备的运行状况,监视相应的运行参数,以及更改、设置系统的运行数据。 2、WinCC的特点 (1)开放性 WinCC对用户所添加的任何形式的扩充是绝对开放,该绝对开放性是通过WinCC的模块结构及其强大的编程接口来获取的。 (2)将应用软件集成到WinCC中 WinCC提供了一些方法将其他应用程序和应用程序块统一地集成到用于过程控制的用户界面中。OLE应用程序窗口和OLE自定义控制或Active控制可以集成到WinCC应用软件中。 (3)WinCC中的数据管理 WinCC的数据库为Windows SQL,从属于WinCC,该数据库用于存储所有面向列表的组态数据(如变量列表和消息文本),以及当前过程数据(如消息,测量值和用户数据记录等)该数据库具有服务器功能。

(4)在项目开始之前规定组态分类 a、文件夹名称 除一些特殊字符(例如\)之外,文件夹名称允许使用所有的字符。还允许使用数字0~9. b、变量名称 变量名称可以多于8个字符。但应尽量避免太长的名称。WinCC项目的变量名称必须是唯一的。如果变量名称还包含了其他信息,这对用户将非常有用。 c、画面名称 确定画面名称时应注意其长度的影响,太长的名称(文件名)不容易识别(列表框中的选择,脚本中的调用等)。根据经验表明,长度最好不超过28个字符,画面名称应遵守以下限制条件:①最大长度为255个字符;②不使用某些特殊字符(例如\);③画面名称中的字母不区分大小写。 二、WinCC软件的安装 1、安装S7-300/400PLC编程软件STEP7及PLCSIM; 2、安装数据库软件SQL Server 2000; 3、安装消息列队(软件操作); 4、安装WinCC(建议不选典型安装,选择全部安装)。 三、WinCC管理器 1、WinCC项目管理器的结构 WinCC项目管理器的用户界面由以下元素组成:标题栏、菜单栏、工具栏、状态栏、浏览窗口和数据窗口:

VB操作wincc脚本心得精选文档

V B操作w i n c c脚本心 得精选文档 TTMS system office room 【TTMS16H-TTMS2A-TTMS8Q8-

Vbs 操作wincc画面脚本总结 一:不使用变量单纯的操作界面 1.操作某个画面中控件的属性如 Home1.Pdl(总窗体)下的画面窗口2(画面窗口) Sub OnClick(ByVal Item) Dim objCircle Dim screenname Dim pwname Set objCircle= ScreenItems("圆1" ) objCircle.Radius = 60 Set screenname=HMIRuntime.Screens("Home1") //获取要操作的窗体 Set pwname=screenname.ScreenItems("画面窗口2") //获取要操作的控件,这里填入你要操作的控件名 MsgBox(objCircle.Radius) //输出圆的半径 MsgBox (pwname.Picturename) //输出当前画面窗口2的名字 End Sub 注意当调用某窗体下的某控件的某个属性时,需要声明两个对象,一个接纳这个控件,一个接纳值例如 Dim object Dim value Set object =HMIRuntime.Screens("Home1").ScreenItems("画面窗口2") Set value=object.picturename

2.更改画面窗口的对象 Sub OnClick(Byval Item) Dim opObject Set opObject=HMIRuntime.Screens ("Home1").ScreenItems("画面窗口2") opObject.PictureName="Page1.Pdl" End Sub 3.设置文本 Set titleTxt=HMIRuntime.Screens ("Home1").ScreenItems("静态文本2") titleTxt.Text =titleTxt.Text+"EF" //获取文本的值并追加字符 4.vb 字符串函数 VB的字符串截取函数有Left(字符串,n),返回字符串前N个字符; Mid(字符串,p,n),从第p个字符开始,向后截取N个字符;right(字符串,n),返回字符串的最后n个字符。 获取下标 VB中的InStr()函数与InStrRev()函数: 都是在主字符串当中搜寻寻找子字符串,返回找到的子字符串在主字符串中出现的位置; 不同在于; InStr()函数,从左开始向右寻找,InStrRev()函数,从右开始向左寻找。 截取 right 和left 获取长度 Len

wincc中常用C脚本

查看文章 wincc常用C动作 2010-06-27 10:31 1.用户注销: #pragma code ("useadmin.dll") #include "PWRT_api.h" #pragma code() PWRTLogout(); 2.用户登录: #pragma code ("useadmin.dll") #include "PWRT_api.h" #pragma code() PWRTLogin('c'); 3.关闭项目并退出wincc: ExitWinCC (); 4.退出运行到wincc资源管理器: DeactivateRTProject (); 5.结束监控并关闭计算机(会弹出确认对话框) HWND hWnd = NULL;//Author:Smartsys int iRet; hWnd = FindWindow(NULL,"WinCC-运行系统 - "); iRet=MessageBox(hWnd,"结束监控并关闭计算机", "关闭操作站",MB_YESNO|MB_ICONWARNING|MB_APPLMODAL); if(iRet==IDYES) DMExitWinCCEx (DM_SDMODE_POWEROFF); 6.点击事件弹出对话框,通过点击弹出对话框的确定和取消按钮实现对变量的置位或取消: int r; r=MessageBox(NULL, "YES为开,NO为关", "确定开命令:", MB_YESNO |MB_SYSTEMMODAL); if (r==IDYES) SetTagBit("TAGNAME",TRUE); else SetTagBit("TAGNAME",FALSE); 7.开显示关显示:(要在内部变量中建立三个二进制变量COLSE_DISPLAY、DISPLAY_NO和DISPLAY_COMMENT) // Funktion: Bit in Doppelwort setzen; if (GetTagBitWait("COLSE_DISPLAY")==1 )

WINCC脚本整理

切换按钮 001SetTagBit("TE_BOOL",!GetTagBit("TE_BOOL")); 002BOOL A A=GetTagBit("TE_BOOL"); if(A)SetTagBit("TE_BOOL",0); ElseSetTagBit("TE_BOOL",1); 003SetTagBit("TE_BOOL ",1-GetTagBit("TE_BOOL ")); I O域处的xx输入输出 在I/O域的输出值事件处的动作 Float F_TAG; F_TAG =GetTagFloat("TE_FLOAT"); return(F_TAG /100); WINCC运行画面最小化 HWND WinCCHwnd; WinCCHwnd=FindWindow("PDLRTisAliveAndWaitsForYou",NULL); CloseWindow(WinCCHwnd); WINDOWSxx提供的标准对话框 {BOOL bool1; HWND Hwnd; int iRet; Hwnd = FindWindow(NULL,"WinCC-运行系统- ");

if (!Hwnd) Hwnd = FindWindow(NULL,"WinCC-运行系统- "); if (!Hwnd) printf("\r\nGetWinCC Handle Failed!"); iRet=MessageBox(Hwnd,"确认合闸","确认对话框 ",MB_YESNOCANCEL|MB_ICONEXCLAMATION|MB_SETFOREGROUND|MB_SYSTEM MODAL); switch (iRet){case IDYES: printf("user do YES\r\n"); SetTagBit("TE_QUEST",1); break; case IDNO: printf("user do NO\r\n"); SetTagBit("TE_QUEST",0); break; case IDCANCEL: printf("user do CANCEL\r\n"); break;}} 本画框的功能是点击按钮的时候弹出windows询问对话框其中“确认合闸”为对话内容,对话框的名称为“确认对话框” 用户不同显示不同的按钮 你可以在用户管理器给每个用户不同的权限,使他们对按钮有不同的操作权,这是最简便的。但是如果一定要根据用户不同显示不同的按钮就要用C脚本了

Wincc常用C脚本及常用功能

打开用户管理器 ProgramExecute("Passcs.exe"); 取消激活 #include "apdefap.h" void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y) { #pragma option(mbcs) HWND hwnd=NULL; int iRet; hwnd=FindWindow(NULL,"WinCC-运行系统- "); //获得句柄 iRet=MessageBox(hwnd,"是否取消激活?","Deactivate",MB_OKCANCEL|MB_ICONW ARNING|MB_APPLMODAL); if(iRet==1) DeactivateRTProject (); //Return-Type: BOOL 关闭计算机 #include "apdefap.h" void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y) { #pragma option(mbcs) HWND hwnd=NULL; int iRet; hwnd=FindWindow(NULL,"WinCC-运行系统- "); iRet=MessageBox(hwnd,"是否关闭计算机?","ShutDown",MB_OKCANCEL|MB_ICONW ARNING|MB_APPLMODAL); if(iRet==1) DMExitWinCCEx(DM_SDMODE_SYSTEM); } ====================================================================== 登陆代码: #pragma code(“useadmin.dll”) #include #pragma code() PWRTLogin (…e?); ==================================== 取消激活(Deactivate) DeactivateRTProject(); ====================================== Wincc变量操作 GetTagDWord(“变量名称”); 获取Wincc变量值 SetTagDWord(“变量“,设定值);设置Wincc变量 对文本读写操作

wincc-全套脚本总结

——————1、wincc全局脚本动作-------隐藏控件—————— #include "apdefap.h" int gscAction( void ) { // WINCC:TAGNAME_SECTION_START // syntax: #define TagNameInAction "DMTagName" // next TagID : 1 // WINCC:TAGNAME_SECTION_END int value; value=GetTagBit("IM_in");//"IM_in"为触发的变量。 if(value==1) { SetVisible("lianxi.pdl","按钮8",TRUE);//lianxi.pdl为控制对象所在画面名,“按钮8”为对象名称 } else { SetVisible("lianxi.pdl","按钮8",FALSE);//lianxi.pdl } // WINCC:PICNAME_SECTION_START // syntax: #define PicNameInAction "PictureName" // next PicID : 1 // WINCC:PICNAME_SECTION_END return 0; } ===================================================== 说明:在触发器里选择变量IM_in ——————2、wincc全局脚本动作----提示框—————— #include "apdefap.h" int gscAction( void ) { // WINCC:TAGNAME_SECTION_START // syntax: #define TagNameInAction "DMTagName" // next TagID : 1 // WINCC:TAGNAME_SECTION_END int value;

wincc常用C脚本

精心整理1.用户注销: #pragmacode("useadmin.dll") #include"PWRT_api.h" #pragmacode() PWRTLogout(); 2.用户登录: #pragmacode("useadmin.dll") #include"PWRT_api.h" #pragmacode() PWRTLogin('c'); 3.关闭项目并退出wincc: ExitWinCC(); 4.退出运行到wincc资源管理器: DeactivateRTProject(); 按钮变三种颜色 #include"apdefap.h" long_main(char*lpszPictureName,char*lpszObjectName,char*lpszPropertyName) { #pragmaoption(mbcs) if(GetTagWord("TX/ZSH001")==1) return0x0000ff00; else if(GetTagWord("TX/ZSL001")==1) return0x000000ff; else return0x00c0c0c0; } 一个调用按钮变色 #include"apdefap.h" long_main(char*lpszPictureName,char*lpszObjectName,char*lpszPropertyName) {

#pragmaoption(mbcs) if(GetTagWord("NewTag")==0) return0x0000ff00; else return0x00ffffff; } 5.结束监控并关闭计算机(会弹出确认对话框) HWNDhWnd=NULL;//Author:Smartsys intiRet; hWnd=FindWindow(NULL,"WinCC-运行系统-"); iRet=MessageBox(hWnd,"结束监控并关闭计算机", "关闭操作站",MB_YESNO|MB_ICONWARNING|MB_APPLMODAL); if(iRet==IDYES) ???DMExitWinCCEx(DM_SDMODE_POWEROFF); 6.点击事件弹出对话框,通过点击弹出对话框的确定和取消按钮实现对变量的置位或取消: intr; r=MessageBox(NULL,"YES为开,NO为关","确定开命令:",MB_YESNO|MB_SYSTEMMODAL); if(r==IDYES) SetTagBit("TAGNAME",TRUE); else SetTagBit("TAGNAME",FALSE); 7.开显示关显示:(要在内部变量中建立三个二进制变量COLSE_DISPLAY、DISPLAY_NO和DISPLAY_COMMENT)//Funktion:BitinDoppelwortsetzen; if(GetTagBitWait("COLSE_DISPLAY")==1) {SetTagBit("COLSE_DISPLAY",0); SetTagBit("DISPLAY_NO",0);//Return-Type:BOOL SetTagBit("DISPLAY_COMMENT",0); } else??? {SetTagBit("COLSE_DISPLAY",1); SetTagBit("DISPLAY_NO",1);//Return-Type:BOOL SetTagBit("DISPLAY_COMMENT",0); } 8.开阀确认: BOOLa; a=GetTagBit("30T制水启动");//Return-Type:shortint if(a==0) {

最新WINCC脚本整理

切换按钮 001 SetTagBit("TE_BOOL",!GetTagBit("TE_BOOL")); 002 BOOL A A=GetTagBit("TE_BOOL"); if(A) SetTagBit("TE_BOOL",0); Else SetTagBit("TE_BOOL",1); 003 SetTagBit("TE_BOOL ",1-GetTagBit("TE_BOOL ")); I O 域处的格式化输入输出 在I/O域的输出值事件处的动作 Float F_TAG; F_TAG =GetTagFloat("TE_FLOAT"); return(F_TAG /100); WINCC运行画面最小化 HWND WinCCHwnd; WinCCHwnd=FindWindow("PDLRTisAliveAndWaitsForYou",NULL); CloseWindow(WinCCHwnd); WINDOWS中提供的标准对话框 { BOOL bool1; HWND Hwnd; int iRet; Hwnd = FindWindow(NULL,"WinCC-运行系统- "); if (!Hwnd) Hwnd = FindWindow(NULL,"WinCC-运行系统- "); if (!Hwnd) printf("\r\nGetWinCC Handle Failed!"); iRet=MessageBox(Hwnd,"确认合闸","确认对话框",MB_YESNOCANCEL|MB_ICONEXCLAMATION|MB_SETFOREGROUND|MB_SYSTEMMODAL); switch (iRet) {

WinCC上可以很方便的编写VB脚本和C脚本

WinCC上可以很方便的编写VB脚本和C脚本,但是调试起来还是比较费劲的。下面介绍一下个人的应用体会。 1,VB,最好安装VB6,先在VB6里面编写程序,然后再放到WinCC的脚本中,事半功倍,毕竟VB的调试非常方便。 a,插入引用 注意选择OLE Automation 和WinCC *****; b,可以直接在VB里面调用WinCC的全部变量,部,外部全可以: 如下:

c,在VB里面监视WinCC的变量: d,调试完毕,程序拷贝到WinCC 的脚本中。 2,C语言 系统提供了一个应用程序窗口,如下,只要把他拖到画面窗口即可:

2,使用Printf函数,把需要调试的容打印出来;

3,效果如下: 希望对大家有点用处。 下面容来自网络,感原文作者。 wenku.baidu./link?url=vEykUwHY3kamu6EGqrO8WX1XVc6_IMzRfnfkcwe5JpmjmPLUH msod1xIDeQUpd1MJgUMD9IlS8bcIsH6GWpHwjuq76wAjG6NjSkndSrQK Vbs 操作wincc画面脚本总结 一:不使用变量单纯的操作界面 1.操作某个画面中控件的属性如Home1.Pdl(总窗体)下的画面窗口2(画面窗口) Sub OnClick(ByVal Item) Dim objCircle Dim screenname

Dim pwname Set objCircle= ScreenItems("圆1" ) objCircle.Radius = 60 Set screenname=HMIRuntime.Screens("Home1") //获取要操作的窗体 Set pwname=screenname.ScreenItems("画面窗口2") //获取要操作的控件,这里填入你要操作的控件名 MsgBox(objCircle.Radius) //输出圆的半径 MsgBox (pwname.Picturename) //输出当前画面窗口2的名字 End Sub 注意当调用某窗体下的某控件的某个属性时,需要声明两个对象,一个接纳这个控件,一个接纳值例如 Dim object Dim value Set object =HMIRuntime.Screens("Home1").ScreenItems("画面窗口2") Set value=object.picturename 2.更改画面窗口的对象 Sub OnClick(Byval Item) Dim opObject Set opObject=HMIRuntime.Screens ("Home1").ScreenItems("画面窗口2") opObject.PictureName="Page1.Pdl" End Sub

WINCC脚本实例

1、问:如何触发计算机扬声器的声音? 答:编写如下C-Action: #pragma code("kernel32.dll"); BOOL Beep(DWORD dwFreq,DWORD dwDuration); #pragma code(); Beep(500,500); 2、问:如何通过C脚本来确定报警信息? 答:首先必须在画面中插入报警控件,可以用如下两种方式来确认信息: (1)、确认单条信息 4版本和高于此版本的WinCC BOOL OnBtnSinglAckn(char*lpszPictureName,char*lpszObjectName) 5版本和高于此版本的WinCC BOOL AXC_OnBtnSinglAckn(char*lpszPictureName,char*lpszObjectName)(2)、确认报警窗口所有可见的报警 4版本和低于此版本的WinCC BOOL OnBtnVisibleAckn(char*lpszPictureName,char*lpszObjectName) 5版本和高于此版本的WinCC BOOL AXC_OnBtnVisibleAckn(char*lpszPictureName,char*lpszObjectName) 3、问:如何在WinCC中读取系统时间? 答:通过如下C-Action: #pragma code("kernel32.dll"); Void GetLocalTimes(SYSTEMTIME*lpst); #pragma code(); SYSTEMTIME time; 字串7 GetLocalTime(&time); SetTagWord("Varname",time.wYear); SetTagWord("Varname",time.wMonth); SetTagWord("Varname",time.wDayOfWeek); SetTagWord("Varname",time.wDay); SetTagWord("Varname",time.wHour); SetTagWord("Varname",time.wMinute); SetTagWord("Varname",time.wSecond); SetTagWord("Varname",time.wMilliseconds); 4、问:如何经Windows对话框设置日期时间?

wincc常用C脚本

.用户注销: #pragma code ("useadmin.dll") #include "PWRT_api.h" #pragma code() PWRTLogout(); 2.用户登录: #pragma code ("useadmin.dll") #include "PWRT_api.h" #pragma code() PWRTLogin('c'); 3.关闭项目并退出wincc: ExitWinCC (); 4.退出运行到wincc资源管理器: DeactivateRTProject (); 按钮变三种颜色 #include "apdefap.h" long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) { #pragma option(mbcs) if(GetTagWord("TX/ZSH001")==1) return 0x0000ff00; else if(GetTagWord("TX/ZSL001")==1) return 0x000000ff; else return 0x00c0c0c0; } 一个调用按钮变色 #include "apdefap.h" long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) { #pragma option(mbcs) if(GetTagWord("NewTag")==0) return 0x0000ff00; else return 0x00ffffff;

wincc常用C脚本

1.用户注销: #pragma code ("useadmin.dll") #include "PWRT_api.h" #pragma code() PWRTLogout(); 2.用户登录: #pragma code ("useadmin.dll") #include "PWRT_api.h" #pragma code() PWRTLogin('c'); 3.关闭项目并退出wincc: ExitWinCC (); 4.退出运行到wincc资源管理器: DeactivateRTProject (); 按钮变三种颜色 #include "apdefap.h" long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) { #pragma option(mbcs) if(GetTagWord("TX/ZSH001")==1) return 0x0000ff00; else if(GetTagWord("TX/ZSL001")==1) return 0x000000ff; else return 0x00c0c0c0; } 一个调用按钮变色 #include "apdefap.h" long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) { #pragma option(mbcs) if(GetTagWord("NewTag")==0) return 0x0000ff00; else return 0x00ffffff;

WINCC动画脚本集锦

WINCC动画脚本 电机风扇旋转(几何---起始角度): #include "apdefap.h" long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) { static DWORD f=20; if (GetTagBit("DI电机运行信号")) { f= f+30; if (f==360) (f=0); } return f; } 电机风扇旋转(几何---结束角度): #include "apdefap.h" long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) { static DWORD i=80; if (GetTagBit("DI电机运行信号")) { i = i+30; if (i==360) (i=0); } return i; } **物料水平右移动(几何---位置X)(停车后,物料回到原点)** #include "apdefap.h"

long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) { static int a=350; if (GetTagBit("DI电机运行信号") && (a<=730)) { a+=20; if (a>=720) (a=350); } if (!GetTagBit("DI电机运行信号")) (a=350); return a; } 物料水平右移动(几何---位置X)(停车后,物料停在该点) #include "apdefap.h" long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) { static int a=350; if (GetTagBit("DI电机运行信号") && (a<=730)) { a+=20; if (a>=720) (a=350); } return a; } 物料向上移动(几何---位置Y)(停车后,物料停在该点) #include "apdefap.h" long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) { static int b=450; if (GetTagBit("DI电机运行信号") && (b>=290)) {

相关文档