wincc全套脚本总结.docx

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

wincc全套脚本总结.docx

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

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。

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。

w

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

当前位置:首页 > 解决方案 > 工作计划

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

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