如何使用外部应用程序安全地关闭 WinCC描述 要关闭WinCC,必须使用合适的按钮和函数以避免造成损坏。在某些情况下,通过外部程序关闭 WinCC 和操作系统时,使用不间断电源(UPS)是必需的。本条目中的下载中包括解决此任务的源代码。为了可以使用此功能必须使用 UPS ,当检测到电源故障时,可以自动启动程序。 ......
描述
要关闭WinCC,必须使用合适的按钮和函数以避免造成损坏。在某些情况下,通过外部程序关闭 WinCC 和操作系统时,使用不间断电源(UPS)是必需的。本条目中的下载中包括解决此任务的源代码。为了可以使用此功能必须使用 UPS ,当检测到电源故障时,可以自动启动程序。 说明 - 下载位于本条目下面的文本文件。
- 创建新的 C++ 项目 (如使用Visual Studio)。
- 在项目属性中,设置字符集为“Multibyte”。例如,在 Microsoft Visual Studio 2010 中,在“项目〉“项目名称”属性〉配置属性 〉常规〉字符集”(Project > 'Project name' properties > Configuration properties > General > Character set)下设置。
- 拷入源代码到项目中。
- 使用下面的任意一个参数替换函数 DMEXITWINCCEXFCT 第45行的参数:
DM_SDMODE_WINCC | 关闭 WinCC | DM_SDMODE_LOGOFF | 关闭 WinCC 并注销当前登陆操作系统的用户 | DM_SDMODE_SYSTEM | 关闭 WinCC 并关闭操作系统 | DM_SDMODE_REBOOT | 关闭 WinCC 并重新启动操作系统 | DM_SDMODE_FORCE_POWEROFF | 关闭 WinCC,关闭操作系统并关闭计算机 |
- 从“安装路径 > Siemens > WinCC > aplib” 下的文件夹中拷贝头文件 “dmclient.h” ,“ohioapi.h” ,“dmdefs.h” 和 “license.h” 到项目文件夹。
- 编译项目。
- 更改 UPS 设置以便检测电源故障,调用项目可执行文件 (如 Shutdown_WinCC.exe)。
安全须知
西门子提供具有工业安全功能的产品和解决方案,支持工厂,方案,机器,设备和网络的安全操作。这些都是工业安全概念 的重要组件。西门子在此方面不断对产品和解决方案进行开发和完善。西门子推荐订阅产品更新的通知。为了安全操作西门子的产品和方案,必须采取适当的安全措施 (如单元防护理念)并将每个组件纳入全面且先进的工业安全保护机制中。这也包括使用到的第三方产品。。这也包括使用的第三方产品 - #include "dmclient.h"
- #include <stdio.h>
- #include <time.h>
- void main()
- {
- FILE *fp=NULL;
- BOOL bRetVal=FALSE;
- time_t t;
- struct tm *tl;
- fp=fopen("ShutdownWinCC.log","w"); //Open Logfile
-
- if (fp != NULL)
- {
- int iResult=0;
- CMN_ERROR Error;
- memset(&Error, 0,sizeof(CMN_ERROR));
- BOOL ret = FALSE;
- TCHAR szAppName[255];
- VOID* pvUser = NULL;
- strcpy(szAppName,"ShutdownWinCC");
- HMODULE hDMClient = LoadLibrary("dmclient.dll");
- DMCONNECTFCTA DMCONNECTFCT = NULL;
- DMDISCONNECTFCTA DMDISCONNECTFCT = NULL;
- DMEXITWINCCEXFCTA DMEXITWINCCEXFCT = NULL;
- if(hDMClient != NULL)
- {
- DMCONNECTFCT = (DMCONNECTFCTA) GetProcAddress(hDMClient, "DMConnectA");
- if(DMCONNECTFCT)
- {
- t = time(NULL);
- tl = localtime(&t);
- bRetVal = DMCONNECTFCT(szAppName, NULL, pvUser, &Error);
- fprintf(fp,"%s; DMconnect OK!\n",asctime(tl));
- }
- DMEXITWINCCEXFCT = (DMEXITWINCCEXFCTA) GetProcAddress(hDMClient, "DMExitWinCCExA");
- if(DMEXITWINCCEXFCT)
- {
- bRetVal = DMEXITWINCCEXFCT(DM_SDMODE_FORCE_POWEROFF); // Terminate WinCC + Shutdown windows and power off by force
- }
-
- if(!bRetVal)
- {
- t = time(NULL);
- tl = localtime(&t);
- fprintf(fp,"%s; WinCC shutdown failed!\n",asctime(tl));
- }
- else
- {
- t = time(NULL);
- tl = localtime(&t);
- fprintf(fp,"%s; WinCC shutdown successful!\n",asctime(tl));
- }
-
- DMDISCONNECTFCT = (DMDISCONNECTFCTA) GetProcAddress(hDMClient, "DMDisConnectA");
- if(DMDISCONNECTFCT)
- {
- bRetVal = DMDISCONNECTFCT( &Error);
- t = time(NULL);
- tl = localtime(&t);
- fprintf(fp,"%s; DMDisconnect OK!\n",asctime(tl));
- FreeLibrary(hDMClient);
- }
-
- }
- fclose(fp);
- }
- }
复制代码
|