wincc函数实例

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

如何在WinCC运行时通过按下一个按钮来启动一个程序,打印一个文本文件或者打开一个PDF文件?显示订货号说明:WinCC在动态向导里提供了方便的“启动其他应用程序”功能来启动一个外部程序。这个向导生成一个C脚本。为了给这个程序添加参数,可以打开该脚本并添加相关参数。下面提供了一些例子,这里只显示了脚本中最重要的那一行语句。序号.例程1调用标准程序:ProgramExecute(C:\\WINDOWS\\winhlp32.exe);2打开PDF文件:ProgramExecute(C:\\programfiles\\Adobe\\Reader8.0\\Reader\\AcroRD32.exeC:\\Temp\\document.pdf);3打印文本文件:ProgramExecute(C:\\WINDOWS\\system32\\print.exeC:\\Temp\\document.txt/C);也可以在WinCC在线帮助中找到相关描述,在目录WinCC信息系统使用WinCC用于创建函数和动作的ANSI-CANSI-C函数描述标准函数Windows,如果您使用的是VBS,则在目录使用WinCC用于创建程序和动作的VBSVBScript实例常规例程。注意:在编写C动作时,当指定路径时必须输入双斜线(\),否则会被解释为一个控制字符。当调用某些文件类型(如MicrosoftExcel文件)时,需要输入不止一个函数参数。因此,如果路径规范里包含一个路径,需要在函数参数里面将该路径放在反斜线和双引号标志之间,(如,ProgramExecute(C:\\Programme\\MicrosoftOffice\\OFFICE11\\EXCEL.EXE\C:\\temp\\NewFolder\\Mappe1.xls\))。注意当操作员打开系统窗口的时候,可能会有操作系统级别的系统操作。执行完程序之后关闭这些窗口。您可以用Win32API函数终止一个程序,更多信息和例程可参考条目号2976503。使用C函数“Sleep”显示订货号问题:如何在WinCC中编程“Sleep”等待功能?解答:为此,可以使用WindowsAPI功能“Sleep()”。下面的样例程序演示了如何使用“Sleep”功能。#pragmacode(Kernel32.dll)voidSleep(intMilliseconds);#pragmacode()Sleep(1000);//timeinmilliseconds警告:“Sleep”函数对动作处理性能有很大的负面影响。因此,如果想用此函数的话,请注意以下几点:使用Sleep()时,C脚本的处理在特定的一段时间内被中断。在此期间内,任何对于被中断功能的请求将不被处理。而且,使用相同触发器的所有动作将不再被处理。使用相同的触发器意味着用同一个循环触发器所有动作或变量触发器的所有动作将不再被处理。如果同步地调用动作,这种调用通过一个变量触发器或事件被周期性地或非周期性地启动,而且所有这些功能使用了Sleep()函数,那么所有的动作会被终止。最坏情况下是;由于启动这四个动作将终止对所有动作的处理。如果说,在一个带10-秒延迟触发器的动作中使用了Sleep()函数。那么所有被循环调用的动作将被中断。结果是,如:用1-秒触发器的动作操作中断,除此以外,所有后继的动作也不被执行。这就是说,不仅当前的动作不被处理,其它还没有启动的动作也不会被处理。作业不被处理是因为中断仍储存在队列中。一旦中断结束,所有在队列中的动作将开始被处理。但是,中断结束后,在队列中的动作不会在他们原来指定的循环中被处理。因此,如同前面所述的那样,那么队列中剩下的动作将被一个接一个的处理而不再由触发器启动。并且这些动作只是尽可能快的被处理掉。(理论上同步)。如何打开一个应用程序并保持其始终在前台显示?显示订货号描述:以AdobeReader8.0作为示例,我们将演示如何打开一个程序窗口并始终在前台显示。No.程序1在按钮事件的“鼠标动作”中创建以下C语言函数,例如:#includeapdefap.hvoidOnClick(char*lpszPictureName,char*lpszObjectName,char*lpszPropertyName){HWNDHandle=NULL;Handle=FindWindow(AcrobatSDIWindow,NULL);if(Handle){ShowWindow(Handle,SW_SHOWNORMAL);}else{ProgramExecute(C:/ProgramFiles/Adobe/Reader8.0/Reader/AcroRD32.exe);Handle=FindWindow(NULL,AdobeReader);}SetWindowPos(Handle,HWND_TOPMOST,400,200,520,420,0);}注意:为了参数传递,Windows函数“HWNDFindWindow(LPCSTRlpClassName,LPCSTRlpWindowName);”需要窗口的类名或者窗口自己的名字。可以很容易的通过打开相关程序获得窗口的名字(没有文档)。窗口名字会显示在标题栏。然而使用窗口名字时,当打开文档时窗口名字也许会发生改变。这也是为什么最好使用“lpClassName”参数的原因。2在按钮事件的“鼠标动作”中以下的C语言函数,从窗口名称中确定了窗口的类名:为了显示“printf()”函数的输出,可以在WinCC画面中加载“GSC-Diagnostics”应用程序窗口或者启动“apdiag.exe”程序。#includeapdefap.hvoidOnClick(char*lpszPictureName,char*lpszObjectName,char*lpszPropertyName){charwinclass[256];HWNDHandle=NULL;Handle=FindWindow(NULL,AdobeReader);if(!Handle){ProgramExecute(C:/ProgramFiles/Adobe/Reader8.0/Reader/AcroRD32.exe);Handle=FindWindow(NULL,AdobeReader);}GetClassName(Handle,winclass,sizeof(winclass)-1);printf(WindowClassName:%s\r\n,winclass);}在WinCC中如何加载用户自定义DLLs?显示订货号描述:在WinCC中,您希望使用用户自定义动态链接库,在此条目,我们演示了如何在WinCC中加载一个实例DLL。在带有VBS的WinCC运行模式下,使用VB创建的DLLs不能被加载。关于DLLs更多的信息可以在WinCC在线帮助系统下“使用WinCC用于创建函数和动作的ANSI-C在函数和动作中使用DLL”编号.过程1实例DLL:使用下面的程序代码,利用C编译器创建动态链接库T1_C.dll。在这里,您可以下载已经可以编译的DLL。T1_C.zip(17KB)externC__declspec(dllexport)intaufruf1(inta);#includestdio.h#includewindows.hFILE*h_test;FILE*h_trace;externC__declspec(dllexport)intaufruf1(inta){h_test=fopen(C:/temp/test_dll.txt,a);if(h_test){fprintf(h_test,Function'aufruf1'wascalled!\n);fclose(h_test);}a+=100;returna;};N.B.必须在无出错信息后,创建动态链接库。所有在WinCC中使用的DLL功能都必须使用相应的语法在DLL的开始部分进行指定(在实例动态链接库T1_C.dll的第一行)。为了能够使用DLL功能,在WinCC中的动作或者函数中调用DLL,必须使用#pragmacode语法。2在WinCC中的C脚本加载T1_C.dll动态链接库并且执行aufruf1功能:使用下列的WinCC变量:var1(signed32-bitvalue)result(signed32-bitvalue)在一个按钮的事件的“鼠标单击”C动作中输入下面的C脚本:#includeapdefap.hvoidOnClick(char*lpszPictureName,char*lpszObjectName,char*lpszPropertyName){#pragmacode(c:/temp/T1_C.dll)intaufruf1(inta);#pragmacode()intvalue;value=GetTagDouble(var1);//Return-Type:doubleSetTagDouble(result,aufruf1(value));//Return-Type:BOOL}3结果:图.01关键字:函数调用,API调用打印机的状态框显示订货号问题:如何从WinCC调用打印机的状态框?解答:“控制打印机”从控制面板上调用该框。下面的动作必须在一个按钮下加以编辑,比方说:#includeapdefap.hvoidOnClick(char*lpszPictureName,char*lpszObjectName,char*lpszPropertyName){//打印机框的调用ProgramExecute(C:\\WIN.95\\control.exeprinters);}当在WinCC脚本中结合一个DLL时,使用的内存空间增加了显示订货号问题:如果使用VisualC++创建的一个DLL文件时,发现PC上使用的内存增加了。对于这种情况,应该怎么办?解答:检查是否用正式发行的版本创建了DLL。所提供WinCC是正式发行的版本。这意味着WinCC也可以使用MicrosoftDLLMFC42.DLL的发行版本。如果在测试版本中有DLL文件,那么全局脚本中必须另外加载MFC42.DLL的测试版本。另外,这会增加对内存的用量。在WinCC中始终使用DLL文件的发行版本。可按如下方法创建发行版本:1.打开DLL的项目文件。2.检查是否DLL已在Win32Release组态下被创建。3.如有必要,把活化的组态切换到“Win32Release”。在MicrosoftVisualC++Studio中的“创建”-“定义活化的组态”中做该切换。4.重新创建DLL。5.用DLL的发行版本替换测试版本的DLL。在WinCC中通过C脚本输出声音显示订货号问题:如何在WinCC中通过C脚本输出声音?解答:附件是一个小实例。该C动作位于按钮后,这样只需单击该按钮就可产生声音。C动作:#includeapdefap.hvoidOnClick(char*lpszPictureName,char*lpszObjectName,char*lpszPropertyName,UINTnFlags,intx,inty){#pragmacode(Winmm.dll)VOIDWINAPIPlaySoundA(char*pszSound,char*hmode,DWORDdwflag);#pragmacode()PlaySoundA(C:\\Winnt.400\\Media\\tada.wav,NULL,1);}该功能需要有声卡。PlaySoundA函数的说明:1.参数char*pszSound:指定声音文件(*.wav文件)的全路径。2.参数char*hmode:总为0。3.参数DWORDdwflag:SND_SYNC=0x0000:声音文件播放一次,该脚本一直等到播放结束SND_ASYNC=0x0001:声音文件播放一次,同时并行处理该脚本SND_NODEFAULT=0

1 / 12
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功