Wincc 50个常见问题1
2009-08-06 17:07
| 1、问: 如何触发计算机扬声器的声音? 答: 编写如下C-Action: #pragma code("kernel32.dll"); BOOL Beep(DWORD dwFreq,DWORD dwDuration); #pragma code(); Beep(500,500);
2、问: 如何通过C脚本来确定报警信息? 答: 首先必须在画面中插入报警控件,可以用如下两种方式来确认信息: (1)、确认单条信息 4版本和高于此版本的WinCC BOOLOnBtnSinglAckn(char*lpszPictureName,char*lpszObjectName) 5版本和高于此版本的WinCC BOOLAXC_OnBtnSinglAckn(char*lpszPictureName,char*lpszObjectName)
(2)、确认报警窗口所有可见的报警 4版本和低于此版本的WinCC BOOLOnBtnVisibleAckn(char*lpszPictureName,char*lpszObjectName)
5版本和高于此版本的WinCC BOOLAXC_OnBtnVisibleAckn(char*lpszPictureName,char*lpszObjectName)
3、问: 如何在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);
4、问: 如何经Windows对话框设置日期时间? 答: 通过调用Windows对话框实现。具体如下: #include"apdefap.h" void onClick(char*lpszPictureName,char*lpszObjectName, char*lpszPropertyName) {ProgramExcute("c:\\\\win98\\\\control.exe timedate.cpl");} 其中执行的程序路径,需根据具体情况填写。
5、问: 如何在WinCC中调用SQL语言? 答: 1、创建一个SQL文件,此文件在ISQL中建立,文件内包含所要执行的SQL语句。Windows对话框实现。具体如下: 2、在WinCC中用C 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:\\\estsql\\\estsqlRT.DB; DBN=CC_testsql_99-12-03-12:48:26R;READ E:testsql\\\est.sql"; Printf("%s\\r\\n",a); ProgramExcute(a); } 下面是一个简单的SQL文件内容: select *from pde#hd#t#test; output to e:\\\est2.txt FORMAT ascii 注意:文件名及路径中不要带空格。 6、问: 如何整点启动归档? 答: 在"Globle Script"下的Project function编写程序函数:cyclicarchive BOOL cyclicarchive() { #pragma code("kernel.dll"); void GetLocalTime(SYSTEMTIME*lpsz); #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"中的"archivetag"Tab下的Archivetype选择Cycle-selective,在"Event"标签下的"StartEvent"内选择cyclicarchive函数。
7、问: How can I set and reset a WinCC variable by mouse click with Cscript? 答: The following function shows how you can alternately set andreset a WinCC variable by mouse click. #include "apdefap.h" void OnClick(char* lpszPictureName, char* lpszObjectName, char*lpszPropertyName) { BOOL z; z=GetTagBit("MyBitVariable"); if (z==0) SetTagBit("MyBitVariable",1); else SetTagBit("MyBitVariable",0); }
8、问: How can I program a waiting function (Sleep) in WinCC? 答: The following sample program shows how the "Sleep" isused. #pragma code("Kernel32.dll") void Sleep(int milliseconds); #pragma code() Sleep(1000); //time specification in milliseconds Warning: If you use Sleep(), processing the C script is interrupted forthe time indicated. Requests for the interrupted function cannot beprocessed during this time.
9、问: How can I output a SIMATIC timer minutes and seconds inWinCC? 答: If you want to output a SIMATIC Timer in minutes and secondsin WinCC, then in WinCC please use a static text in the GraphicsDesigner to which you interface the following action: char* _main(char* lpszPictureName, char* lpszObjectName, char*lpszPropertyName) { char *p; DWORD hilf; int min, sec; p=SysMalloc(10); hilf=GetTagDWord("Time"); min=hilf/60000; sec=hilf%60000/1000; sprintf(p,"%d min %d sec",min,sec); return p; } The "Time" variable linked to the I/O field must have thefollowing properties: •Data type "32-bit value withoutsign" •Format adaptation"DwordToSimaticBCDTimer" •Address: data area "Times" and addressing"Word" 10:快捷地切换画面 通常要将所有的设备都显示在一张画面里是不可能的,所以将设备按照处理工艺的功能步骤分级在多张画面内,以一个污水处理厂为例分为电泳线、前处理线、生化线、加药线等,之间的切换使用按钮的鼠标动作来实现。这对于用WinCC现成的鼠标动作来实现是很简单的,但是不是要在每张图上都使用相同数量且位置排列顺序一致的按钮呢?(出于对操作的一致性考虑,不能让操作人员在不同的图上,不同的位置找想要操作的按钮)这个问题的解决我们使用WinCC的脚本编程,在按钮动作中调用它的内部函数来实现。首先,组态一幅背景画面,其中包括要显示的静态文本、OLE(例如,时钟)、所有的图形切换按钮及推出关机按钮。第二,在背景画面中插入智能对象(Smart Object)中的画面窗口(PictureWindow),并且使其的尺寸与其分级画面相同。第三,在相应的切换按钮的属性->事件->鼠标动作中编写如下C语言脚本代码: #include\\"apdefap.h\\" void onClick(char *lpsz PictureName, char *lpsz ObjectName,char *lpsz PropertyName) { SetPictureName(\\"背景画面\\", \\"画面窗口\\", \\"电泳处理线\\"); }//\\"背景画面\\"即为始终显示地静态背景的属性名,\\"画面窗口\\"即为在背景画//面中插入地画面窗口(Picture Window)属性名,\\"电泳处理 线\\"即为分级画面//的名称 这样就能方便快捷地切换画面。 |