《wincc的n个经典问题解答》由会员分享,可在线阅读,更多相关《wincc的n个经典问题解答(18页珍藏版)》请在金锄头文库上搜索。
1、1、问: 如何触发计算机扬声器的声音? 答: 编写如下 C-Action:#pragma code(kernel32.dll);BOOL Beep(DWORD dwFreq,DW ORD dwDuration);#pragma code();Beep(500,500);2、问: 如何通过C 脚本来确定报警信息? 答: 首先必须在画面中插入报警控件,可以用如下两种方式来确认信息:(1)、确认单条信息4 版本和高于此版本的WinCCBOOL OnBtnSinglAckn(char*lpszP ictureName,char*lpszObjectName) 5 版本和高于此版本的 WinCCBOOL
2、 AXC_OnBtnSinglAckn(char*lpsz PictureName,char*lpszObjectName)(2)、确认报警窗口所有可见的报警4版本和低于此版本的 WinCCB OOL OnBtnVisibleAckn(char*lpszPictureName,char*lpszObjectName)5 版本和高于此版本的 WinCCBOOL AXC_OnBtnVisibleAckn(char*lp szPictureName,char*lpszObjectName)3、问: 如何在 WinCC 中读取系统时间? 答: 通过如下C-Action:#pragma code(ker
3、nel32.dll);Void GetLocalTimes(SYSTEMTIME*lpst);#pragma code();SYSTEM TIME time;GetLocalTime(&time);SetTagWord(Var name,time.wYear);SetTagWord(Varname,time.wMonth);SetTagWo rd(Varname,time.wDayOfWeek);SetTagWord(Var name,time.wDay);SetTagWo rd(Varname,time.wHour);SetTagWord(Var name,time.wMinute);Set
4、TagWord(Var name,time.wSecond);SetTagWord(Var name,time.wMilliseconds);4、问: 如何经Windows 对话框设置日期时间? 答: 通过调用Windows 对话框实现。具体如下:i ncludeap defap.hvoid onClick(char*lpszPictureName,char*lpszObjectName,char*lpszPropertyName) ProgramExcute(c:win98control.exe timedate.cpl);其中执行的程序路径,需根据具体情况填写。5、问: 如何在 WinCC
5、 中调用 SQL 语言? 答: 1、创建一个 SQL 文件,此文件在 ISQL 中建立,文件内包含所要执行的 SQL 语句。Windows 对话框实现。具体如下:2、在 WinCC 中用C Script 调用上述 SQL 文件,如下所示:i ncludea pdefap.hvoid OnLButtonDown(char* lpszPictureName,char* lpsz ObjectName,char* lpszPropertyName,UINT nFlags,int x,int y)char*a=c:siemenscommo nSQLANYISQL-q-b-cUID=DBA;PWD=SQ
6、 L;DBF=E:testsqltestsqlRT.DB;DBN=CC_testsql_99- 12-03-12:48:26R;READE:testsqltest.sql ;Printf(%srn,a);ProgramExcute(a);下面是一个简单的 SQL 文件内容:select *from pde#hd#t#test;output to e:test2.txt FORMA T ascii注意:文件名及路径中不要带空格。6、问: 如何整点启动归档? 答: 在Globle Script下的 Project function 编写程序函数:cyclicarchiveBOOL cyclicar
7、chive()#pragma code(kernel.dll);void GetLocalTime(SYSTEMTIME*lpsz);#pragma code();SYSTE MTIME time;Int t1;GetLocalTime(&time);T1=time.wMinute;If(t1=00)SetTagBit(star tarchive,1);Return( BOOL) (GetTagBit(startarchive);在 Tagloging 中的P roperties of process tag中的archive tag Tab 下的Archive type 选择 Cycle-s
8、elective,在Eve nt标签下的StartEvent内选择cyclicarchive函数。7、问: How ca n I set and reset a WinCC variable by mouse click with C script? 答: The following function shows how you can alternately set and reset a WinCC variable by mouse click.i nclude apdefap.hvoid OnClick(char* lpszPictureName, c har* lpszObjectN
9、ame, char* lpszPropertyName)BOOL z;z=GetTag Bit(MyBitVariable);if (z=0) SetTagBit(MyB itVariable,1); elseSetTagBit(MyBitVariable,0); 8、问: How can I program a waiting function (Sleep) in WinCC? 答: The following sampl e program shows how the Sleep is used. #pragma code(Kernel32.dll)void S leep(int mil
10、liseconds);#pragma code() Sleep(1000); /time specifi cation in milliseconds Warning:If y ou use Sleep(), processing the C script is interrupted for the time indicated. Requests for the interrupted function cannot be processed during this time. 9、问: How can I output a SIMATIC timer minutes and second
11、s in WinCC? 答: If you want to output a SIMATIC Timer in minutes and seconds in WinCC, then in WinCC please use a static text in the Graphics Designer to which you interface the following action: char* _main(char* lpszPictureNam e, char* lpszObjectName, char* lpszPropertyName)char *p;DWO RD hilf;int
12、min, sec; p=SysMalloc(10);hilf=Ge tTagDWord(Time);min=hil f/60000;se c=hilf%60000/1000; sprintf(p,%d min %d sec,min,sec);return p; The Time variable linke d to the I/O field must have the following properties: ?Data type 32-bit value without sign ?Format adaptation DwordToSimaticBCDTimer ?Address: d
13、a ta area Times and addressing Word10:快捷地切换画面通常要将所有的设备都显示在一张画面里是不可能的,所以将设备按照处理工艺的功能步骤分级在多张画面内,以一个污水处理厂为例分为电泳线、前处理线、生化线、加药线等,之间的切换使用按钮的鼠标动作来实现。这对于用WinCC 现成的鼠标动作来实现是很简单的,但是不是要在每张图上都使用相同数量且位置排列顺序一致的按钮呢?(出于对操作的一致性考虑,不能让操作人员在不同的图上,不同的位置找想要操作的按钮)这个问题的解决我们使用 WinCC 的脚本编程,在按钮动作中调用它的内部函数来实现。首先,组态一幅背景画面,其中包括要显
14、示的静态文本、OLE(例如,时钟) 、所有的图形切换按钮及推出关机按钮。第二,在背景画面中插入智能对象(Smart Obje ct)中的画面窗口(Picture Window) ,并且使其的尺寸与其分级画面相同。第三,在相应的切换按钮的属性-事件-鼠标动作中编写如下 C 语言脚本代码:i ncludea pdefap.hvoid onClick(char *lpsz PictureName,char *lpsz ObjectName,char *lpsz PropertyName)SetPictureNam e(背景画面, 画面窗口, 电泳处理线); /背景画面即为始终显示地静态背景的属性名,
15、画面窗口即为在背景画/面中插入地画面窗口(Picture Window)属性名,电泳处理线即为分级画面/的名称这样就能方便快捷地切换画面。11:必须始终显示的报警记录,用画面颜色闪烁来提示操作者有故障发生,可以用同样的 C 语言脚本(当然不是加在鼠标动作中)在背景画面的底部留下一条类似Windows 状态栏的报警栏,当出现故障报警的时候在报警栏显示最近一条报警记录,操作人员可以利用按钮切换到主报警记录画面了解故障的完全信息。12:单个部件的组态WinCC 在其内部的图库里集成很多的图形对象,如水箱、电机、阀门等等,对于污水处理用的最多的是水池,搅拌机等等。为了使组态画面贴近实际,能够更好的反应现场工况,图库里的元素并不能满足要求。我们可以利用 WinCC 的画图工具自己绘制适应实际的图形元素,并且使用 C 脚本使其产生动画效果。对于调节池,反应池等可以用矩形来表示,以图形的填充高度来示意其液位的高度。这里要注意的是一些数值地转化,由于一些仪表例如 E+H 的超声波液位计,是以 420毫安的电流信号进入 PLC,对于表的参数设定好以后 4毫安就对应相应池子的液位最低点,而 20 毫安对应于池子的液位最高点。所以在显示数字高度的时候要将 PLC相对 4、20 毫安的数值转化为实际池子的高度范围例如,0.55.5 米。但是对于图 形填充的时候是按照百分数来 #日志日期:2