wincc全套脚本总结.docx

上传人:b****9 文档编号:29130271 上传时间:2023-07-20 格式:DOCX 页数:102 大小:52.06KB
下载 相关 举报
wincc全套脚本总结.docx_第1页
第1页 / 共102页
wincc全套脚本总结.docx_第2页
第2页 / 共102页
wincc全套脚本总结.docx_第3页
第3页 / 共102页
wincc全套脚本总结.docx_第4页
第4页 / 共102页
wincc全套脚本总结.docx_第5页
第5页 / 共102页
点击查看更多>>
下载资源
资源描述

wincc全套脚本总结.docx

《wincc全套脚本总结.docx》由会员分享,可在线阅读,更多相关《wincc全套脚本总结.docx(102页珍藏版)》请在冰豆网上搜索。

wincc全套脚本总结.docx

wincc全套脚本总结

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

#include"apdefap.h”

intgscAction(void)

//WINCC:

TAGNAME_SECTION_START

//syntax:

#defineTagNameInAction"DMTagName"

//nextTagID:

1

//WINCC:

TAGNAME_SECTION_END

intvalue;

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:

#definePicNameInAction"PictureName"

//nextPicID:

1

//WINCC:

PICNAME_SECTION_END

return0;

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

说明:

在触发器里选择变量IM_in

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

c:

\iknow\docshare\data\cur_work\http:

\blog.sina。

com。

cn\s\articlelist_1252243325_2_1.html

#include"apdefap.h"

intgscAction(void)

//WINCC:

TAGNAME_SECTION_START

//syntax:

#defineTagNameInAction”DMTagName”

//nextTagID:

1

//WINCC:

TAGNAME_SECTION_END

intvalue;

value=GetTagBit(”IM_in");

if(value==1)

MessageBox(NULL,"请确认三厅相关门是否关好,或者请解锁。

”,"提示框”,MB_OK|MB_ICONEXCLAMATION|MB_SETFOREGROUND|MB_SYSTEMMODAL);

}

//WINCC:

PICNAME_SECTION_START

//syntax:

#definePicNameInAction"PictureName"

//nextPicID:

1

//WINCC:

PICNAME_SECTION_END

return0;

}

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

说明:

在触发器中选择变量触发。

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

char*str_a=NULL;

intHi;

intLo;

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”,”ValueAxisEndValue",Hi);

—————--—————-————————-—-

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

SetTagChar(”TrendTagName1”,”ProcessValueArchive\\PT111”);//Return—Type:

BOOL

SetTagSWord(”TrendHi”,200);

SetTagSWord(”TrendLo",0);

SetTagByte("Trenden",1);

-——-——————————---———————

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

#pragmacode("useadmin。

dll”)

#include”PWRT_API。

H”

#pragmacode()

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

PWRTLogin(’c');

-——-——-——-——--—--——--—-————————--—-—-

-—————6、时间同步——————

voidSetCpuTime()

#pragmacode(”kernel32.dll");

voidGetLocalTime(SYSTEMTIME*lpst);

#pragmacode();

SYSTEMTIMEtime

BOOLret;

//printf("StartfunctionSetCpuTime\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、对话框调用——————

BOOLA;

BOOLB;

HWNDhwnd=NULL;

intRetMsg;

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

}

elseB=0;

}

else

{

}

-——-—---———-—-———-—-———-----——————-—-——-—-

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

#pragmacode(”Winmm.dll”)

VOIDWINAPIPlaySoundA(char*pszSound,char*hmode,DWORDdwflag);

#pragmacode()

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

全局动作

inta;inta1;

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中用CScript调用上述SQL文件,如下所示:

#include";apdefap。

h"

voidOnLButtonDown(char*lpszPictureName,

char*lpszObjectName,

char*lpszPropertyName,

UINTnFlags,intx,inty)

{

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*frompde#hd#t#test;

outputtoe:

test2。

txtFORMATascii

注意:

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

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

voidOnClick(char*lpszPictureName,char*lpszObjectName,char*lpszPropertyName)

{

BOOLz;

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)

{

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

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

if(z!

=0)

{

switch(y)

{

case0:

x=x—4;

if(x<;=0)

y=1;

break;

default:

x=x+4;

if(x>=25)

y=0;

break;

}

}

returnx;

--——-—13、WINCC——如何在程序中动态修改用户密码——————

1、点击“开始”——》“设置”-—》“控制面板”—-》“管理工具”—-》“数据源(ODBC)”,打开ODBC数据源管理器

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

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

#pragmacode(”UseGen。

dll")

#include"USEGENAP.H”

#pragmacode()

LPCMN_ERRORerr;//定义的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事件-————-

用WINDOWAPI函数GetCusorPos获取当前鼠标位置,用GetWindowRect函数获取窗口位置,两值相减得鼠标在WINCCframe上的相对位置。

用全局脚本(设定为1s定时刷新),然后获取要OnMouseOver事件的物体的位置,并与鼠标位置相比较,如一致则触发自己定义的动作.

#include"apdefap。

h”

intgscAction(void)

#pragmacode(”user32。

dll");

BOOLGetCusorPos(POINTlpPoint);//获取鼠标的位置(绝对位置—对应屏幕分辨率)

BOOLGetWindowRect(HWNDhwnd,LPRECTlpRect);//获取窗体位置

#pragmacode();

POINTpPos;

RECTrRec;

HWNDhwnd;

BOOLbRet,bRet2;

longlLeft,lTop,lWidth,lHeight;

longlX,lY;

charszStr[100];

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

if(hwnd==0){printf(”rnError!

WinCcHandleis%d",hwnd);gotoover;}

bRet=GetCursorPos(&pPos);

if(bRet==0)gotoover;

bRet2=GetWindowRect(hwnd,&rRec);

if(bRet2==0)gotoover;

lX=pPos。

x-rRec。

left;//鼠标对{置

lY=pPos。

y—rRec.top;//鼠标位置

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

//printf("TheCurrentCusorPosisx:

%d,y:

%drn",pPos.x,pPos。

y);

//printf(”TheCusorPosinWindowisx:

%d,y:

%drn",pPos。

x—lLeft2,pPos.y-lTop2);

lLeft=GetLeft("NewPdl0。

Pdl”,"Text1");//Return—Type:

longint

lTop=GetTop("NewPdl0.Pdl”,”Text1");//Return—Type:

longint

lWidth=GetWidth("NewPdl0.Pdl”,"Text1”);//Return—Type:

longint

lHeight=GetHeight(”NewPdl0.Pdl”,”Text1");//Return—Type:

longint

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(”TheText1Posisx:

%d,y:

%drn",lLeft2,lTop—lTop2);

over:

return0;

}

———--———-—————-——-———-———--—————————-——

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

1.利用动态向导

2。

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

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

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

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

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

信息到达处理:

如果读取文本成功,则置文本变量MSG。

信息离去处理:

如果MsgNr与上一次相同,则复位MSG,如果不是,则继续保持信息.

具体函数说明请看ODK文档

BOOLGMsgFunction(char*pszMsgData)

#pragmacode("msrtcli.dll”)

#include"msrtapi.h"

#pragmacode();

MSG_TEXT_STRUCTtMeld;

MSG_CSDATA_STRUCTsM;

CMN_ERRORerr;

BOOLbRet;

DWORDdwTextID1;

DWORDdwMsgNum;

charszMsg[255];

#defineTAG_MSG"MSG"

MSG_RTDATA_STRUCTmRT;

memset(&mRT,0,sizeof(MSG_RTDATA_STRUCT));

if(pszMsgData!

=NULL)

{

printf(”Meldung:

%srn”,pszMsgData);

sscanf(pszMsgData,"%ld,%ld,%04d.%02d。

%02d,%02d:

%02d:

%02d:

%03d,%ld,%ld,%ld,%d,%d”,

&mRT。

dwMsgNr,//Meldungsnummer

&mRT.dwMsgState,//StatusMSG_STATE_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,//ZeitdauerderanstehendenMeldung

&mRT.dwCounter,//InternerMeldungsz?

hler

&mRT。

dwFlags,//Flags(intern)

&mRT.wPValueUsed,

&mRT。

wTextValueUsed);

//**************************************************************************************codefordcount

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

dwMsgNum=mRT.dwMsgNr;

printf(”rnTheAlarmMessageNois%d!

rn”,dwMsgNum);

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

if(bRet==TRUE)

{

dwTextID1=sM.dwTextID[0];

printf(”rnTheTextIDofTheMessageNr%dis%d!

rn”,dwMsgNum,dwTextID1);

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

if(bRet==TRUE)

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

printf(”rnTheTextofTextID%dis%s!

rn",dwTextID1,szMsg);

}

}

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

{

dwMsgNum=mRT。

dwMsgNr;

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

//**************************************************************************************codefordcount

//Meldungsdateneinlesen

//Prozesswertelesen,fallsgew?

?

?

?

?

§?

?

?

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.s

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 教育学心理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1