Siemens-AutomationandDrives-Service&Support-Aut...第1页共3页2005-05-312:06自动化系统SIMATICHMI人机界面HMI软件SCADA系统SIMATICWinCCSIMATICWinCC选件用户归档常问问题样本程序:把用户归档中的重复的函数组合到一个函数里订货号:6AV637..WINCCSIMATICHMISOFTWARE6AV6371-1CB06-0DX0WinCC/UserArchiveV6.0SP36AV638..WINCCSIMATICHMISOFTWARE2问题:如何能减小用户归档存取所用的脚本代码的体积?解答:如果编程了存取用户归档的脚本,对于管理任务来说,就是一大段代码。而该代码对于存取所有的用户归档的代码是一样的。下面的例子说明如何把管理任务组合到一个函数中。就标准的编程方法来说,该脚本的结构看起来如下:生成分类和过滤的条件1.设置到用户归档的一个连接uaConnectuaQueryArchiveByName出错则返回2.设置分类和过滤的条件uaArchiveSetFilteruaArchiveSetSort3.打开询问uaArchiveOpen4.通过询问进行实际工作读,写,删除,插入等其它动作5.清除到用户归档的连接uaArchiveCloseuaReleaseArchiveuaDisconnect6.如果,编程中在一个函数里对每一点都作故障检查,函数就变得非常大且不清晰。当仔细看一下上面的程序结构,可看出每一次只有第1点和第5点有变化。其它几点,不管用户归档的结构是什么,是不变的。可以把上面的结构分成3个函数。第1点实施与任务有关的函数。它生成过滤和分类条件。1.一个通用函数包含了所有的管理动作。该函数应用于所有的用户归档。这个函数接收一个回调函数作为参数。这个回调函数或是为询问中的每个条目所调用,或为全部的用户归档仅调用一次。2.这个回调函数处理第5点的动作。3.这一段表明,你无须担心管理上的问题。只需编程一个生成询问的函数和一个处理归档条目的,与归档有关的函数。下例中使用的是函数uaUtilityEnumRecords。函数描述:BOOLuaUtilityEnumRecords(Siemens-AutomationandDrives-Service&Support-Aut...第2页共3页2005-05-312:06Constchar*pszArchiveName,constchar*lpszFilter,constchar*lpszSort,BOOL(UserFunc)(UAHARCHIVE*phUA,void*pUserData),void*pUserData)参数:pszArchiveName:指针指向一个以0结束的字符串。该字符串含有归档的名字(与出现在用户归档编辑器里的一样)。lpszFilter:指针指向一个以0结束的字符串。该字符串含有找到归档的过滤条件。指针也可以是ZERO。lpszSort:指针指向一个以0结束的字符串。该字符串含有找到归档的分类条件。指针也可以是ZERO。UserFunc:回调函数名。如果传输一个滤波器的话,对每个条目都调用该函数。如果不传输一个滤波器的话,该函数只对全部归档调用一次。该函数必须属于下面的类型:BOOL(UserFunc)(UAHARCHIVE*phUA,void*pUserData).pUserData:指针指向用户数据。该指针被不经修改递送至回调函数。返回值:如果下面的条件满足,函数返回值为TRUE:在建立连接和清除连接的过程中没有出现故障。回调函数返回的一直是值TRUE。否则,返回值为FALSE。函数:uaUtilityEnumRecords函数执行以下各步:建立到用户归档的连接。1.如果过滤和分类条件已经被传输,设置过滤和分类条件。2.打开询问。3.如滤波器还没有设置,函数调用回调函数,但是带一个到归档的“句柄”。如滤波器已存在,则在询问每个条目的一个循环里调用回调函数,但是带一个到一个条目的“句柄”。一旦回调函数返回值FALSE,则循环终止。函数uaUtilityEnumRecords然后返回值FALSE。4.在处理了回调函数后,到归档的连接被设置好。5.下面的PDF文件中可看到函数的源码:uaUtilityEnumRecords_1.pdf(7KB)回调函数的接口:phUA:指针指向一个用户归档的句柄。该“句柄”可以指向全部归档或仅仅指向一个条目。pUserData:指向用户数据的指针。返回值:Siemens-AutomationandDrives-Service&Support-Aut...第3页共3页2005-05-312:06如果出现故障,函数应该返回FALSE。样本项目:该样本项目演示了函数uaUtilityEnumRecords的应用。样本项目用WinCCV5.0生成。也可在WinCCV4.02里使用该函数。样本项目里包含了一个名叫“JobData”的用户归档样例。归档有两列。一列为产品的名称,另一列为产品数量。在起始图像里有4个访问归档的按钮。“插入作业”按钮在归档里插入一新行。InsertButton_1.pdf(3KB)“更改作业”按钮为指定的作业ID设置数量。Change_Job_Button_1.pdf(3KB)“取得具有最大量的作业”按钮为带规定的最大数量的作业提供名称。Get_biggestJob_Button_1.pdf(3KB)“插入部件量的预置号”按钮为每个作业设置规定量。Preset_No_of_PartsButton_1.pdf(3KB)下面的压缩文件包含了一个样本项目。把它加载进硬盘并解开它到一个目录里。现在可以打开并测试该项目。观察归档窗口与全局脚本诊断窗口。UAExample_1.exe(356KB)条目号:2463816日期:04/15/2003©SiemensAG2005版权所有-法人信息-保密政策-应用条款