1、问:如何触发计算机扬声器的声音?答:编写如下C-Action:#pragmacode(kernel32.dll);BOOLBeep(DWORDdwFreq,DWORDdwDuration);#pragmacode();Beep(500,500);2、问:如何通过C脚本来确定报警信息?答:首先必须在画面中插入报警控件,可以用如下两种方式来确认信息:(1)、确认单条信息4版本和高于此版本的WinCCBOOLOnBtnSinglAckn(char*lpszPictureName,char*lpszObjectName)5版本和高于此版本的WinCCBOOLAXC_OnBtnSinglAckn(char*lpszPictureName,char*lpszObjectName)(2)、确认报警窗口所有可见的报警4版本和低于此版本的WinCCBOOLOnBtnVisibleAckn(char*lpszPictureName,char*lpszObjectName)5版本和高于此版本的WinCCBOOLAXC_OnBtnVisibleAckn(char*lpszPictureName,char*lpszObjectName)3、问:如何在WinCC中读取系统时间?答:通过如下C-Action:#pragmacode(kernel32.dll);VoidGetLocalTimes(SYSTEMTIME*lpst);#pragmacode();SYSTEMTIMEtime;字串7GetLocalTime(&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对话框实现。具体如下:#includeapdefap.hvoidonClick(char*lpszPictureName,char*lpszObjectName,char*lpszPropertyName){ProgramExcute(c:\\win98\\control.exetimedate.cpl);}其中执行的程序路径,需根据具体情况填写。5、问:如何在WinCC中调用SQL语言?答:1、创建一个SQL文件,此文件在ISQL中建立,文件内包含所要执行的SQL语句。Windows对话框实现。具体如下:2、在WinCC中用CScript调用上述SQL文件,如下所示:#includeapdefap.hvoidOnLButtonDown(char*lpszPictureName,char*lpszObjectName,字串2char*lpszPropertyName,UINTnFlags,intx,inty){char*a=c:\\siemens\\common\\SQLANY\\ISQL-q-b-cUID=DBA;PWD=SQL;DBF=E:\\testsql\\testsqlRT.DB;DBN=CC_testsql_99-12-03-12:48:26R;READE:testsql\\test.sql;Printf(%s\r\n,a);ProgramExcute(a);}下面是一个简单的SQL文件内容:select*frompde#hd#t#test;outputtoe:\\test2.txtFORMATascii注意:文件名及路径中不要带空格。6、问:如何整点启动归档?答:在GlobleScript下的Projectfunction编写程序函数:cyclicarchiveBOOLcyclicarchive(){#pragmacode(kernel.dll);voidGetLocalTime(SYSTEMTIME*lpsz);#pragmacode();SYSTEMTIMEtime;Intt1;GetLocalTime(&time);T1=time.wMinute;If(t1==00){SetTagBit(startarchive,1);Return(BOOL)(GetTagBit(startarchive));}}在Tagloging中的Propertiesofprocesstag中的archivetagTab下的Archivetype选择Cycle-selective,在Event标签下的StartEvent内选择cyclicarchive函数。字串47、问:HowcanIsetandresetaWinCCvariablebymouseclickwithCscript?答:ThefollowingfunctionshowshowyoucanalternatelysetandresetaWinCCvariablebymouseclick.#includeapdefap.hvoidOnClick(char*lpszPictureName,char*lpszObjectName,char*lpszPropertyName){BOOLz;z=GetTagBit(MyBitVariable);if(z==0)SetTagBit(MyBitVariable,1);elseSetTagBit(MyBitVariable,0);}8、问:HowcanIprogramawaitingfunction(Sleep)inWinCC?答:ThefollowingsampleprogramshowshowtheSleepisused.#pragmacode(Kernel32.dll)voidSleep(intmilliseconds);#pragmacode()Sleep(1000);//timespecificationinmillisecondsWarning:IfyouuseSleep(),processingtheCscriptisinterruptedforthetimeindicated.Requestsfortheinterruptedfunctioncannotbeprocessedduringthistime.字串19、问:HowcanIoutputaSIMATICtimerminutesandsecondsinWinCC?答:IfyouwanttooutputaSIMATICTimerinminutesandsecondsinWinCC,theninWinCCpleaseuseastatictextintheGraphicsDesignertowhichyouinterfacethefollowingaction:char*_main(char*lpszPictureName,char*lpszObjectName,char*lpszPropertyName){char*p;DWORDhilf;intmin,sec;p=SysMalloc(10);hilf=GetTagDWord(Time);min=hilf/60000;sec=hilf%60000/1000;sprintf(p,%dmin%dsec,min,sec);returnp;}TheTimevariablelinkedtotheI/Ofieldmusthavethefollowingproperties:•Datatype32-bitvaluewithoutsign•FormatadaptationDwordToSimaticBCDTimer•Address:dataareaTimesandaddressingWord字串810:快捷地切换画面通常要将所有的设备都显示在一张画面里是不可能的,所以将设备按照处理工艺的功能步骤分级在多张画面内,以一个污水处理厂为例分为电泳线、前处理线、生化线、加药线等,之间的切换使用按钮的鼠标动作来实现。这对于用WinCC现成的鼠标动作来实现是很简单的,但是不是要在每张图上都使用相同数量且位置排列顺序一致的按钮呢?(出于对操作的一致性考虑,不能让操作人员在不同的图上,不同的位置找想要操作的按钮)这个问题的解决我们使用WinCC的脚本编程,在按钮动作中调用它的内部函数来实现。首先,组态一幅背景画面,其中包括要显示的静态文本、OLE(例如,时钟)、所有的图形切换按钮及推出关机按钮。第二,在背景画面中插入智能对象(SmartObject)中的画面窗口(PictureWindow),并且使其的尺寸与其分级画面相同。第三,在相应的切换按钮的属性-事件-鼠标动作中编写如下C语言脚本代码:#include\apdefap.h\voidonClick(char*lpszPictureName,char*lpszObjectName,char*lpszPropertyName){字串2SetPictureName(\背景画面\,\画面窗口\,\电泳处理线\);}//\背景画面\即为始终显示地静态背景的属性名,\画面窗口\即为在背景画//面中插入地画面窗口(PictureWindow)属性名,\电泳处理线\即为分级画面//的名称这样就能方便快捷地切换画面。字串311:必须始终显示的报警记录,用画面颜色闪烁来提示操作者有故障发生,可以用同样的C语言脚本(当然不是加在鼠标动作中)在背景画面的底部留下一条类似Windows状态栏的报警栏,当出现故障报警的时候在报警栏显示最近一条报警记录,操作人员可以利用按钮切换到主报警记录画面了解故障的完全信息。字串712:单个部件的组态WinCC在其内部的图库里集成很多的图形对象,如水箱、电机、阀门等等,对于污水处理用的最多的是水池,搅拌机等等。为了使组态画面贴近实际,能够更好的反应现场工况,图库里的元素并不能满足要求。我们可以利用WinCC的画图工具自己绘制适应实际的图形元素,并且使用C脚本使其产生动画效果。对于调节池,反应池等可以用矩形来表示,以图形的填充高度来示意其液位的高度。这里要注意的是一些数值地转化,由于一些仪表例如E+H的超声波液位计,是以4~20毫安的电流信号进入PLC,对于表的参数设定好以后4毫安就对应相应池子的液位最低点,而20毫安对应于池子的液位最高点。所以在显示数字高度的时候要将PLC相对4、20毫安的数值转化为实际池子的高度范围例如,0.5~5.5米。但是对于图形填充的时候是按照百分数来表示的所以还要将PLC数值转化为0~100%的度量范围。搅拌机的组态可以使用C脚本使其产生动画,在其运行时产生视觉上的旋转。实际上搅拌机的图形是用两个部分椭圆组成的,在椭圆的属性-几何-半径中加入代码如下:#include\apdefap.h\long_main(char*lpszPictureName,char*lpszObjectName,char*字串2lpszPropertyName){staticintx=25,y,z;//x为半径的初始值为25,y为切换变量,z为搅拌机运行状态变量z=GetTagBit(\202搅拌机运行\);//取得PLC搅拌机的运行状态if(z!=0){switch(y){case0:x=x-4;if(x=0)y=1;break;default:x=x+4;if(x=25)y=0;break;}}returnx;字串6}字串313:语音报警的组态在工业现场安全是极其重要的,无论从那个角度讲我们应该利用一切手段减少故障的发生。在故障已经发生的时候,应该在第一时间以多种方式通知操作人员有故障发生。现代微处理计算机的处理速度可以完全胜任对于图形,语音地同时处理。所以我们