wincc技巧

首页    02解决方案    服务支持    西门子支持    wincc技巧

如何触发计算机扬声器的声音 


首先必须在画面中插入报警控件,可以用以下两种方式来确认信息 


可以用如下的函数来确认单条信息 

4版本和低于此版本WinCC:BOOL OnBtnSinglAckn(char*lpszPictureName,char*lpszObjectName)

5版本和高于此版本WinCC:BOOL AXC_OnBtnSinglAckn(char*lpszPictureName,char*lpszObjectName)


可以用如下的函数确认报警窗口所有可见的报警 

4版本和低于此版本WinCC:BOOL OnBtnVisibleAckn(char*lpszPictureName,char*lpszObjectName)

5版本和高于此版本WinCC:BOOL AXC_OnBtnVisibleAckn(char*lpszPictureName,char*lpszObje


如何实现WinCC运行画面跳转WinCC控制中心 


最好的方式是WinCC运行画面上做一个按钮,该按钮应该置为密码保护,在该按钮上设C-action 

低于WinCC V5.0

#pragma code("user32.dll")

Bool SetForegroundWindow(HWND);

#pragma code()

HWND handle;

Handle=FindWindow("MCPFrameWndClass",NULL);

If(!SetForegroundWindow(handle))printf("\r\n SetForeground fails");

5.0版本和高于此版本WinCC

#pragma code("user32.dll")

Bool SetForegroundWindow(HWND);

#pragma code()

HWND handle;

Handle=FindWindow("WinCCExplorerFrameWndClass",NULL);

If(!SetForegroundWindow(handle)) printf("\r\n SetForeground fails");


如何WinCC中读取计算机系统时间 


可以编写如下C-action 

#pragma code("kernel32.dll");

Void GetLocalTimes(SYSTEMTIME* lpst);

#pragma code();

SYSTEMTIME time;

GetLocalTime(&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 );


何经Windows对话框设置日期和时间? 


可以将修改日期、时间Windows对话框调出来,调用程序如下 

#include "apdefap.h"

void onClick(char*lpszPictureName,char*lpszObjectName,

char* lpszPropertyName)

{ ProgramExecute("C:\\WIN95\\control.exe timedate.cpl"); }

注意:您在使用此程序时,需根据您Control Panel安装的具体路径来填写。


如何WinCCC语言调SQL语言  


1、创建一SQL文件。

此文件ISQL中创建,文件内容是所希望执行SQL语句 


2WinCCC Script中编写程序调用SQL文件,如以下程序所示 


#include "apdefap.h"

void OnLButtonDown(char* lpszPictureName,

char* lpszObjectName,

char* lpszPropertyName,

UINT nFlags, int x, int y)

{

char*a="C:\\SIEMENS\\Common\\SQLANY\\ISQL-q-b-c

UID=DBA;PWD=SQL;DBF=E:\\testsql\\testsqlRT.DB;

DBN=CC_testsql_99-12-03_12:48:26R;READ

E:\\testsql\\test.sql";

printf("%s\r\n",a);

ProgramExecute(a);

}

下面是一个简单SQL文件内容:

select * from pde#hd#t#test;

output to E:\\test2.txt FORMAT ascii


:文件名及路径中不要带空格。



如何整点启动归档 


"Global Script"Project functions编写函数cyclicarchive

BOOL cyclicarchive()

{

#pragma code ("kernel32.dll");

void GetLocalTime (SYSTEMTIME* lpst);

#pragma code();

SYSTEMTIME time;

Int t1;

GetLocalTime(&time);

t1=time.wMinute;

if(t1==00)

{

SetTagBit("startarchive",1);

return(BOOL)(GetTagBit("startarchive"));

}

}

Tagloging"Properties of process tag""Archive Tag"tabArchiving typeCycle-selective"Event"标签下"Start Event"内选cyclicarchive函数 


如何在按键组合被禁用的情况下,WinCC运行环境进WinCC Control Center 


最好是做一个按钮,该按钮需要用用户权限保护,在该钮中编写如C-action 

低于WinCC 5.0版本

#pragma code ("user32.dll");

BOOL SetForegroundWindow(HWND);

#pragma code();

HWND handle;

handle=FindWindow("MCPFrameWndClass",NULL);

If (!SetForegroundWindow(handle))

Printf ("\r\n SetForeground fails");


WinCC 5.0版本以及更高的版本:

#pragma code("user32.dll");

BOOL SetForegroundWindow(HWND);

#pragma code();

HWND handle;

handle=FindWindow("WinCCExplorerFrameWndClass",NULL);

If (!SetForegroundWindow(handle))

Printf ("\r\n SetForeground fails");



怎样对一WinCC的项目进行转?


当对一V4.X版本WinCC项目升级5.XV4.X下的项目必须进行版本转换。若使"交叉索"编辑器,必须保证项目已进行了正确无误的转换 

项目转换分下列几步依次完:

WinCC资源管理器,选中图形编辑,击鼠标右健 

1.全局库的转换

在弹出下拉菜单中选"转换全局",系统会自动对全局库进行转, 转换结束后退出 

2.项目库的转换

在弹出下拉菜单中选"转换项目",确认后系统自动对库进行转换 

3.图形画面转换

在弹出下拉菜单中选"转换画",在弹出画面"",系统自动进行所有画面的转换 

注意:包含"未定义对"的画,PC机上未装相应对象服务器,决不要转, 否则画面会被损坏 

4.基本数据转换

分屏向导:WinCC资源管理器中,打开分屏向(在基本数据项)的弹出式菜单,并选""条目。

报警记录向导:WinCC资源管理器中,打开报警记录向导的弹出式菜单(在基本数据项下),并选""条目。


WinCC Web Navigator时,为什么总是提示错误信"The maximum permissible number of user is connected to the WinCC-Server"?


您使WinCCV5/SP1Web NavigatorV1.0时,您看到以上错误信息,错误原因是 

实际用户数目超过授权数量限制。

措施:升WebNavigator,使其能支持更多的客户端 

缺少授权WinCC会提示您所缺少的授权。

措施:添加所缺的授权 

"WebNavigatorRT.exe"WinCC启动列表中。

措施:将此文件加WinCC的启动列表中。











#pragma  预处理指令详    
     
 
 
       在所有的预处理指令中#Pragma  指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作#pragma指令对每个编译器给出了一个方,在保持CC++语言完全兼容的情况,给出主机或操作系统专有的特征。依据定,编译指示是机器或操作系统专有,且对于每个编译器都是不同的  
其格式一般:        #Pragma  Para  
       Para  为参数,下面来看一些常用的参数  
 
       (1)message  参数  Message  参数是我最喜欢的一个参数,它能够在编译信息输出  
口中输出相应的信息,这对于源代码信息的控制是非常重要的。其使用方法为  
             #Pragma  message(消息文)  
             当编译器遇到这条指令时就在编译输出窗口中将消息文本打印出来  
       当我们在程序中定义了许多宏来控制源代码版本的时候,我们自己有可能都会忘记有没有正确的设置这些宏,此时我们可以用这条指令在编译的时候就进行检查。假设我们希望判断自己有没有在源代码的什么地方定义_X86这个宏可以用下面的方  
             #ifdef  _X86  
             #Pragma  message(_X86  macro  activated!)  
             #endif  
             当我们定义_X86这个宏以后,应用程序在编译时就会在编译输出窗口里显_  
X86  macro  activated!。我们就不会因为不记得自己定义的一些特定的宏而抓耳挠腮  
  
       
     (2)另一个使用得比较多pragma参数code_seg。格式如  
           #pragma  code_seg(  ["section-name"[,"section-class"]  ]  )  
           它能够设置程序中函数代码存放的代码段,当我们开发驱动程序的时候就会使用到它  
 
     (3)#pragma  once  (比较常用  
           只要在头文件的最开始加入这条指令就能够保证头文件被编译一次,这条指令实际上VC6中就已经有了,但是考虑到兼容性并没有太多的使用它  
       
     (4)#pragma  hdrstop表示预编译头文件到此为止,后面的头文件不进行预编译BCB可以预编译头文件以加快链接的速度,但如果所有头文件都进行预编译又可能占太多磁盘空间,所以使用这个选项排除一些头文件    
         有时单元之间有依赖关系,比如单A依赖单B,所以单B要先于单A编译。你可以#pragma  startup指定编译优先级,如果使用#pragma  package(smart_init)  BCB就会根据优先级的大小先后编译    
       
     (5)#pragma  resource  "*.dfm"表示*.dfm文件中的资源加入工程*.dfm中包括窗  
外观的定义    
         
     (6)#pragma  warning(  disable  :  4507  34;  once  :  4385;  error  :  164  )  
           等价于  
           #pragma  warning(disable:4507  34)    //  不显450734号警告信  
           #pragma  warning(once:4385)                //  4385号警告信息仅报告一  
           #pragma  warning(error:164)                //  164号警告信息作为一个错误  
           同时这pragma  warning  也支持如下格式  
           #pragma  warning(  push  [  ,n  ]  )  
           #pragma  warning(  pop  )  
           n代表一个警告等(1---4)  
           #pragma  warning(  push  )保存所有警告信息的现有的警告状态  
           #pragma  warning(  push,  n)保存所有警告信息的现有的警告状态,并且把全局警  
等级设定n    
           #pragma  warning(  pop  )向栈中弹出最后一个警告信息,在入栈和出栈之间所作  
一切改动取消。例如  
           #pragma  warning(  push  )  
           #pragma  warning(  disable  :  4705  )  
           #pragma  warning(  disable  :  4706  )  
           #pragma  warning(  disable  :  4707  )  
           //.......  
           #pragma  warning(  pop  )    
           在这段代码的最后,重新保存所有的警告信(470547064707)  
       7pragma  comment(...)  
             该指令将一个注释记录放入一个对象文件或可执行文件中  
           常用lib关键字,可以帮我们连入一个库文件  
   
   
每个编译程序可以#pragma指令激活或终止该编译程序支持的一些编译功能。例如,对循环优化功能  
#pragma  loop_opt(on)            //    
#pragma  loop_opt(off)    //    
有时,程序中会有些函数会使编译器发出你熟知而想忽略的警告,Parameter  xxx  is  never  used  in  function  xxx,可以这样  
#pragma  warn  100            //  Turn  off  the  warning  message  for  warning  #100  
int  insert_record(REC  *r)  
{  /*  function  body  */  }  
#pragma  warn  +100                        //  Turn  the  warning  message  for  warning  #100  back  on  
函数会产生一条有唯一特征100的警告信息,如此可暂时终止该警告  
每个编译器#pragma的实现不同,在一个编译器中有效在别的编译器中几乎无效。可从编译器的文档中查看  







2022年4月24日
浏览量:100010