工控编程吧

标题: 如何使用外部应用程序安全地关闭 WinCC [打印本页]

作者: baikhgmv    时间: 2016-11-4 09:52
标题: 如何使用外部应用程序安全地关闭 WinCC
如何使用外部应用程序安全地关闭 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)。
安全须知
西门子提供具有工业安全功能的产品和解决方案,支持工厂,方案,机器,设备和网络的安全操作。这些都是工业安全概念 的重要组件。西门子在此方面不断对产品和解决方案进行开发和完善。西门子推荐订阅产品更新的通知。为了安全操作西门子的产品和方案,必须采取适当的安全措施 (如单元防护理念)并将每个组件纳入全面且先进的工业安全保护机制中。这也包括使用到的第三方产品。。这也包括使用的第三方产品
  1. #include "dmclient.h"
  2. #include <stdio.h>
  3. #include <time.h>

  4. void main()
  5. {

  6.         FILE *fp=NULL;
  7.         BOOL bRetVal=FALSE;
  8.         time_t t;
  9.         struct tm *tl;
  10.         fp=fopen("ShutdownWinCC.log","w"); //Open Logfile
  11.        
  12.         if (fp != NULL)
  13.         {
  14.                 int iResult=0;

  15.                 CMN_ERROR Error;
  16.                 memset(&Error, 0,sizeof(CMN_ERROR));
  17.                 BOOL ret = FALSE;
  18.                 TCHAR szAppName[255];
  19.                 VOID* pvUser = NULL;
  20.                 strcpy(szAppName,"ShutdownWinCC");

  21.                 HMODULE hDMClient = LoadLibrary("dmclient.dll");
  22.                 DMCONNECTFCTA DMCONNECTFCT = NULL;
  23.                 DMDISCONNECTFCTA DMDISCONNECTFCT = NULL;
  24.                 DMEXITWINCCEXFCTA DMEXITWINCCEXFCT = NULL;

  25.                 if(hDMClient != NULL)
  26.                 {

  27.                         DMCONNECTFCT = (DMCONNECTFCTA) GetProcAddress(hDMClient, "DMConnectA");

  28.                         if(DMCONNECTFCT)
  29.                         {
  30.                                 t = time(NULL);
  31.                                 tl = localtime(&t);
  32.                                 bRetVal = DMCONNECTFCT(szAppName, NULL, pvUser, &Error);
  33.                                 fprintf(fp,"%s; DMconnect OK!\n",asctime(tl));
  34.                         }

  35.                         DMEXITWINCCEXFCT = (DMEXITWINCCEXFCTA) GetProcAddress(hDMClient, "DMExitWinCCExA");

  36.                         if(DMEXITWINCCEXFCT)
  37.                         {
  38.                                 bRetVal = DMEXITWINCCEXFCT(DM_SDMODE_FORCE_POWEROFF); // Terminate WinCC + Shutdown windows and power off by force
  39.                         }
  40.                                
  41.                         if(!bRetVal)
  42.                         {
  43.                                 t = time(NULL);
  44.                                 tl = localtime(&t);
  45.                                 fprintf(fp,"%s; WinCC shutdown failed!\n",asctime(tl));
  46.                         }
  47.                         else
  48.                         {
  49.                                 t = time(NULL);
  50.                                 tl = localtime(&t);
  51.                                 fprintf(fp,"%s; WinCC shutdown successful!\n",asctime(tl));
  52.                         }
  53.        
  54.                         DMDISCONNECTFCT = (DMDISCONNECTFCTA) GetProcAddress(hDMClient, "DMDisConnectA");
  55.                         if(DMDISCONNECTFCT)
  56.                         {                 
  57.                                 bRetVal = DMDISCONNECTFCT( &Error);
  58.                                 t = time(NULL);
  59.                                 tl = localtime(&t);
  60.                                 fprintf(fp,"%s; DMDisconnect OK!\n",asctime(tl));
  61.                                 FreeLibrary(hDMClient);
  62.                         }
  63.        
  64.                 }

  65.                 fclose(fp);
  66.         }
  67. }
复制代码













欢迎光临 工控编程吧 (https://www.gkbc8.com/) Powered by Discuz! X3.4