WINCC几个常用C语言编程
Wincc界面设计——C脚本实践

Wincc界面设计——C脚本实践简介Wincc是一款用于人机界面设计的软件,通过使用C脚本,可以实现更加复杂的功能和交互。
本文将介绍如何在Wincc界面设计中实践C脚本的使用。
C脚本基础在开始使用C脚本之前,需要了解C语言的基础知识。
C脚本是一种用于编写Wincc界面逻辑的脚本语言,其语法和C语言相似。
熟悉C语言的人员可以更快地上手C脚本的编写。
C脚本实践以下是一些常见的C脚本实践示例:1. 按钮点击事件void Button_Click(){// 点击按钮后执行的代码// ...}在Wincc界面中,可以为按钮添加点击事件。
当按钮被点击时,会调用`Button_Click`函数,可以在该函数中编写相应的逻辑代码。
2. 数据处理double CalculateAverage(double[] data, int length){double sum = 0;for (int i = 0; i < length; i++){sum += data[i];}return sum / length;}在Wincc界面中,可以使用C脚本进行数据处理。
上述示例代码演示了如何计算一组数据的平均值。
可以根据实际需求编写相应的数据处理函数。
3. 界面更新void UpdateLabel(){double value = GetSensorValue();Label.SetText(value);}C脚本还可以用于更新界面元素的内容。
上述示例代码演示了如何根据传感器的值来更新标签的文本。
通过调用相应的函数或方法,可以实现界面元素的动态更新。
总结通过使用C脚本,可以在Wincc界面设计中实现更加复杂的功能和交互。
本文介绍了C脚本的基础知识以及一些常见的实践示例。
在实际应用中,可以根据需求灵活运用C脚本,提升Wincc界面的设计和交互体验。
Wincc中常用的C动作

1.用户注销:#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 ();5.结束监控并关闭计算机(会弹出确认对话框)HWND hWnd = NULL;//Author:Smartsysint 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);elseSetTagBit("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: BOOLSetTagBit("DISPLAY_COMMENT",0);}else{SetTagBit("COLSE_DISPLAY",1);SetTagBit("DISPLAY_NO",1); //Return-Type: BOOLSetTagBit("DISPLAY_COMMENT",0);}8.开阀确认:BOOL a;a=GetTagBit("30T制水启动"); //Return-Type :short intif (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运行画面最小化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#elseHWND 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 2000ShowWindow(hExplorerWindow, SW_SHOWNORMAL);SetForegroundWindow(hExplorerWindow);}elseprintf("\r\n SetForeground failed");#endif11.如何在WINCC中制作一个保持型按钮方法1:if( GetTagBit("M10") )SetTagBit("M10",0);elseSetTagBit("M10",1);方法2:SetTagBit("M1.0",(SHORT)!GetTagBit("M1.0"));求反指令,如果为1点击变为0,如果为0点击变为1方法3:或者做两个按钮,按钮一:显示,直接连接m1.0,是--不显示,否--显示。
Wincc常用C脚本及常用功能

Wincc常用C脚本及常用功能打开用户管理器ProgramExecute("Passcs.exe"); 取消激活#include "apdefap.h"void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName,UINT nFlags, int x, int y){#pragma option(mbcs)HWND hwnd=NULL;int iRet;hwnd=FindWindow(NULL,"WinCC-运行系统 - "); //获得句柄iRet=MessageBox(hwnd,"是否取消激活?","Deactivate",MB_OKCANCEL|MB_ICONWARNING|MB_APPLMODAL);if(iRet==1)DeactivateRTProject (); //Return-Type: BOOL}关闭计算机#include "apdefap.h"void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName,UINT nFlags, int x, int y){#pragma option(mbcs)HWND hwnd=NULL;int iRet;hwnd=FindWindow(NULL,"WinCC-运行系统 - ");iRet=MessageBox(hwnd,"是否关闭计算机?","ShutDown",MB_OKCANCEL|MB_ICONWARNING|MB_APPLMODAL);if(iRet==1)DMExitWinCCEx(DM_SDMODE_SYSTEM); }==================================================================== ==登陆代码:#pragma code(“useadmin.dll”)#include <pwrt_api.h>#pragma code()PWRTLogin (…e?);==================================== 取消激活(Deactivate)DeactivateRTProject();====================================== Wincc变量操作GetTagDWord(“变量名称”); 获取Wincc变量值SetTagDWord(“变量“,设定值); 设置Wincc变量对文本读写操作写操作#include "apdefap.h"void OnLButtonUp(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName,UINT nFlags, int x, int y) {#pragma option(mbcs)FILE* lpFile;char *shuzhu[6]={"tag_1","tag_2","tag_3","tag_4","tag_5","tag_6"};char* lpszStr;int i,j;lpszStr=SysMalloc(60); //Return-Type: void*lpFile = fopen("D:\\test.txt", "w+");for(i=0;i<6;i++){lpszStr=GetTagChar(shuzhu[i]); strcat(lpszStr,"\r\n");if(lpFile == NULL){ printf("can not open file\r\n"); return;}fprintf(lpFile, lpszStr); }SysFree(lpszStr);fclose(lpFile);}读操作#include "apdefap.h"void OnLButtonUp(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName,UINT nFlags, int x, int y) {#pragma option(mbcs)char* shuzhu[6]={"tag_1","tag_2","tag_3","tag_4","tag_5","tag_6"}; char tmp[255];int i=0;int ChrNumLine=38;FILE *fp;fp=fopen("D:\\test.txt","r"); if (fp==NULL){return;}else{rewind(fp);while(!feof(fp)){fgets(tmp,ChrNumLine,fp);SetTagChar(shuzhu[i],tmp);i++;}}fclose(fp);}画面窗口显示界面切换SetPictureName(lpszPictureName,"PicWindow_button","produce_manage_bu tton.pdl");SetVisible(lpszPictureName,"PicWindow_button",1);注:PicWindow_button是画面窗口名称;produce_manage_button.pdl是要显示的子画面。
Wincc图形界面制作---C脚本的详细解读

Wincc图形界面制作---C脚本的详细解读1. 引言本文档旨在详细解读Wincc图形界面制作中C脚本的相关知识,以便于开发人员更好地理解和应用C脚本,提高Wincc项目开发效率。
本文档适用于具有一定Wincc使用经验和C脚本编程基础的用户。
2. C脚本概述在Wincc中,C脚本是一种扩展语言,用于实现图形界面与实际工程数据之间的交互。
通过编写C脚本,可以实现对Wincc内置对象的属性、方法和事件的操作,从而实现复杂的业务逻辑。
C脚本在Wincc项目中具有广泛的应用,例如:数据处理、界面动态刷新、定时任务等。
3. C脚本基本语法C脚本的基本语法与C语言类似,主要包括数据类型、变量、运算符、控制结构、函数等。
以下简要介绍C脚本的基本语法:3.1 数据类型C脚本支持以下数据类型:- 整型(int)- 浮点型(float)- 字符型(char)- 布尔型(bool)- 字符串型(string)- 枚举型(enum)3.2 变量C脚本中的变量分为全局变量和局部变量。
全局变量在脚本中定义,可在整个脚本中访问;局部变量仅在定义它们的函数内部有效。
变量声明时需指定数据类型。
3.3 运算符C脚本支持以下运算符:- 算术运算符:+、-、*、/、%- 关系运算符:==、!=、<、<=、>、>= - 逻辑运算符:&&、||、!- 位运算符:&、|、^、~、<<、>>3.4 控制结构C脚本支持以下控制结构:- 条件语句:if、if-else、switch- 循环语句:for、while、do-while- 跳转语句:break、continue、goto3.5 函数C脚本中的函数用于实现特定功能。
函数定义包括返回类型、函数名、参数列表和函数体。
函数调用时,需传递与参数列表匹配的实参。
4. Wincc内置对象和C脚本Wincc提供了丰富的内置对象,如变量、趋势图、报警等。
wincc 几个常用的小功能的C代码

1:在WINCC运行后的画面总貌上加了计算器功能:方便操作人员用。
做一个按扭后,添加 C脚本:{HWND Hwnd;BOOL bRet;Hwnd=FindWindow(NULL,"Calculator");if (!Hwnd){ProgramExecute("CALC.exe");Hwnd=FindWindow(NULL,"Calculator");if (Hwnd){printf("\r\n%d",Hwnd);bRet=SetWindowPos(Hwnd,HWND_TOPMOST,300,300,200,200,SWP_NOSIZE);if (!bRet) printf("\r\nSetWindowPos Error!");}}}如果在C脚本中仅仅有一句ProgramExecute("CALC.exe")则运行后点击该按扭则出来计算器,此时不关计算器就切换画面,则计算器都在后台运行。
最初我这样做关闭WINCC运行画面后发现后面有几十个计算器都没关。
所以在脚本中加入使计算器必须显示在WINDOW的激活层上。
二:当对按钮操作需要二次确认时得自己一个个做小窗口,很麻烦。
直接在需要二次确认的按钮添加脚本:{HWND Hwnd;Hwnd = FindWindow(NULL,"WinCC-运行系统 - "); //英文版变为"WinCC-Runtime - "if (!Hwnd) Hwnd = FindWindow(NULL,"WinCC-Runtime - ");if (!Hwnd) printf("\r\nGetWinCC Handle Failed!");MessageBox(Hwnd,"Error Text","My ErrorBox",MB_OK|MB_ICONEXCLAMATION|MB_SETFOREGROUND|MB_SYSTEMMODAL);}WINDOWS中提供的标准对话框我知道的有三种MessageBox(Hwnd,"Error Text","My ErrorBox",MB_OK|MB_ICONEXCLAMATION|MB_SETFOREGROUND|MB_SYSTEMMODAL);MB_OK///MB_YESNO///MB_YESNOCANCEL分别是错误框,询问框和YES/NO/CANCEL三按钮询问窗口功能可以分别自己尝试,把相应的控制功能和按钮结合起来就可以。
wincc的c语言的选择结构

wincc的c语言的选择结构
WinCC是西门子公司的一款用于监控和控制系统的软件平台,
它通常用于工业自动化领域。
在WinCC中使用C语言编写的代码通
常用于定制化功能和特定的控制逻辑。
选择结构是C语言中的一种
控制结构,主要包括if语句和switch语句。
在WinCC中使用C语言的选择结构,可以通过if语句实现条件
判断和分支控制。
if语句的基本语法是if(条件表达式) {语句块},其中条件表达式为真时执行语句块中的代码,否则跳过。
在WinCC 中,可以利用if语句来根据特定的条件执行不同的操作,比如根据
传感器数据来触发报警或者执行特定的控制逻辑。
另外,WinCC中也可以使用switch语句来实现多条件的选择结构。
switch语句的基本语法是switch(表达式) {case 值1: 语句
块1; break; case 值2: 语句块2; break; default: 默认语句
块; },其中根据表达式的值来匹配不同的case,执行相应的语句块。
在WinCC中,switch语句可以用于根据不同的输入信号执行不
同的操作,比如根据不同的控制模式来选择不同的控制策略。
总之,在WinCC中使用C语言的选择结构,可以通过if语句和
switch语句来实现条件判断和分支控制,从而实现定制化的功能和特定的控制逻辑。
这些选择结构可以帮助工程师根据不同的条件来执行不同的操作,提高系统的灵活性和可定制性。
Wincc画面制作中C脚本的应用分析

Wincc画面制作中C脚本的应用分析Wincc是一种用于人机界面(HMI)开发的软件,它提供了丰富的功能和工具,以便于用户制作交互性强的画面。
在Wincc画面制作中,C脚本是一种常用的编程语言,用于实现画面的特定功能和逻辑。
1. C脚本的基本概念和语法C脚本是一种类似于C语言的编程语言,它具有简单易学的特点。
在Wincc画面制作中,C脚本用于处理各种事件和操作,例如按钮点击、数据读写、画面切换等。
C脚本的语法与C语言基本相同,包括变量声明、条件语句、循环语句、函数定义等。
通过使用C脚本,用户可以根据自己的需求编写特定的逻辑代码,实现画面的自定义功能。
2. C脚本在Wincc画面制作中的应用场景2.1 数据处理和计算在Wincc画面制作中,常常需要对实时数据进行处理和计算,例如计算平均值、最大值、最小值等。
通过使用C脚本,可以方便地实现这些功能,提高画面的实用性和可读性。
2.2 事件处理和交互操作用户在与画面进行交互时,往往需要对按钮点击、鼠标移动等事件进行处理。
通过使用C脚本,可以捕捉这些事件,并编写相应的逻辑代码,实现画面的交互操作。
2.3 画面切换和导航在复杂的画面系统中,用户可能需要进行画面之间的切换和导航。
通过使用C脚本,可以实现画面之间的跳转和导航,提高用户的操作效率和便捷性。
3. C脚本的优势和注意事项3.1 灵活性和可扩展性C脚本作为一种编程语言,具有很高的灵活性和可扩展性。
用户可以根据自己的需求编写特定的逻辑代码,实现画面的自定义功能。
3.2 需要一定的编程知识使用C脚本进行画面制作需要一定的编程知识和经验。
对于不熟悉编程的用户来说,和掌握C脚本可能需要一定的时间和精力投入。
3.3 注意安全性和稳定性在使用C脚本进行画面制作时,需要注意安全性和稳定性。
编写的代码应该经过充分的测试和验证,以确保其能够正常运行并不会对系统造成不良影响。
4. 结论C脚本在Wincc画面制作中具有广泛的应用,可以实现画面的自定义功能和逻辑。
wincc中常用C脚本

查看文章wincc常用C动作2010-06-27 10:311.用户注销:#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 ();5.结束监控并关闭计算机(会弹出确认对话框)HWND hWnd = NULL;//Author:Smartsysint 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);elseSetTagBit("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: BOOLSetTagBit("DISPLAY_COMMENT",0);}else{SetTagBit("COLSE_DISPLAY",1);SetTagBit("DISPLAY_NO",1); //Return-Type: BOOLSetTagBit("DISPLAY_COMMENT",0);}8.开阀确认:BOOL a;a=GetTagBit("30T制水启动"); //Return-Type :short intif (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运行画面最小化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#elseHWND 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 2000ShowWindow(hExplorerWindow, SW_SHOWNORMAL);SetForegroundWindow(hExplorerWindow);}elseprintf("\r\n SetForeground failed");#endif11.如何在WINCC中制作一个保持型按钮方法1:if( GetTagBit("M10") )SetTagBit("M10",0);elseSetTagBit("M10",1);方法2:SetTagBit("M1.0",(SHORT)!GetTagBit("M1.0"));求反指令,如果为1点击变为0,如果为0点击变为1方法3:或者做两个按钮,按钮一:显示,直接连接m1.0,是--不显示,否--显示。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
WINCC几个常用C语言编程
全局脚本编程(按钮连续增减)
说明:1、建立全局脚本函数
2、建立全局动作C脚本
3、在启动画面的打开画面中调用全局脚本函数
4、在计算机的启动选项中选中全局脚本
全局脚本函数InitAction ()
extern char tagname[30] = " ";
extern SHORT count = 0;
extern FLOAT low = 0;
extern FLOAT high = 0;
extern FLOAT step = 0;
void InitAction()
按钮左键按下连续增加
extern char tagname[30];
extern SHORT count;
extern FLOAT low;
extern FLOAT high;
extern FLOAT step;
strcpy(tagname,"S32i_varia_but_04");
count = 1;
low = 0;
high =1400;
step =0.5;
按钮左键按下连续减少
extern char tagname[30];
extern SHORT count;
extern FLOAT low;
extern FLOAT high;
extern FLOAT step;
strcpy(tagname,"S32i_varia_but_04"); count = 2;
low = 0;
high =1400;
step =0.5;
按钮左键松开停止增减
extern SHORT count;
count=0;
全局动作C脚本(counter.pas)
#include "apdefap.h"
int gscAction( void )
{
extern char tagname[30];
extern SHORT count;
extern FLOAT low;
extern FLOAT high;
extern FLOAT step;
FLOAT value;
if((count==1)||(count==2)) {
//get current value
value = GetTagFloat (tagname);
if(count==1)
{ //inc
value = value+step;
if(value>high) (value=high); //high lim it
}//if
if (count==2)
{ //dec
value = value-step;
if(value<low) (value=low); //low limi t
}//if
SetTagFloat (tagname,value);
}//if
return(0);
}
全局脚本函数(InitAction)文件:
C脚本(counter.pas)文件:
按钮左键连续增加文件:
按钮左键松开文件:
C脚本编程(按钮按击增减)
1、直接调用C动作方式实现:
#include"apdefap.h"
void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, ch ar* lpszPropertyName, UINT nFlags, int x, int y)
{
FLOAT value;
value=GetTagFloat("S32i_varia_but_00"); //get tag value
if (value>1300) (value=1400); //check limit
else value=value+100; //inc valu e
SetTagFloat("S32i_varia_but_00",value); //set new value
2、调用函数方式实现(incdecvalue):
FLOAT value;
value=GetTagFloat ("S32i_varia_but_04");
IncDecValue(&value,0,1400,100,1);
SetTagFloat ("S32i_varia_but_04",value);
项目函数(incdecvalue)
void IncDecValue(FLOAT *value,FLOAT low,FLOAT high,FLOAT step,DWORD a)
{
FLOAT v;
v=*value; //get current value
switch(a){
case0: {
if (v<step) (v=0); //low limit
else v=v-step; //decrement
} //case 0
break;
case1:{
if (v>(high-step))
(v=high); //high limit
else v=v+step; //increment
}//case 1
break;
}//switch
*value=v; //return
}
项目函数(incdecvalue)文件:
C脚本编程(按钮切换开关):
#include "apdefap.h"
void OnLButtonDown(char* lpszPictureName, char* lpszObjectName, ch ar* lpszPropertyName, UINT nFlags, int x, int y)
{
BOOL state; //flip tag
state = !GetTagBit("BINi_varia_but_16"),
SetTagBit("BINi_varia_but_16",(SHORT)state);
}
按钮切换开关文件:。