文档库 最新最全的文档下载
当前位置:文档库 › wincc常用C脚本

wincc常用C脚本

wincc常用C脚本
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)

{

if(MessageBox(NULL,"真的要启动制水吗?","操作提示

",MB_YESNO|MB_ICONQUESTION|MB_SETFOREGROUND|MB_SYSTEMMODAL)==6)

{SetTagBit("30T制水启动",1);

//Return-Type:BOOL

}

}

else

{if(MessageBox(NULL,"真的要停止制水吗?","操作提示

",MB_YESNO|MB_ICONQUESTION|MB_SETFOREGROUND|MB_SYSTEMMODAL)==6)

{SetTagBit("30T制水停止",1);

}}

9.将WinCC运行画面最小化

HWNDWinCCHwnd;

WinCCHwnd=FindWindow(NULL,"WinCC-Runtime-");//如果运行语言为英文

if(WinCCHwnd==0)WinCCHwnd=FindWindow(NULL,"WinCC-运行系统-");//如果运行语言为中文CloseWindow(WinCCHwnd);

10.显示或不显示(其中hiddVtext为内部的二进制变量)

if(GetTagBit("hiddVtext")==0)//Return-Type:BOOL

{

SetTagBit("hiddVtext",TRUE);//Return-Type:BOOL

//Return-Type:BOOL

}

else

{SetTagBit("hiddVtext",FALSE);

}

10.打开编辑画面的脚本

#pragmaoption(mbcs)

#ifdefRUN_ON_WEBNAVIGATOR

#else

???HWNDhExplorerWindow=NULL;

???HWNDhRuntimeWindow=NULL;

???hExplorerWindow=FindWindow("WinCCExplorerFrameWndClass",NULL);

???hRuntimeWindow=FindWindow("PDLRTisAliveAndWaitsForYou",NULL);

???if(hExplorerWindow)

??????{

??????ShowWindow(hExplorerWindow,SW_MINIMIZE);//ThisentryisonlynecessaryforWindows2000 ??????ShowWindow(hExplorerWindow,SW_SHOWNORMAL);

??????SetForegroundWindow(hExplorerWindow);

???}

???else

??????printf("rnSetForegroundfailed");

#endif

11.如何在WINCC中制作一个保持型按钮

方法1:

if(GetTagBit("M10"))

???SetTagBit("M10",0);

else

???SetTagBit("M10",1);

方法2:

SetTagBit("M1.0",(SHORT)!GetTagBit("M1.0"));

求反指令,如果为1点击变为0,

如果为0点击变为1

方法3:

或者做两个按钮,

按钮一:显示,直接连接m1.0,是--不显示,否--显示。事件,直接连接,源,常数1,变量M1.0; 按钮二:事件,直接连接,源,常数0,变量M1.0;

用按钮一覆盖按钮二

12变量每秒加1

DWORDa;

a=GetTagDWord("Tank");

a+=1;

if(a>100)(a=0);

SetTagDWord("Tank",a);

return0;

}

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

}

returnf;

}

电机风扇旋转(几何---结束角度):

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

}

returni;

}

**物料水平右移动(几何---位置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);??

returna;

}

物料水平右移动(几何---位置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);

}????

returna;

}

物料向上移动(几何---位置Y)(停车后,物料停在该点)

#include"apdefap.h"

?long_main(char*lpszPictureName,char*lpszObjectName,char*lpszPropertyName)

{

static?int?b=450;

if?(GetTagBit("DI电机运行信号")?&&(b>=290))?{?

??b-=10;

if?(b<=280)?(b=450);

}????

returnb;

}

年月日(静态文本)

#include"apdefap.h"

?char*_main(char*lpszPictureName,char*lpszObjectName,char*lpszPropertyName)

{

time_t?timer;

structtm*ptm;

char*p;

time(&timer);

ptm=localtime(&timer);

p=SysMalloc(9);

sprintf(p,"%04d/%02d/%02d",ptm->tm_year-100+2000,ptm->tm_mon+1,ptm->tm_mda

y);

return(p);

}

时分秒(静态文本)

#include"apdefap.h"

?char*_main(char*lpszPictureName,char*lpszObjectName,char*lpszPropertyName)

{

time_t?timer;

structtm*ptm;

char*p;

time(&timer);

ptm=localtime(&timer);

p=SysMalloc(9);

sprintf(p,"%02d:%02d:%02d",ptm->tm_hour,ptm->tm_min,ptm->tm_sec);?????

return(p);

}

登陆到指定的用户名无须手动输入(按钮操作)

#include"apdefap.h"

voidOnLButtonDown(char*lpszPictureName,char*lpszObjectName,char*lpszProperty

Name,UINTnFlags,intx,inty)

{

#pragmacode("useadmin.dll")

#include"PWRT_API.H"

#pragmacode()

PWRTSilentLogin("用户名","口令");

}

**显示登陆对话框无须热键(按钮操作)**

#include"apdefap.h"

voidOnLButtonDown(char*lpszPictureName,char*lpszObjectName,char*lpszProperty

Name,UINTnFlags,intx,inty)

{

#pragmacode("useadmin.dll")

#include"PWRT_api.h"

#pragmacode()

?PWRTLogin('c');

}

退出WINCC运行(按钮操作)

#include"apdefap.h"

voidOnLButtonDown(char*lpszPictureName,char*lpszObjectName,char*lpszProperty

Name,UINTnFlags,intx,inty)

{

?{

?DeactivateRTProject();

}

}

单位递增按钮(到上限不提示出错)

#include"apdefap.h"

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

{

DWORDvalue;

value=GetTagDWord("AI标签");?

if(value>90)(value=上限);

elsevalue=value+10;

SetTagDWord("AI标签",value);???

}

单位递减按钮(到下限不提示出错)

#include"apdefap.h"

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

{

DWORDvalue;

value=GetTagDWord("AI标签");?

if(value<10)(value=下限);

elsevalue=value-10;

SetTagDWord("AI标签",value);???

}

**单位递增按钮(到上限提示出错)**

#include"apdefap.h"

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

{

DWORDvalue;

HWNDhWnd=NULL;?

hWnd=FindWindow(NULL,"Wincc-运行系统-");

value=GetTagDWord("AI标签");?

if(value<=90)(value=value+10);

elseMessageBox(hWnd,"已到达上限值!","错误

",MB_OK|MB_ICONWARNING|MB_APPLMODAL);

SetTagDWord("AI标签",value);???

}

**单位递减按钮(到下限提示出错)**

#include"apdefap.h"

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

{

DWORDvalue;

HWNDhWnd=NULL;?

hWnd=FindWindow(NULL,"Wincc-运行系统-");

value=GetTagDWord("AI标签");?

if(value>0)(value=value-10);

elseMessageBox(hWnd,"已到达下限值!","错误

",MB_OK|MB_ICONWARNING|MB_APPLMODAL);

SetTagDWord("AI标签",value);???

}

**自动登陆到指定的用户(画面属性--其它—授权)**

#include"apdefap.h"

?long_main(char*lpszPictureName,char*lpszObjectName,char*lpszPropertyName)

{

#pragmacode("useadmin.dll")

#include"PWRT_API.H"

#pragmacode()

PWRTSilentLogin("用户名","口令");

return(0X0);

}

**询问框(最好用于单机启动,组启也可,2个按钮,NO不操作)**

#include"apdefap.h"

voidOnLButtonDown(char*lpszPictureName,char*lpszObjectName,char*lpszProperty

Name,UINTnFlags,intx,inty)

{

HWNDhWnd=NULL;

int上位启动信号;

hWnd=FindWindow(NULL,"WinCCC-Course");

if(GetTagBit("DI备妥"))

{

上位启动信号=MessageBox(hWnd,"电源已备妥,您现在确定要启动吗?","启动!", ???????????????MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL);

printf("\r\nExample3\r\n");

???if(上位启动信号==IDNO)??(printf("UserselectedNObutton\r\n"));

???else(SetTagByte("上位启动信号",1));

}

else

MessageBox(hWnd,"电源未备妥,请查证后重试!","启动!",

??????????MB_OK|MB_ICONHAND|MB_APPLMODAL);

}

**询问框(最好用于单机启动,组启也可,3个按钮,NO复位)**

#include"apdefap.h"

voidOnLButtonDown(char*lpszPictureName,char*lpszObjectName,char*lpszProperty

Name,UINTnFlags,intx,inty)

{

HWNDhWnd=NULL;

int上位启动信号;

hWnd=FindWindow(NULL,"WinCCC-Course");

if(GetTagBit("DI备妥"))

{

上位启动信号=MessageBox(hWnd,"电源已备妥,您现在确定要启动吗?","启动!",

???????????????????????MB_YESNOCANCEL|MB_ICONQUESTION|MB_APPLM

ODAL);

???if(上位启动信号==IDCANCEL)??(printf("UserselectedNObutton\r\n"));?

???else

????????{

?????????if?(上位启动信号==IDYES)?(SetTagByte("上位启动信号",1));

?????????else?(SetTagByte("上位启动信号",0));

?????????}

}

else

MessageBox(hWnd,"电源未备妥,请查证后重试!","启动!",

??????????MB_OK|MB_ICONHAND|MB_APPLMODAL);

}

**搅拌器左侧扇页(几何—宽度)**

#include"apdefap.h"

?long_main(char*lpszPictureName,char*lpszObjectName,char*lpszPropertyName)

{

static?int?h=50;

static?int?u=0;

if(GetTagBit("DI电机运行信号"))

{

if((h>0)&&(h<=50))

{

(h-=2);

returnh;

}

if((u>=0)&&(u<50))

{

(u+=2);

returnu;

}

u=0;

returnh;

returnu;

}

if(!GetTagBit("DI电机运行信号")){

h=50;

u=0;

returnh;

returnu;

}

}

?**搅拌器左侧扇页(几何—位置X,右侧扇页没有位置变化)**

#include"apdefap.h"

?long_main(char*lpszPictureName,char*lpszObjectName,char*lpszPropertyName)

{

static?int?h=75;

static?int?u=125;

if(GetTagBit("DI电机运行信号"))

{

if((h>=75)&&(h<125))

{

(h+=2);

returnh;

}

if((u<=125)&&(u>75))

{

(u-=2);

returnu;

}

u=125;

h=75;

returnh;

}

if(!GetTagBit("DI电机运行信号")){

h=75;

u=125;

returnh;

returnu;

}

}

**显示层按钮**

SubX6309X94AE2X0000X0000_X6309X94AE2X0000X60C5_X6309X94AE2X0000X653E _OnLButtonDown(ByValItem,ByValFlags,ByValx,ByValy)????????

DimobjScreen

DimCountLayer

SetobjScreen=HMIRuntime.Screens("layer")

ForCountLayer=1To32Step1

https://www.wendangku.net/doc/709950874.html,yers(CountLayer).Visible=vbFalse

Next

https://www.wendangku.net/doc/709950874.html,yers(n).Visible=vbTrue

EndSub

n=层数+1

初始画面程序(画面空地--属性--事件--其它--打开画面--动作)

**打印按钮**

#include"apdefap.h"

voidOnLButtonDown(char*lpszPictureName,char*lpszObjectName,char*lpszProperty

Name,UINTnFlags,intx,inty)

{

WinExec("PRTSCR.EXE-hardcopy",SW_SHOWNORMAL);

}

**一个圈代表电机两种状态**

#include"apdefap.h"

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

{

char*opentag="DI1电机运行信号"; ??????char*closetag="DI2电机运行信号";

??????BOOLopen,close;

??????open=GetTagBit(opentag);

??????close=GetTagBit(closetag);

??????if(open)

???????returnCO_GREEN;

???????if(close)

??????returnCO_BLUE;

相关文档