您的当前位置:首页正文

wincc-常用C脚本

2023-07-17 来源:爱go旅游网
,,,word,,,完美整理版

.用户注销:

#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资源管理器:

,,,专业资料参考分享

,,,word,,,完美整理版

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;

,,,专业资料参考分享

,,,word,,,完美整理版

}

一个调用按钮变色

#include \"apdefap.h\"

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

{

#pragma option(mbcs)

if(GetTagWord(\"NewTag\")==0)

return 0x0000ff00;

else

return 0x00ffffff;

}

5.结束监控并关闭计算机(会弹出确认对话框)

HWND hWnd = NULL;//Author:Smartsys

,,,专业资料参考分享

,,,word,,,完美整理版

int iRet;

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

iRet=MessageBox(hWnd,\"结束监控并关闭计算机\

\"关闭操作站\

if(iRet==IDYES)

DMExitWinCCEx (DM_SDMODE_POWEROFF);

6.点击事件弹出对话框,通过点击弹出对话框的确定和取消按钮实现对变量的置位或取消:

int r;

r=MessageBox(NULL, \"YES为开,NO为关\确定开命令:\|MB_SYSTEMMODAL);

if (r==IDYES)

SetTagBit(\"TAGNAME\

else

,,,专业资料参考分享

,,,word,,,完美整理版

SetTagBit(\"TAGNAME\

7.开显示关显示:(要在内部变量中建立三个二进制变量COLSE_DISPLAY、DISPLAY_NO和DISPLAY_COMMENT)

// Funktion: Bit in Doppelwort setzen;

if (GetTagBitWait(\"COLSE_DISPLAY\")==1 )

{SetTagBit(\"COLSE_DISPLAY\

SetTagBit(\"DISPLAY_NO\

SetTagBit(\"DISPLAY_COMMENT\

}

else

{SetTagBit(\"COLSE_DISPLAY\

SetTagBit(\"DISPLAY_NO\

SetTagBit(\"DISPLAY_COMMENT\

}

,,,专业资料参考分享

,,,word,,,完美整理版

8.开阀确认:

BOOL a;

a=GetTagBit(\"30T制水启动\"); //Return-Type :short int

if (a==0)

{

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

\== 6)

{ SetTagBit(\"30T制水启动\

//Return-Type :BOOL

}

}

else

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

\

,,,专业资料参考分享

,,,word,,,完美整理版

== 6)

{ SetTagBit(\"30T制水停止\

}}

9.将WinCC运行画面最小化

HWND WinCCHwnd;

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\

//Return-Type: BOOL

,,,专业资料参考分享

,,,word,,,完美整理版

}

else

{SetTagBit(\"hiddVtext\

}

10.打开编辑画面的脚本

#pragma option(mbcs)

#ifdef RUN_ON_WEBNAVIGATOR

#else

HWND hExplorerWindow= NULL;

HWND hRuntimeWindow= NULL;

hExplorerWindow= FindWindow(\"WinCCExplorerFrameWndClass\

hRuntimeWindow= FindWindow(\"PDLRTisAliveAndWaitsForYou\

if(hExplorerWindow)

,,,专业资料参考分享

,,,word,,,完美整理版

{

ShowWindow(hExplorerWindow, SW_MINIMIZE); // This entry is only necessary for Windows 2000

ShowWindow(hExplorerWindow, SW_SHOWNORMAL);

SetForegroundWindow(hExplorerWindow);

}

else

printf(\"rn SetForeground failed\");

#endif

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

方法1:

if( GetTagBit(\"M10\") )

SetTagBit(\"M10\

else

,,,专业资料参考分享

,,,word,,,完美整理版

SetTagBit(\"M10\

方法2:

SetTagBit(\"M1.0\

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

如果为0点击变为1

方法3:

或者做两个按钮,

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

按钮二:事件,直接连接,源,常数0,变量M1.0;

用按钮一覆盖按钮二

12变量每秒加1

DWORD a;

a=GetTagDWord(\"Tank\");

,,,专业资料参考分享

,,,word,,,完美整理版

a+=1;

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

SetTagDWord(\"Tank\

return 0;

}

WINCC动画脚本

电机风扇旋转(几何---起始角度):

#include \"apdefap.h\"

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

lpszPropertyName)

{

static DWORD f=20;

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

f= f+30;

,,,专业资料参考分享

,,,word,,,完美整理版

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

}

,,,专业资料参考分享

,,,word,,,完美整理版

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;

,,,专业资料参考分享

,,,word,,,完美整理版

}

物料水平右移动(几何---位置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)(停车后,物料停在该点)

,,,专业资料参考分享

,,,word,,,完美整理版

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

}

return b;

}

年月日(静态文本)

#include \"apdefap.h\"

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

,,,专业资料参考分享

,,,word,,,完美整理版

lpszPropertyName)

{

time_t timer ;

struct tm *ptm;

char *p;

time(&timer);

ptm =localtime(&timer);

p =SysMalloc(9);

sprintf(p,\"%04d/%02d/%02d\

1,ptm->tm_mday);

return(p);

}

时分秒(静态文本)

#include \"apdefap.h\"

,,,专业资料参考分享

,,,word,,,完美整理版

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

lpszPropertyName)

{

time_t timer ;

struct tm *ptm;

char *p;

time(&timer);

ptm =localtime(&timer);

p =SysMalloc(9);

sprintf(p,\"%02d:%02d:%02d\

;

return(p);

}

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

,,,专业资料参考分享

,,,word,,,完美整理版

#include \"apdefap.h\"

void OnLButtonDown(char* lpszPictureName, char* lpszObjectName,

char* lpszPropertyName, UINT nFlags, int x, int y)

{

#pragma code(\"useadmin.dll\")

#include \"PWRT_API.H\"

#pragma code()

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

}

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

#include \"apdefap.h\"

void OnLButtonDown(char* lpszPictureName, char* lpszObjectName,

char* lpszPropertyName, UINT nFlags, int x, int y)

{

,,,专业资料参考分享

,,,word,,,完美整理版

#pragma code (\"useadmin.dll\")

#include \"PWRT_api.h\"

#pragma code( )

PWRTLogin('c');

}

退出WINCC运行(按钮操作)

#include \"apdefap.h\"

void OnLButtonDown(char* lpszPictureName, char* lpszObjectName,

char* lpszPropertyName, UINT nFlags, int x, int y)

{

{

DeactivateRTProject ();

}

}

,,,专业资料参考分享

,,,word,,,完美整理版

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

#include \"apdefap.h\"

void OnClick(char* lpszPictureName, char* lpszObjectName, char*

lpszPropertyName)

{

DWORD value;

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

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

else value=value+10;

SetTagDWord(\"AI标签\

}

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

#include \"apdefap.h\"

void OnClick(char* lpszPictureName, char* lpszObjectName, char*

,,,专业资料参考分享

,,,word,,,完美整理版

lpszPropertyName)

{

DWORD value;

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

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

else value=value-10;

SetTagDWord(\"AI标签\

}

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

#include \"apdefap.h\"

void OnClick(char* lpszPictureName, char* lpszObjectName, char*

lpszPropertyName)

{

DWORD value;

,,,专业资料参考分享

,,,word,,,完美整理版

HWND hWnd=NULL ;

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

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

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

else MessageBox(hWnd,\"已到达上限值!\错误\

SetTagDWord(\"AI标签\

}

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

#include \"apdefap.h\"

void OnClick(char* lpszPictureName, char* lpszObjectName, char*

lpszPropertyName)

{

DWORD value;

,,,专业资料参考分享

,,,word,,,完美整理版

HWND hWnd=NULL ;

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

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

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

else MessageBox(hWnd,\" 已到达下限值!\错误\

SetTagDWord(\"AI标签\

}

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

#include \"apdefap.h\"

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

lpszPropertyName)

{

#pragma code(\"useadmin.dll\")

,,,专业资料参考分享

,,,word,,,完美整理版

#include \"PWRT_API.H\"

#pragma code()

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

return(0X0);

}

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

#include \"apdefap.h\"

void OnLButtonDown(char* lpszPictureName, char* lpszObjectName,

char* lpszPropertyName, UINT nFlags, int x, int y)

{

HWND hWnd=NULL;

int 上位启动信号;

hWnd=FindWindow(NULL,\"WinCC C-Course\");

if (GetTagBit(\"DI备妥\"))

,,,专业资料参考分享

,,,word,,,完美整理版

{

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

\

MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL);

printf(\"\\r\\nExample 3\\r\\n\");

if (上位启动信号==IDNO) (printf(\"User selected NO button \\r\\n\"));

else (SetTagByte(\"上位启动信号\

}

else

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

MB_OK|MB_ICONHAND|MB_APPLMODAL);

}

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

#include \"apdefap.h\"

,,,专业资料参考分享

,,,word,,,完美整理版

void OnLButtonDown(char* lpszPictureName, char* lpszObjectName,

char* lpszPropertyName, UINT nFlags, int x, int y)

{

HWND hWnd=NULL;

int上位启动信号;

hWnd=FindWindow(NULL,\"WinCC C-Course\");

if (GetTagBit(\"DI备妥\"))

{

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

\

MB_YESNOCANCEL|MB_ICONQUESTION|MB_APPLMODAL);

if (上位启动信号==IDCANCEL) (printf(\"User selected NO button \\r\\n\"));

else

{

,,,专业资料参考分享

,,,word,,,完美整理版

if (上位启动信号==IDYES) (SetTagByte(\"上位启动信号\

else (SetTagByte(\"上位启动信号\

}

}

else

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

MB_OK|MB_ICONHAND|MB_APPLMODAL);

}

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

#include \"apdefap.h\"

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

lpszPropertyName)

{

static int h=50;

,,,专业资料参考分享

,,,word,,,完美整理版

static int u=0;

,,,专业资料参考分享

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

{

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

{

(h-=2);

return h;

}

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

{

(u+=2);

return u;

}

,,,word,,,完美整理版

u=0;

h=50;

return h;

return u;

}

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

h=50;

u=0;

return h;

return u;

}

}

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

,,,专业资料参考分享

,,,word,,,完美整理版

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

return h;

}

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

,,,word,,,完美整理版

{

(u-=2);

return u;

,,,专业资料参考分享

}

u=125;

h=75;

return h;

return u;

}

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

h=75;

u=125;

return h;

,,,word,,,完美整理版

return u;

}

}

**显示层按钮**

Sub

X6309X94AE2X0000X0000_X6309X94AE2X0000X60C5_X6309X94AE2X0000X

653E_OnLButtonDown(ByVal Item, ByVal Flags, ByVal x, ByVal y)

Dim objScreen

Dim CountLayer

Set objScreen = HMIRuntime.Screens(\"layer\")

For CountLayer=1 To 32 Step 1

objScreen.Layers(CountLayer).Visible = vbFalse

Next

objScreen.Layers(n).Visible = vbTrue

,,,专业资料参考分享

,,,word,,,完美整理版

End Sub

n=层数+1

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

**打印按钮**

#include \"apdefap.h\"

void OnLButtonDown(char* lpszPictureName, char* lpszObjectName,

char* lpszPropertyName, UINT nFlags, int x, int y)

{

WinExec(\"PRTSCR.EXE -hardcopy\

}

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

#include \"apdefap.h\"

void OnClick(char* lpszPictureName, char* lpszObjectName, char*

lpszPropertyName)

,,,专业资料参考分享

,,,word,,,完美整理版

,,,专业资料参考分享

{

char* opentag=\"DI1电机运行信号\";

char* closetag=\"DI2电机运行信号\";

BOOL open,close;

open = GetTagBit(opentag);

close = GetTagBit(closetag);

if (open)

return CO_GREEN;

if (close)

return CO_BLUE;

因篇幅问题不能全部显示,请点此查看更多更全内容