视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
wincc常用C脚本..
2025-09-29 04:18:59 责编:小OO
文档
.用户注销:

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

}

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 )

{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.开阀确认:

BOOL a;

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

if (a==0)

{

if(MessageBox(NULL,"真的要启动制水吗?

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

//Return-Type :BOOL

}

}

else

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

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

}}

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",TRUE); //Return-Type: BOOL

//Return-Type: BOOL

}

else

{SetTagBit("hiddVtext",FALSE);

}

10.打开编辑画面的脚本

#pragma option(mbcs)

#ifdef RUN_ON_WEBNAVIGATOR

#else

   HWND hExplorerWindow= NULL;

   HWND hRuntimeWindow= NULL;

   hExplorerWindow= FindWindow("WinCCExplorerFrameWndClass",NULL);

   hRuntimeWindow= FindWindow("PDLRTisAliveAndWaitsForYou",NULL);

   if(hExplorerWindow)

      {

      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",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

DWORD a;

a=GetTagDWord("Tank");

a+=1;

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

SetTagDWord("Tank",a);

return 0; 

}

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

   b-=10;

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

}     

return b;

}

年月日(静态文本)

#include "apdefap.h"

 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,"%04d/%02d/%02d",ptm->tm_year-100+2000,ptm->tm_mon+1,ptm->tm_mday);

return(p);

}

 

时分秒(静态文本)

#include "apdefap.h"

 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",ptm->tm_hour,ptm->tm_min,ptm->tm_sec);     

return(p);

}

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

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

{

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

}

}

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

#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标签",value);    

}

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

#include "apdefap.h"

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

{

DWORD value;

value=GetTagDWord("AI标签");  

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

else value=value-10;

SetTagDWord("AI标签",value);    

}

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

#include "apdefap.h"

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

{

DWORD value;

HWND hWnd=NULL ;  

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

value=GetTagDWord("AI标签");  

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

else MessageBox(hWnd,"已到达上限值!错误",MB_OK|MB_ICONWARNING|MB_APPLMODAL);

SetTagDWord("AI标签",value);    

}

 

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

#include "apdefap.h"

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

{

DWORD value;

HWND hWnd=NULL ;  

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

value=GetTagDWord("AI标签");  

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

else MessageBox(hWnd," 已到达下限值!错误",MB_OK|MB_ICONWARNING|MB_APPLMODAL);

SetTagDWord("AI标签",value);    

}

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

#include "apdefap.h"

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

{

#pragma code("useadmin.dll")

#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备妥"))

{

上位启动信号=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("上位启动信号",1));

}

else

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

           MB_OK|MB_ICONHAND|MB_APPLMODAL);

}

**询问框(最好用于单机启动,组启也可,3个按钮,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备妥"))

{

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

                        MB_YESNOCANCEL|MB_ICONQUESTION|MB_APPLMODAL);

    if (上位启动信号==IDCANCEL)   (printf("User selected NO button \\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);

return h;

}

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

{

(u+=2);

return u;

}

u=0;

h=50;

return h;

return u;

}

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

h=50;

u=0;

return h;

return u;

}

}

 

 

 

 **搅拌器左侧扇页(几何—位置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);

return h;

}

 

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

{

(u-=2);

return u;

}

u=125;

h=75;

return h;

return u;

}

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

h=75;

u=125;

return h;

return u;

}

}

**显示层按钮**

Sub X6309X94AE2X0000X0000_X6309X94AE2X0000X60C5_X6309X94AE2X0000X653E_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

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",SW_SHOWNORMAL);

}

 

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

#include "apdefap.h"

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

{

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;下载本文

显示全文
专题