wincc中的C例题

合集下载

WINCC C脚本

WINCC C脚本

Geometry -简短描述使用Geometry组中的函数可以修改或调用对象的大小、位置和其它几何属性。

1. long int GetActualPointLeft(LPCTSTR lpszPictureName, LPCTSTR lpszObjectName)函数,指定多边形或折线中当前位置的X轴数值。

读出对象位置的实例{long lPos;//获得对象的X轴位置lPos= GetLeft(lpszPictureName,"WinCCLogo");//自定义代码//在那里用户可以使用返回值做某事...}GetLeft函数参数:“lpszPictureName”是在其中组态该对象的画面的名称。

“WinCCLogo”是该对象的名称。

1).读出对象的当前X轴位置以及lPos中的缓冲区。

2).执行处理返回值的自定义代码。

2. long int GetActualPointTop(LPCTSTR lpszPictureName, LPCTSTR lpszObjectName)函数,指定多边形或折线中当前顶点的Y轴数值。

读出对象位置的实例{long lPos;//获得对象的Y轴位置lPos= GetTop(lpszPictureName,"WinCCLogo");//自定义代码//在那里用户可以使用返回值做某事...}GetTop函数参数:“lpszPictureName”是在其中组态该对象的画面的名称。

“WinCCLogo”是该对象的名称。

3. long int GetBoxCount(LPCTSTR lpszPictureName, LPCTSTR lpszObjectName)函数,指定复选框和单选框的数字域。

参数lpszPictureName画面名lpszObjectName4. long int GetDirection(LPCTSTR lpszPictureName, LPCTSTR lpszObjectName)函数,使用棒图对象时,它指出棒图的方向。

wincc 全局脚本c程序功能

wincc 全局脚本c程序功能

wincc 全局脚本c程序功能
wincc全局脚本c程序实现什么功能
尤其是其中的变量d、及s_state作用。

问题补充:还有一个疑问:“当时间大于2013年9月1日后,画面将产生报警dataalm,报警dataalm2,故障fault,然后再清楚报警dataalm,dataalm2,但是故障将一直有。


中的fault会对系统正常运行有影响吗?
图片说明:1,wincc 全局脚本c程序解读
最佳答案
d是一个解锁密码,d为1时,清楚所有报警和故障。

s_state变量是wincc的一个变量,就是d。

当d为0时,有一个内部状态机,状态值为e,该值为0,1,2,反复循环。

当e为2时,自动清楚两个报警;
当e为1时,时间大于2013年7月1日,将产生报警dataalm;
当e为1时,时间大于2013年9月1日,将再产生一个报警dataalm2和故障fault;
也就是说,时间大于2013年7月1日,画面将反复产
生dataalm报警,然后再清楚该报警;
当时间大于2013年9月1日后,画面将产生报警dataalm,报警dataalm2,故障fault,然后再清楚报警dataalm,dataalm2,但是故障将一直有。

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语言

wincc 随机数 c语言

wincc 随机数c语言
在C语言中,可以使用rand()函数生成随机数。

rand()函数在stdlib.h 头文件中定义,它可以生成一个伪随机整数。

要在WinCC中使用C语言生成随机数,需要使用WinCC提供的API 函数来调用C语言的rand()函数。

下面是一个简单的示例代码,用于生成一个0到99之间的随机数:
```c
#include <stdio.h>
#include <stdlib.h>
void GenerateRandomNumber()
{
int randomNumber = rand() % 100; //生成0到99之间的随机数printf("随机数为:%d\n", randomNumber);
}
```
在上面的代码中,rand()函数生成一个伪随机整数,然后使用模运算符(%)将其限制在0到99之间。

最后,使用printf()函数将随机数
输出到控制台。

要在WinCC中使用上面的代码,需要将其嵌入到WinCC的脚本中,并使用WinCC提供的API函数来调用GenerateRandomNumber()函数。

具体实现方式可以参考WinCC的文档和示例代码。

wincc中的C例题

wincc中的C例题

wincc中的C例题wincc中的C语言典型题Wincc用动态向导传送S5/S7数据变量Text library设制多语种文本间接寻址:间接变量是一个文本变量16位字符集类型的变量。

使用时必需选中间接寻址。

项目文件的确定:#include"apdefap.h"void onClick(char *lpszpicturename,char *lpszobjectname,char*lpszproper){Bool bRet;char szprojectFile[_MAX_PATH+1];CMN_ERROR ERROR;bRet=DMGetRuntimeProject(szProjectFile,_MAX_PATH+1,& ERROR);IF(bRet==False){printf("\r\nError inDMGetRuntimeProject()\r\n","\t%s\r\n",Error.szErrortext);return;}printf("\r\nProjectFile:\r\n%s\r\n",szpProjectFile);}确定项目路径:#include"apdefap.h"void onClick(char *lpszpicturename,char *lpszobjectname,char*lpszproper){Bool bRet=False;char szprojectFile[_MAX_PATH+1];CMN_ERROR ERROR;char* psz=NULL;IF(bRet==False){printf("\r\nError inDMGetRuntimeProject()\r\n","\t%s\r\n",Error.szErrortext);return;}psz=strrchr(szProjectFile,'\\');if(psz!=NULL){*(psz+1)=0;}printf("\r\nProjectPath:\r\n%s\r\n",szpProjectFile);}确定计算机名称:#include "apdefap.h"void onClick(char *lpszpicturename,char *lpszobjectname,char*lpszproper){#pragma code("Kernel32.dll");Bool GetComputerNameA(LPSTR ComputerName,LPDWORD pdwsize);#pragma code();Bool bRet=FALSE;charszComputerNameA[MAX_COMPUTERNAME_LENGTH+1];DWORD dwSize=MAX_COMPUTERNAME_LENGTH+1;bRet=GetComputerNameA(szComputerName,&dwSize);if(bRet==FALSE){printf("\r\nComputerName:\r\nUnknow computer\r\n");return;}printf("\r\nComputerName:\r\n",szComputerName);}确定用户名:#include "apdefap.h"void onClick(char *lpszpicturename,char *lpszobjectname,char*lpszproper){#pragma code("advapi32.dll");Bool GetUserNameA(LPSTR UserName,LPDWORD pdwSize);#define UNLEN 256#pragma code();Bool bRet=FALSE;char szUserName[UNLEN+1];DWORD dwSize=UNLEN+1;bRet=GetUserNameA(szUserName,&dwSize);if(bRet==FALSE){printf("\r\nUserName:\r\nUnknow User\r\n");return;}printf("\r\nUserName:\r\n%s\r\n",szUserName);}windows API的函数也位于同的DLL中,就如Wincc API的函数一样。

Wincc画面制作中C脚本的应用分析

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脚本实例

WINCC脚本实例

1、问:如何触发计算机扬声器的声音?答:编写如下C-Action:#pragma code("kernel32.dll");BOOL Beep(DWORD dwFreq,DWORD dwDuration);#pragma code();Beep(500,500);2、问:如何通过C脚本来确定报警信息?答:首先必须在画面中插入报警控件,可以用如下两种方式来确认信息:(1)、确认单条信息4版本和高于此版本的WinCCBOOL OnBtnSinglAckn(char*lpszPictureName,char*lpszObjectName)5版本和高于此版本的WinCCBOOL AXC_OnBtnSinglAckn(char*lpszPictureName,char*lpszObjectName)(2)、确认报警窗口所有可见的报警4版本和低于此版本的WinCCBOOL OnBtnVisibleAckn(char*lpszPictureName,char*lpszObjectName)5版本和高于此版本的WinCCBOOL AXC_OnBtnVisibleAckn(char*lpszPictureName,char*lpszObjectName)3、问:如何在WinCC中读取系统时间?答:通过如下C-Action:#pragma code("kernel32.dll");Void GetLocalTimes(SYSTEMTIME*lpst);#pragma code();SYSTEMTIME time;字串7GetLocalTime(&time);SetTagWord("Varname",time.wYear);SetTagWord("Varname",time.wMonth);SetTagWord("Varname",time.wDayOfWeek);SetTagWord("Varname",time.wDay);SetTagWord("Varname",time.wHour);SetTagWord("Varname",time.wMinute);SetTagWord("Varname",time.wSecond);SetTagWord("Varname",time.wMilliseconds);4、问:如何经Windows对话框设置日期时间?答:通过调用Windows对话框实现。

Wincc中常用的C动作

Wincc中常用的C动作

#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("\r\n SetForeground failed"); #endif 11.如何在 WINCC 中制作一个保持型按钮
// Funktion: Bit in Doppelwort setzen; if (GetTagBitWait("COLSE_DISPLAY")==1 ) {SetTagBit("COLSE_DISPLAY",0); SetTagBit("DISPLAY_NO",0); //Return-Type: BOOL
方法 1: if( GetTagBit("M10") )
SetTagBit("M10",0); else

WINCC中C语言范例

WINCC中C语言范例

WINCC中C语言范例WinCC中如何调取电脑系统时间?显示时间的C动作#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);}显示月的C动作#include "apdefap.h"char* _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) {#pragma code("kernel32.dll");VOID GetLocalTime(LPSYSTEMTIME lpSystemTime);#pragma code()SYSTEMTIME sysTime;char szTime[6] = " ";GetLocalTime(&sysTime);sprintf (szTime,"%02d",sysTime.wMonth);return szTime;}日的C动作#include "apdefap.h"char* _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) {#pragma code("kernel32.dll");VOID GetLocalTime(LPSYSTEMTIME lpSystemTime);#pragma code()SYSTEMTIME sysTime;char szTime[6] = " ";GetLocalTime(&sysTime);sprintf (szTime,"%02d",sysTime.wDay);return szTime;}年的C动作#include "apdefap.h"char* _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) {#pragma code("kernel32.dll");VOID GetLocalTime(LPSYSTEMTIME lpSystemTime);#pragma code()SYSTEMTIME sysTime;char szTime[6] = " ";GetLocalTime(&sysTime);sprintf (szTime,"%02d",sysTime.wYear);return szTime;}。

wicc常用C动作

wicc常用C动作

wicc常用C动作Wincc中常用的C动作2011-07-19 09:521.用户注销:#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: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);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 int 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运行画面最小化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 forWindows 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脚本
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
DWORD value;
HWND hWnd=NULL ;
hWnd=FindWindow(NULL,"Wincc-运行系统- ");
value=GetTagDWord("AI标签");
#include "apdefap.h"
long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
#pragma code("useadmin.dll")
#include "PWRT_API.H"
#pragma code()
a+=20;
if (a>=720) (a=350);
}
return a;
}
物料向上移动(几何---位置Y)(停车后,物料停在该点)
#include "apdefap.h"
long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
HWND hWnd=NULL;
int上位启动信号;
hWnd=FindWindow(NULL,"WinCC C-Course");
if (GetTagBit("DI备妥"))
{
上位启动信号=MessageBox(hWnd,"电源已备妥,您现在确定要启动吗?","启动!",

winccN个经典问题

winccN个经典问题

wincc的n个经典问题解答(1-20)1、问:如何触发计算机扬声器的声音?答:编写如下C-Action:#pragma code("kernel32.dll");BOOL Beep(DWORD dwFreq,DWORD dwDuration);#pragma code();Beep(500,500);2、问:如何通过C脚本来确定报警信息?答:首先必须在画面中插入报警控件,可以用如下两种方式来确认信息:(1)、确认单条信息4版本和高于此版本的WinCCBOOL OnBtnSinglAckn(char*lpszPictureName,char*lpszObjectName)5版本和高于此版本的WinCCBOOL AXC_OnBtnSinglAckn(char*lpszPictureName,char*lpszObjectName)(2)、确认报警窗口所有可见的报警4版本和低于此版本的WinCCBOOL OnBtnVisibleAckn(char*lpszPictureName,char*lpszObjectName)5版本和高于此版本的WinCCBOOL AXC_OnBtnVisibleAckn(char*lpszPictureName,char*lpszObjectName)3、问:如何在WinCC中读取系统时间?答:通过如下C-Action:#pragma code(&quo t;kernel32.dll&quo t;);Void GetLocalTimes(SYSTEMTIME*lpst);#pragma code();SYSTEMTIME time;GetLocalTime(&amp;time);SetTagWo rd(&quot;Varname&quot;,time.wYear);SetTagWo rd(&quot;Varname&quot;,time.wMo nth);SetTagWo rd(&quot;Varname&quot;,time.wDayOfWeek);SetTagWo rd(&quot;Varname&quot;,time.wDay);SetTagWo rd(&quot;Varname&quot;,time.wHour);SetTagWo rd(&quot;Varname&quot;,time.wMinute);SetTagWo rd(&quot;Varname&quot;,time.wSeco nd);SetTagWo rd(&quot;Varname&quot;,time.wMilliseconds);4、问:如何经Windo ws对话框设置日期时间?答:通过调用Windows对话框实现。

wincc退出确定按钮的C动作代码

wincc退出确定按钮的C动作代码

一、组态运行效果如以下列图所示的“wincc退出运行系统确实定选择按钮〞:图一步骤:1、在画面添加按钮,按钮文本为“退出系统〞。

2、双击按钮,对按钮进展C动作编辑,C代码如下所示:long Ret = IDNO;Ret = MessageBox(NULL, "您确实要退出WinCC 运行系统么","请确认", MB_YESNO | MB_ICONQUESTION | MB_DEFBUTTON2 | MB_SYSTEMMODAL);if (Ret == IDYES)DeactivateRTProject ();当确定按钮按下后,将退出Wincc运行系统。

下面针对以下列图解释每个代码的作用:MB_SYSTEMMODAL对应上图;MB_YESNO对应上图中;MB_ICONQUESTION|对用上图中;另外由动态向导可自动生成以下C代码:步骤:1、在画面中添加按钮,选中按钮,点击动态向导中的“显示错误框〞。

弹出组态对话框:“下一步〞:“完成〞。

这时翻开按钮可见已对鼠标左键组态C动作,代码如下:MessageBox(NULL,"您确定要退出wincc运行系统吗","Wincc_Deactivated?",MB_YESNO|MB_ICONQUESTION|MB_SETFOREGROUND|MB_SY STEMMODAL);在此根基上添加相关判断语句,并添加退出WINCC运行系统的C代码即可实现图一的效果。

二、组态按钮调用“用户管理器〞。

需实现效果如下:步骤:1、添加按钮到画面,按钮文本为“用户管理〞。

2、添加C代码如下:WinExec( "Passcs.exe", SW_SHOWNORMAL );这里Passcs.exe才是用户管理器的可执行文件。

2、用户登陆界面制作:3、报警确认按钮制作:“OneLineMessage〞为报警控件名称。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

wincc中的C语言典型题Wincc用动态向导传送S5/S7数据变量Text library设制多语种文本间接寻址:间接变量是一个文本变量16位字符集类型的变量。

使用时必需选中间接寻址。

项目文件的确定:#include"apdefap.h"void onClick(char *lpszpicturename,char *lpszobjectname,char*lpszproper){Bool bRet;char szprojectFile[_MAX_PATH+1];CMN_ERROR ERROR;bRet=DMGetRuntimeProject(szProjectFile,_MAX_PATH+1,&ERROR);IF(bRet==False){printf("\r\nError inDMGetRuntimeProject()\r\n","\t%s\r\n",Error.szErrortext);return;}printf("\r\nProjectFile:\r\n%s\r\n",szpProjectFile);}确定项目路径:#include"apdefap.h"void onClick(char *lpszpicturename,char *lpszobjectname,char*lpszproper){Bool bRet=False;char szprojectFile[_MAX_PATH+1];CMN_ERROR ERROR;char* psz=NULL;IF(bRet==False){printf("\r\nError inDMGetRuntimeProject()\r\n","\t%s\r\n",Error.szErrortext);return;}psz=strrchr(szProjectFile,'\\');if(psz!=NULL){*(psz+1)=0;}printf("\r\nProjectPath:\r\n%s\r\n",szpProjectFile);}确定计算机名称:#include "apdefap.h"void onClick(char *lpszpicturename,char *lpszobjectname,char*lpszproper){#pragma code("Kernel32.dll");Bool GetComputerNameA(LPSTR ComputerName,LPDWORD pdwsize);#pragma code();Bool bRet=FALSE;char szComputerNameA[MAX_COMPUTERNAME_LENGTH+1];DWORD dwSize=MAX_COMPUTERNAME_LENGTH+1;bRet=GetComputerNameA(szComputerName,&dwSize);if(bRet==FALSE){printf("\r\nComputerName:\r\nUnknow computer\r\n");return;}printf("\r\nComputerName:\r\n",szComputerName);}确定用户名:#include "apdefap.h"void onClick(char *lpszpicturename,char *lpszobjectname,char*lpszproper){#pragma code("advapi32.dll");Bool GetUserNameA(LPSTR UserName,LPDWORD pdwSize);#define UNLEN 256#pragma code();Bool bRet=FALSE;char szUserName[UNLEN+1];DWORD dwSize=UNLEN+1;bRet=GetUserNameA(szUserName,&dwSize);if(bRet==FALSE){printf("\r\nUserName:\r\nUnknow User\r\n");return;}printf("\r\nUserName:\r\n%s\r\n",szUserName);}windows API的函数也位于同的DLL中,就如Wincc API的函数一样。

在各种不同的头文件中对这些函数进行了声明。

DLL的集成遵循集成WINCCDLL所使用的同一原理。

下列实例程序代码对这种集成进行了说明。

#pragma code("comdlg32.dll")#include "commdlg.h"#pragma code()设置windows属性#include "apdefap.h"void onOpenPicture(char *lpszpicturename,char *lpszobjectname,char*lpszproper){HWND hWnd=NULL;hWnd=findWindow(NULL,"Wincc-Runtime-");SetWindowText(hWnd,"Wincc C-course");SetWindowPos(hWnd,HWND_TOP,0,0,1024,768,0);SetTagByte("U08i_org_bar_1",0);createExternalTags();}读取系统时间#include "apdefap.h"char*_main(char *lpszpicturename,char *lpszobjectname,char *lpszproper) {#pragma code("kernel32.dll")VOID GetLocalTime(LPSYSTEMTIME lpSystemtime);#pragma code()SYSTEMTIME sysTime;char szTime[6]="";GetLocalTime(&sysTime);sprintf(szTime,"%02d:%02d",sysTime.wHour,sysTime.wMinute);return szTime;}播放声音文件#include "apdefap.h"{#pragma code("winmm.dll")Bool PlaySound(LPCTSTR lpszSound,HMODULE hModule,DWORD dwSound);#define SND_FILENAME 0x00020000L#define SND_ASYNC 0x0001#pragma code()Bool bRet=FALSE;char szProjectPath(_MAX_PATH);char szSoundPath(_MAX_PATH);GetProjectPath(szProjectPath);sprintf(szSoundPath,"%sSound\\%s",szProjectPath,lpszSoundFile);bRet=PlaySound(szSoundPath,NULL,SND_FILENAME|SND_ASYNC);if(bRet==false){MessageBeep((WORD)-1);}}语言切换:#include"apdefap.h"void onClick(char *lpszpicturename,char *lpszobjectname,char*lpszproper){HWND hwndParent=NULL;DWORD dwFlags=0;DWORD dwSetLocalIDs[3]={0x0409,0x0407,0x040C};UINT uSetIDArraySize=3;DWORD dwGetLocaleID;BOOL bRet;CMN_ERROR error;hwndParent=FindWindow(NULL,"Wincc C-Course");bRet=DMShowLanguageDialog(hwndParent,dwFlags,dwSetLocaleIDs,uSetIDArr aySize,&dwGetLocaleID,&Error);if(bRet==FAlSE){printf("\r\nError inDMShowLanguageDialog()\r\n","\t%s\r\n",Error.szErrorText);return;}bRet=SetLanguage(dwGetLocaleID);if(bRet==FALSE){printf("\r\nError in SetLanguage()\r\n");return;}}变量选择#include "apdefap.h"void onClick(char *lpszpicturename,char *lpszobjectname,char*lpszproper){BOOL bRet;char szProjectFile[_MAX_PATH+1];CMN_ERROR Error;HWND hwndParent=NULL;DM_VARKEY dmVarKey;LINKINFO link;if(DMGetRuntimeProject(szProjectFile,_MAX_PATH+1,&Error)==FALSE) {printf("\r\nError inDMGetRuntimeProject()\r\n","\t%s\r\n",Error.szErrorText);return;}hwndParent=FindWindow(NULL,"Wincc C-Course");if(DMShowVarDatabase(szProjectFile,hwndParent,NULL,NULL,&dmVarKey,&Er ror)==FALSE){printf("\r\nError inDMShowVarDatabase()\r\n","\t%s\r\n",Error.szErrorText);return;}SetText(lpszPictureName,"Tagname",dmVarKey.szName);link.LinkType=BUBRT_LTVARIABLE_DIRECT;link.dwCycle=0;strcpy(link.szLinkName,dmVarKey.szName);PDLRTSetLink(0,lpszPictureName,"TagValue","OutputValue",&link,NULL,NU LL,&Error);}出错框#include "apdefap.h"void onClick(char *lpszpicturename,char *lpszobjectname,char*lpszproper){HWND hWnd=NULL;hWnd=Findwindow(NULL,"Wincc C-Course");MessageBox(hWnd,"Wincc C-Course raised unknownExeption!!!","Error",MB_OK|MB_ICONSTOP|MB_APPLMODAL);}询问框#include "apdefap.h"void onClick(char *lpszpicturename,char *lpszobjectname,char*lpszproper){HWND hWnd=NULL;int iRet;HWnd=Findwindow(NULL,"Wincc C-Course");iRet=MessageBox(hWnd,"Do you want to do someting?","Question",MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL);printf("\r\nExample 3\r\n");if(iRet==IDYES){printf("User selected Yes Button\r\n");}else{printf("User selected No Button\r\n");}}打开标准对话框#include "apdefap.h"void onClick(char *lpszpicturename,char *lpszobjectname,char*lpszproper){#pragma code("comdlg32.dll")#include "commdlg.h"#pragma code()BOOL bRet;OPENFILENAME ofn;char szFilter[]="Textfiles|*.txt|all Files|*.*|";char szFile[_MAX_PATH+1];char szInitialDir[_MAX_PATH+1]="C:\\";ofn.lStructSize=sizeof(OPENFILENAME);ofn.hwndOwner=Findwindow(NULL,"wincc c-course");for(psz=szFilter;*psz;psz++){if(*psz=='|'){*psz=0;}}ofn.lpstrFilter=szFilter;ofn.lpstrFile=szFile;ofn.nMaxFile=_MAX_PATH+1;GetProjectPath(szInitiaDir)ofn.lpstrInitialDir=szInitialDir;bRet=GetOpenFileName(&ofn);if(bRet==FALSE){printf("\r\nError in GetOpenFileName()\r\n");return;}printf("\r\nselected File (Path+name)\r\n%s\r\n",ofn.lpstrFile); }备份数据#include "apdefap.h"void onClick(char *lpszpicturename,char *lpszobjectname,char*lpszproper){FILE* pFile=NULL;char szFile[_MAX_PATH+10];int iData;float fDate;if(GetProjectPath(szFile)==FALSE){printf("\r\nError in GetProjectPath()\r\n");return;}strcat(szFile,"Data.txt");pFile=fopen(szFile,"w+");if(pFile==NULL){printf("\r\nError in fopen()\r\n");return;}iData=GetTagSDWord("S32_couse_file_1");fData=GetTagFloat("F32i_course_file_1");fprintf(pFile,"%d\r\n%f\r\n",iData,fData);fclose(pFile);printf("\r\nData written in file:\r\n\t%d\r\n\t%f\r\n",iData,fData); }读取数据#include "apdefap.h"void onClick(char *lpszpicturename,char *lpszobjectname,char*lpszproper){FILE* pFile=NULL;char szFile[_MAX_PATH+10];int iData;float fData;if(GetProjectPath(szFile)==FALSE){printf("\r\nError in GetProjectPath()\r\n");return;}strcat(szFile,"Data.txt");pFile=fopen(szFile,"r+");if(pFile==NULL){printf("\r\nError in fopen()\r\n");return;}fscanf(pFile,"%d\r\n%f\r\n",&iData,&fData);fclose(pFile);SetTagSDWord("S32i_course_file_1",iData);SetTagFloat("F32i_course_file_1",fData);printf("\r\nData read form file.\r\n\t%d\r\n\t%f\r\n",iData,fData); }报表项目函数LogText()#include"apdefap.h"BOOL LogText(char* lpszLogText){File* pFile=NULL;char szFile[_MAX_PATH+10];if(GetProjectPath(szFile)==FALSE){printf("\r\nError in GetProjectPath()\r\n");return FALSE;}strcat(szFile,"Log.txt");pFile=fopen(szFile,"a+");if(pFile==NULL){printf("\r\nError in fopen()\r\n");return FALSE;}fprintf(pFile,"%s-%s\r\n",GetLocalTimeString(),lpszLogText);fclose(pFile);return TRUE;}Excel中读取WINCC变量值:read:Rem Read Tag Values in Wincc-projectPrivate Sub GetValue_click()Dim mcp as ObjectDim var as stringDim value as VariantDim i as IntegerSet mcp=CreateObject("Wincc-Runtime-Project")Cell="c3"i=1Do while Not Range(cell)=""var=range(cell)value=mcp.GetValue(var)Range("D"&2+i).value=valuecell="c"&3+ii=i+1loopend subwrite:Rem set Tag Values in Wincc-ProjectPrivate Sub SetValue_click()Dim mcp as ObjectDim var as stringDim value as VariantDim i as IntegerDim bRet as Integerset mcp =CreateObject("wincc-Runtime-Project") Cell="c3"i=1Do while Not Range(Cell)=""Var=Range(cell)Value=Range("e"&2+i).valuebRet=mcp.SetValue(var,value)cell="c"&3+ii=i+1Loopend sub。

相关文档
最新文档