过程数据访问服务器的远程配置的方法与系统的制作方法

文档序号:7667539阅读:304来源:国知局
专利名称:过程数据访问服务器的远程配置的方法与系统的制作方法
与相关申请的交叉对比本申请要求2000年9月15日提交的、名称为“Remote MultipleClient Protocol Support”的Todorov et al.U.S.临时申请Serial No.60/232,731的优先权,其内容包含在这里作为参考,包括其中包含的任何对比文件的内容和教导。
本发明的领域本发明一般涉及计算机化过程控制网络的领域。更具体来说,本发明涉及访问制造/过程控制网络内的服务器组件的配置实用程序,以适应服务器组件的操作。这种服务器组件的一个例子是,支持通过监控级客户应用程序对过程控制信息访问的数据访问服务器系统。
本发明的背景工业过程控制技术中的显著进展已经极大改进了制造厂和工厂操作的所有方面。在引入今天现代的工业过程控制系统之前,工业过程由人和初级的机器控制操作/控制。其结果是,对过程的控制的复杂性和程度受到速度的限制,一个或多个人员只能凭借这样的速度判断故障过程状态变量的状态,比较当前状态与所需操作水平,计算矫正的动作(如果需要),并实现对控制点的改变以影响状态变量的变化。
过程控制技术的改进已使非常大和更复杂的工业过程,能够通过编程控制处理器控制。控制处理器执行控制程序,这种程序读取过程状态变量,并基于状态变量数据与所需的设置点信息执行控制算法,以便对工业过程中的控制点提交输出值。这种控制处理器和程序支持本质上自运行的工业过程(一旦建立了设置点)。
尽管工业过程能够在编程过程控制器下在先前建立的设置点处不加干预地操作,但还是希望对控制处理器及它们相关的过程进行监控和监视。这种监控是由人和较高级控制程序两者在多级过程控制网络的应用程序/人界面层提供的。一般希望这种监控能在较低级过程控制器下检验受控过程的正确执行,并配置被控制过程的设置点。
数据访问服务器便于在各种较高级监视/控制客户应用程序内放置过程控制数据。
操作过程中,过程控制器产生关于相关过程的状态和控制信息。控制器的过程状态和控制信息存储在过程控制数据库内和/或向过程控制网络内的若干位置分配。其它过程信息在具有数字数据通信能力的现场装置(例如智能传输器)内产生/存储。过程信息是从数据库和现场装置由数据服务器检索的,供过程控制系统进一步的处理/使用。例如,数据访问服务器,向提供高级控制和监视(人和计算机化)服务的各种客户应用程序,提供检索到的信息。
在包含数据服务服务器的系统中,高级控制和监视应用程序依赖于数据服务服务器适当的配置,以提供这些应用程序赖以进行决策的信息。这种信息包括实时过程变量值、警告等。制造/过程控制系统由于过程控制装置和过程本身的变化而被修改。许多数据服务服务器在复杂的过程控制计算环境中以时间临界方式操作。在具有散布在众多的建筑物中成百上千的计算机的成百上千数据访问服务器的非常大的系统中,配置运行中的数据访问服务器和从其接收它们数据的装置的操作成本,是随这种服务器数目的增加而指数上升的。完成调整操作的滞后也会增加。这种滞后对制造商代价高昂。因而,制造商一般要寻求尽量减少当调整数据访问服务器及其相关过程控制装置时遇到的滞后。重要的是在这种情形下要提供一种装置,供迅速配置数据访问服务器并尽量减少过程停滞的时间。
此外,重要的是可快速校正由过程控制系统管理的工业/制造过程中的配置错误。因为不适当的配置而有故障或不能工作的数据访问服务器可能对制造过程造成严重的停工。在许多应用程序中,如果由数据访问服务器提供的信息或控制通路不可用,则可能导致整个生产线停顿。
本发明的概述本发明提供了一种新的体系结构和方法,用于从远程地点配置数据访问服务器,从而使制造/过程控制系统管理员能够配置多个数据访问服务器,而无需身体行进到执行数据访问服务器的网络上的每一结点。本发明建立了中心化的实用程序,这允许从一个地点配置一组联网的数据访问服务器(DAS)。
根据本发明,一种分布式的配置体系结构,便于过程控制数据访问服务器的远程配置。实施本发明的一种系统包括一个控制台,用户从该控制台操作配置编辑器。配置编辑器包括用户界面基础结构。配置系统还包括配置数据库,存储描述用于被标识的数据访问服务器特定的配置参数的信息。该配置系统还包括规则数据库,用于存储与可通过该配置系统配置的数据访问服务器相关的一组规则。这组配置规则指导用于数据访问服务器的配置定义的构成和/或编辑。在本发明一具体的实施例中,对每一结点类型规定这些规则。
在本发明的一实施例中,用于具体的数据访问服务器的配置规则和参数的远程连接是通过一服务器代理实施的,该服务器代理在能够运行数据访问服务器的远程结点上执行。服务器代理包括可执行的程序,用于通知配置编辑器在它们各结点上数据访问服务器的存在。本发明具体实施例的一个方面是,对于在配置系统内所支持的可配置组件(结点)类型的各种类型的每一个,配置系统能够支持定制编辑器面板。
附图的简要说明所附权利要求具体陈述了本发明的特征。从以下参照附图详细的说明可最好地理解本发明及其目的和先进性,其中

图1是描绘对于本发明一示例性过程控制环境的示意图,其中一过程数据访问服务器包括一远程配置实用程序,该程序检索其它数据访问服务器内的配置信息,并转而检索/接收过程控制信息,并向驻留在过程控制网络的监视/监控层的各客户应用程序提供这种信息;图2描绘了用于执行远程配置多分级软件结构;图3是根据本发明的一实施例,标识一组构成客户的组件和远程配置设施的服务器组件的示意图4根据本发明的一示例性实施例描绘了一组由数据访问服务器包主机(Package Host)支持的接口;图5根据本发明的一示例性实施例描绘了一组由编辑器主机(Editor Host)支持的接口;图6描绘了一组支持对远程存储配置数据库访问的接口;图7是一顺序图,概括了为打开结点编辑器所执行的一组步骤,以便对远程结点上的所选的数据访问服务器的配置进行编辑;图8是一顺序图,概括了用于向配置分层结构添加结点的一组步骤;以及图9是一顺序图,概括了用于在远程配置存储器中保存通过配置设施作出的变化的一组步骤。
示例性实施例的详细说明结合到实施本发明的数据访问服务器系统中的远程配置实用程序和附加的接口,使用户能够从单一的远程计算机配置数据访问服务器。公开了一种示例性配置实用程序体系结构,用于通过MMC(MICROSOFT Management Console)Snap-in执行的数据访问服务器远程配置。通过远程配置咬接(snap-in),对于其本地结点内或在任何网络连接的结点上的任何数据访问服务器,用户可生成,清除,检查和/或操纵所选的数据访问服务器配置。
现转向图1,其中图示地描绘了过程控制网络10的一示例性部分。如前所述,本发明可用于任何包括数据访问服务器的网络。然而,对数据访问服务器进行远程配置的价值,随制造/过程控制网络内数据访问服务器数目和监视站与数据访问服务器之间距离的增加而增加。过程控制网络10,可被看作是连接到与过程控制网络10的特定级相关的一个或多个网络链路的一组装置。在该示例性实施例中,所描绘的过程控制网络10的部分包括现场总线级12,本地控制级14,及管理控制级16。虽然示例性实施例是作为有三级描绘的,但业内专业人员易于理解,本发明可用于具有更多或更少或相同网络级数的数个过程控制网络体系结构。示例性描绘的网络10实施了多级总线拓扑结构。然而,本发明能够结合到实施其它网络拓扑结构(例如星形网络,混合总线/星形网络等),包括单级和分层配置两者的过程控制网络中。
在图1所示的过程控制网络示例性部分中,一组智能现场装置20驻留在现场总线级12。现场装置包括智能过程变量传输器,它们检测在被控制的工业过程中的压力,温度,液流等。现场装置还包括激励器,诸如能够打开和关闭用于储箱、燃烧器的液流阀的装置。
在本地控制级14的控制处理器30对于智能现场装置20组执行本地控制功能。控制处理器30接收由智能现场装置20提供的过程状态信息。例如状态信息包括压力,温度,质量流,容积式流等。控制过程向对过程设置的所需的点施加所接收的状态信息,并然后向激励器传送控制信号,以便获得或维持所需的设置点。控制处理器被编程/配置,以便存储与它们的控制功能相关的状态和控制信息。
管理控制级16包括较高级的控制应用程序,这些程序帮助和/或实现企业/工厂级决策形成和管理(例如设置点)控制值指定功能。警告服务器40从数个较低级来源,包括控制处理器30和形成装置20,接收过程状态数据。警告服务器40对照一组警告/事件条件比较收到的状态数据,并响应检测到的警告/事件条件向监视器或控制过程(例如控制处理器30)发出适当的通知。控制处理器30向被控制的现场装置/激励器发出适当的信号,以便告知事件/警告条件。也是操作在管理控制级16的历史记录器(historian)42把从过程控制系统的上述任何级收到的数据存档。这种数据可用于由各种应用程序进行的审核和检验。人机接口(HMI)44是另一连接到管理控制级16的结点。人机接口44提供了一组图形/文本用户界面功能,使人能够查看与所描绘的图1的项相关的过程控制系统有关的被控制过程的操作/状态。
在本发明的一示例性实施例中,一组数据访问服务器结点50a,50b,50c插入在过程控制系统的管理控制级16的处理结点与较低级(例如本地控制级14与现场总线级12)之间。运行一个或多个逻辑DA服务器的数据访问服务器结点50b,从现场装置20(通过信道52)和/或控制处理器30(通过信道54)接收和/或抽取数据,并把对应的的数据(可能重定格式)提供给过程控制网络10的管理控制级16的处理结点-包括运行其它数据访问服务器之一的一个或多个结点。数据访问服务器结点50a-c执行向各种客户应用程序提供数据的任务,这些应用程序要根据具体的数据交换协议获得数据,否则不能访问在本地控制级14和现场总线级12提供的过程控制数据。在Todorov et al.U.S.patentapplication(number not yet assigned)filed on September 14,2001,andentitled“An Industrial Process Control Data Access ServerSupporting Multipl Client Data Exchange Protocols,”描述了一种用于支持多客户数据交换协议的方法和系统,该文献在此就其包含的任何对比文献整体结合以资对比。
在数据访问服务器(DAS)50c,任何其它的数据访问服务器,或任何管理级16上的结点执行的配置实用程序(在图1中以窗口56指示),提供了用于远程配置过程控制系统数据访问服务器的方法。在本发明的一实施例中,数据访问服务器配置实用程序是在与数据访问服务器一同结点上执行的应用程序。例如如图1中所描绘,配置实用程序在数据访问服务器结点50c上执行。然而,不需要使配置实用程序驻留在任何特定类型的结点上(因为它是独立于DAS数据获取/传送过程执行的)。在本发明的示例性实施例中,配置实用程序(工具)通过至少在结点50a和50b例示的DAS代理(查询这些结点每一个上的注册表),发现运行在50a,50b及50c上的DAS结点数据访问服务器,并把一列表呈现给用户。DAS代理是用于发现网络上数据访问服务器的工具。然后用户能够选择有关的一个或多个数据访问服务器以进行配置。一旦在DAS结点上运行的配置实用程序与数据访问服务器之间建立起连接,数据访问服务器内的其它组件就可从配置实用程序接收并处理信息请求。那些组件将在以下参照图2讨论。还应注意,在本发明的实施例中,配置实用程序被结合到包含在每一数据访问服务器结点50a,50b及50c内的基库中,因而为支持网络内的配置实用程序,管理员方面不必添加任何特别程序或可执行代码。
在图1中所述的示例性实施例中,执行每一DAS结点50a-c核心功能的处理引擎主控配置实用程序,并通过这里以下参照图4-6所述的一组明确定义的接口公开一组默认的配置信息。如以上这里所述,经过DA服务器的服务器特别部分的定制,通过扩展由数据访问服务器向配置实用程序公开的可配置特性范围,能够强化数据访问服务器结点的功能。
此外,要重申的是,本发明不限于特定的过程控制系统网络拓扑结构或技术。例如,所公开的示例性过程控制网络包括分层安排的数字系统。然而在另外的网络实施例中,本发明被结合到与单级过程控制网络连接的监视结点,其中现场装置,控制处理器,及管理控制应用程序组成单总线上的结点。在另一情形下,DAS接收关于采用4-20毫安标准用于过程通信的传统的模拟式现场装置的数据。
若干特性有助于强化从远程地点配置数据访问服务器。首先,配置实用程序结合了一般的多层次体系结构。可辨别的层次包括接口,规则解释,及配置持续层次。其次,配置实用程序支持在上述级的热(在线)配置。第三,能够定义任何数目的分层级。第四,配置实用程序支持进行远程配置。将在以下更详细地讨论这些特性的每一个。
参见图2,配置实用程序的一般多层级软件体系结构包括数据服务层100,业务服务层110,及表示服务层120。各层级是通过在数据服务层100执行的“规则”文件实现的,就是说与(对)每一数据访问服务器相关(规定)。数据访问服务器特定的规则文件,规定了一组配置分层级以及关于对每一分层级配置结点定义的性质的信息。关于性质的信息包括所允许的子结点的最小/最大数,所允许的子结点的名称和类型,默认性质值,最小/最大性质值,以及性质的名称和类型。
“规则”文件例如是通过一组XML定义实现的。然而,作为业内专业人员易于理解,其它语言/格式规定规则也能够采用。在底层级内规则文件访问的封闭允许对这一方案进一步的修改而不会影响配置分层结构的任何其它层。而且包含在规则文件中的还有对每一分层结构级激活的ActiveX面板的GUID。
分层的组织支持一种一般的体系结构,允许在一级的改变而不影响未改变的其它级。在表示服务层次120的主配置MMC咬接使用业务服务层次110作为“规则解释程序/监视程序”,该程序防止用户在配置的树视图中建立无效的分层结构。业务服务层次110还保证了由用户输入的数据,就由特定数据访问服务器规则文件而言是有效的。
关于所公开的远程配置体系结构的第二方面,热配置是指允许用户修改服务器的配置部分,并把这些改变结合到运行中的并且是工作中的服务器中。被更新的配置参数的实际推动依赖于由服务器开发者规定的界面,该界面便于通知服务器这一配置的改变。DAS代理跟踪DAS结点上当前工作的服务器,并允许用户作出对当前服务器状态所允许的配置的修改。
就所公开的远程配置体系结构的第三方面来说,在配置树的分层结构内任何级(不要与图2所描绘的程序分层结构混淆),规则’文件定义了能够添加到当前结点下的树的配置结点(树叶和/或分支)。这样,配置树体系结构由实际访问服务器开发者所定义,并且没有另外会限制这种开发的预先定义分层结构。
就所公开的远程配置体系结构第四方面来说,实现配置实用程序的MMC咬接,在任何网络可访问结点上对于特定的实际访问服务器(可以是远程的或本地的)是可执行的。结点之间的通信通过DCOM进行。安装在所有服务器结点上的DAS代理处理服务器定位/接口功能。通过DAS代理客户(配置实用程序)查询所安装的服务器和/或当前运行的服务器。
现转向图3,其中简略描绘了配置软件组件的编排,用于通过安装在数据访问服务器结点50c上的配置实用程序,实现远程配置信息抽取/操作。这里还称作为DAS控制客户(DASCC 200)MMC的咬接模块200,是根据Microfoft MMC实用程序的要求书写的,并构成由用户从WINDOWS 98(以及后来的WINDOWS版本)资源工具包调用的MMC主要的可执行模块。MMC咬接表示许多潜在的方式之一,以便捆绑配置实用程序的组件。程序包主机210是把通信封闭在用于远程配置的暂留区内的模块(DLL)。暂留区是物理存储装置与存储在物理存储装置上的配置/规则的逻辑组织的一种组合。例如,暂留区可以是存储在存储结点上的带有XML文本的文件。另外,暂留区具体可定义为存储结点上的关系数据库。程序包主机210完成以下任务(1)从暂留区抽取可用的数据并使其对于结点编辑器可用,(2)核实并把由结点编辑器提供的值暂留到暂留区,以及(3)向与生成并删除新的/现有的配置分层结构结点相关的DASCC提供服务。结点程序包220是服务器专用(即从工具包模板定制的用户)的模块,对业务服务器110提供定制验证逻辑。
编辑器主机230模块(DLL)是在支持用于编辑特定结点类型的定制配置接口中,对用户开发者可生成的所有定制面板(结点编辑器)的一般主机。编辑器主机230对所有的配置分层结构-诸如对于“施加”变化,“回复”参数值到上次被暂类留值等,提供一种公共的GUI外观和感觉。结点编辑器240,如同可得程序包,是对在DAS配置实用程序中支持的每一结点类型专用的一种定制的面板。结点编辑器240一般是由数据访问服务器开发者提供的,并封闭在编辑器主机230上配置的具体结点类型的细节。在本发明的一实施例中,结点编辑器240的库(由配置系统支持的每一结点类型一个)存储在DAS控制客户200的计算机结点上。然而这不是要求,并实际上在本发明另外的实施例中,结点编辑器的例子(从一般结点编辑器接口定义推导)存储在例如包含用于特定DAS的配置和规则信息的远程结点上。
存储在包含可访问的DAS每一远程结点上的远程基础结构250,包括一组便于远程配置的模块。远程基础结构250例如包括两个模块(并能够在未来需要时扩展)。首先,DASConfigAssess.dll便于与存储器/暂留区通信,以便对于所选数据访问服务器访问/存储当前配置和规则。这一接口从配置参数和规则区存储在系统的各种方式抽取配置编辑器。这允许配置编辑器可与各种存储区格式(例如文件,数据库等)不必修改而操作。与特定存储格式和访问方法相关的访问方法。第二,DASAgent.exe便于对已安装的/运行的DAS实例查询结点,并向用户的远程配置实用程序返回报告。
规则270是一种暂留区,一般由用户在远程配置期间规定并然后存储在远程DAS结点,包含所有分层结构参数和它们的关系/相关性的描述。在本发明的一实施例中,XML列表存储在规则文件中,但另外的一种实现也考虑诸如数据库。类似于C++编程语言,规则文件对应于类,同时配置280对应于“规则”定义的类的一组实例。配置280是标识/描述所有配置的分层结点及其相关参数的远程配置的一种暂留区(在由用户进行远程配置后存在)组件。又虽然XML用于一示例性实施例,但本发明的其它的实施例以不同的格式/语言(例如数据库)规定了配置。
图4,5和6包括与远程配置设备相关的对象类和类的相关接口。转向图4,其中描绘了在CnodeEditor类290中实现的一组接口,结点编辑器240是从该类例示的。CnodeEditor类对象是基于以下所规定的接口对于配置结点的每一类型生成的。IDASEditor接口295对于编辑器主机230提供了一种机制,以便与结点编辑器240通信。IDASEditorEvent 310接口(以下参照与编辑器主机230相关的对象类描述)对程序包主机210提供了一种机制,以便通知结点编辑器240关于上下文的变化。
<pre listing-type="program-listing"><![CDATA[Declaration[object,uuid(320C0A36-AB7C-11d4-93E4-00B0D0201D61),pointer_default(unique)]/*IDASEditor is an interface implemented by each Node Editor.It allows theEditor host to initialize the Node Editor and notify it about extenal events.*/interface IDASEditorIUnknown{HRESULT Initialize( [in] IDASPackageSite*pPackage, [in] IDASEditorSite*pHostSite, [in] BSTR bstrFullNodeName, [in] BSTR bstrNodeName, [in] BSTR bstrDelimeter, [in] VARIANT_BOOL bIsReadOnly, [in,unique]VARIANT*pVarAux);HRESULT Apply();HRESULT Restore();HRESULT Close();}Description{vb}OperationsApply/*Notifies the Node Editor to persist(store)current data*/DeclarationHRESULT Apply ()Return ValueS_OKThe status change was noted.E_FAIL FailureClose/*Notifies the Node Editor that editor will be closed*/DeclarationHRESULT Close ()Return ValueS_OKCleanUp was succeeful.E_FAIL FailureInitialize /*Initialize the Node Editor with parameters allowing it to communicate with DAS infrastructure*/DeclarationHRESULT Initialize ( [in] IDASPackageSite*pPackage,[in] IDASEditorSite*pHostSite,[in] BSTR bstrFullNodeName,[in] BSTR bstrNodeName,[in] BSTR bstrDelimeter,[in] VARIANT_BOOL bIsReadOnly,[in,unique]VARIANT*pVarAux)Return ValueS_OKThe status change was noted.E_FAIL FailureRestoreDeclarationHRESULT Restore()/*Instruct the Node Editor to restore the last persisted values*/Return ValueS_OKThe status change was noted.E_FAIL Failure]]></pre>
继续参照图4,其中描绘了一组接口,它们是在编辑器主机230从其被例示的CDASEditorHost类300中实现的。对于每一DAS例子例示一个编辑器主机对象。IDASEditorEvent 310接口对程序包主机210提供了一种机制,以便通知编辑器主机230关于上下文的变化。上下文的变化例如包括结点名称的变化和由特定结点编辑器240公开的参数的变化。IDASEditorEvent 310的操作用来通知编辑器主机230和结点编辑器240关于由这些项事件查询的行动。在编辑器主机230的情形下,这种调用例如由程序包主机210使用。
<pre listing-type="program-listing"><![CDATA[Declaration[ object,uuid(320C0A33-AB7C-11d4-93E4-00B0D0201D61),pointer_default(unique) ]interface IDASEditorEventsIUnknown{HRESULT OnNameChange([in,string]BSTR bstrFullOldNodeName, [in,string]BSTR bstrOldNodeName, [in,string]BSTR bstrNewNodeName); HRESULT OnAtributeChange([in,string]BSTR bstrFullNodeName, [in,string]BSTR bstrAttrName, [in]DWORD PropID, [in]VARIANT varNewValue);}Description{vb}OnAtributeChange /*Notifies the Node Editor about parameter changes*/DeclarationHRESULT OnAtributeChange ( [in,string]BSTR bstrFullNodeName, [in,string]BSTR bstrAttrName, [in]DWORD PropID, [in]VARIANT varNewValue ) Parameters BstrFullNodeNameSpecifies the full node name BstrAttrNameSpecifies the attribute namePropID Specifies the property IDVarNewValueNew attribute ValueReturnValueS_OK SuccessOnNameChange /*Notifies the Node Editor about node name changes*/DeclarationHRESULT OnNameChange([in,string] BSTR bstrFullOldNodeName, [in,string] BSTR bstrOldNodeName, [in,string] BSTR bstrNewNodeName)ParametersbstrFullOldNodeName Specifies the full old node nameBstrOldNodeName Specifies the node nameBstrNewNodeName Speciffes the node nameReturn ValueS_OK Success]]></pre>
IDASEditorHost接口320是由EditorHos组件实现的并在各结点编辑器之间提供公共的功能。例如它主控定制结点编辑器,并处理诸如当用户寻求暂留新的配置数据或存储上一个暂留配置数据时的事件。
<pre listing-type="program-listing"><![CDATA[Declaration[ object,uuid(320C0A34-AB7C-11d4-93E4-00B0D0201D61),pointer_default(unique)]interface IDASEditorHostIUnknown{ HRESULT Initialize( [in] IDASPackageSite*PackageSite,[in] BSTR strEditorGuid,[in] BSTR strFullNodePath,[in] BSTR strNodeName,[in] BSTR strNodeType,[in] BSTR bstrDelimiter);HRESULT Close( [in] BOOL bForce);HRESULT IsDirty([out] BOOL* dirty);}OperationsClose/*Notification that hosted Configuration Node Editor will be closed*/DeclarationHRESULT Close([in] BOOL bForce)ParametersBForceFlag specifying whether to Close and discard changes without prompting user to save changes or notTRUE-discard changes(if any)and do not prompt user FALSE-prompt user if changes since last ′Apply′Return ValueS_OK Sucess.Initialize/*Initialize that editor host with parameters allowing it to communicate with the storage area*/DeclarationHRESULT Initialize ([in] IDASPackageSite*PackageSite,[in] BSTR strEditorGuid,[in] BSTR strFullNodePath,[in] BSTR strNodeName,[in] BSTR strNodeType,[in] BSTR bstrDelimiter)ParametersPackageSite Interface to the Storage areastrEditorGuid GUID for the custom editorstrFullNodePath This is fully qualified name of the parent.strNodeName Specifies the Node NamestrNodeType Specifies is Node TypebstrDelimiter Specifies is Node TypeReturn ValueS_OK Succees.IsDirty/*Checks whether some of the parameters in the Node Editor were changed(state‘dirty’)since the last“Apply”*/DeclarationHRESULT IsDirty([out] BOOL* dirty)ParametersDirtyFlag indicating whether the editor is“dirty”(has changed attributes) TRUE-the attributes has been change FALSE-no change from the last save operationReturn ValueS_OK Succees.]]></pre>
IDASEditorSite接口330对于结点编辑器240提供了一种机制,以便对编辑器主机230通信。
<pre listing-type="program-listing"><![CDATA[Declaration[ object,uuid(F4136354-C2A0-47db-89F1-463ADEDFFDFF),pointer_default(unique)]interface IDASEditorSiteIUnknown{HRESULT OnStatusChange();}Description{vb}OperationsOnStatusChangeDeclarationHRESULT OnStatusChange ()Return ValueS_OK The status change was noted.]]></pre>参见图5,其中描绘了在CDASPackage类400中实现的一组接口。IDASPackage接口410对于结点编辑器240提供了一种访问存储区的机制。IDASPackage接口410还提供了对DAS定制控制台(或DASCC)的服务。例如当用户向一配置添加新的结点时。DASCC在对特定存储的结点规定的规则视图中呈现“可用”结点的指示。例如,用户在规则文件中配置一类型“TCP”的结点。该TCP结点能够具有类型PLC的多达3个子结点,以及多达5的PyramidIntegrator结点。在用户添加3个PLC结点之后,将不允许添加这种类型更多的结点,因为配额用完。这种对于配置规则一致性的测试是由PackageHost 210向DASCC 200提供的信息实现的。PackageHost 210“编译”了来自规则和配置的信息,并把过程的结果提供给DASCC 200或结点编辑器240。
<pre listing-type="program-listing"><![CDATA[Declaration[object,dual,uuid(320C0A37-AB7C-11d4-93E4-00B0D0201D61),pointer_default(unique)]/*IDASPackage provides information to the DASCC about the current DASconfiguration and notifies the Package Host about user commands(likeadd/delete a node for example)*/interface IDASPackageIDispatch{HRESULT Initialize([in,string]BSTR bstrServerGUID,[in]IUnknown*pCfgRules);HRESULT GetChildren([in,string]BSTR bstrFullNodeName,[in,string]BSTR bstrNodeDelimiter,[out]SAFEARRAY(BSTR) *bstrArrayChildrenNames,[out]SAFEARRAY(BSTR) *bstrArrayChildrenTypes,[out]SAFEARRAY(BSTR) *bstrArrayChildrenDelimiters);HRESULT GetPossibleChildTypes( [in,string] BSTR bstrFullNodeName,[out] SAFEARRAY(BsTR) *bstrChildTypes);HRESULT GetNodeProperties([in,string]BSTR bstrNodeType,[out] BSTR*strEditorGUID,[out] BSTR*strDelimiter);HRESULT RenameNode([in,string] BSTR bstrFullOldNodeName,[in,string] BSTR bstrOldNodeName,[in,string] BSTR bstrNewNodeName);HRESULT AddChild([in,string] BSTR bstrFullNodeName,[in,string] BSTR bstrType,[in,string] BSTR bstrDelimiter);HRESULT DeleteChild([in,string] BSTR bstrFullNodeName);HRESULT SelectionChange([in,string] BSTR bstrFullNodeName,[in,string] BSTR bstrNodeType);HRESULT GetCfgSetFileName([out] BSTR* pFileName);HRESULT SetCfgSetFileName([in] BSTR bstrFileName);HRESULT EnumCfgSets([out] SAFEARRAY(BSTR) *pConfigSets);HRESULT SwitchToCfgSet([in] BSTR bstrConfigSet);HRESULT SaveCfgSetAs([in] BSTR bstrConfigSet);HRESULT ClearConfig();HRESULT DeleteCfgSet([in] BSTR bstrConfigSet);}OperationsAddChildDeclarationHRESULT AddChild ([in,string]BSTR bstrFullNodeName, [in,string]BSTR bstrType, [in,string]BSTR bstrDelimiter )Parameters bstrFullNodeName Specifies fully qualified Node name BstrType Specifies node type bstrDelimiterSpecifies the new Node DelimiterReturn ValueS_OKSuccessE_FAIL ErrorClearConfigDeclarationHRESULT ClearConfig()Return ValueS_OKSuccessE_FAIL ErrorDeleteCfgSetDeclarationHRESULT DeleteCfgSet([in] BSTR bstrConfigSet)ParametersbstrConfigSetSpecify configation set nameReturn ValueS_OK SuccessE_FAILErrorDeleteChildDeclarationHRESULT DeleteChild([in,string] BSTR bstrFullNodeName)ParametersbstrFullNodeNameSpecifies fully qualified node nameReturn ValueS_OK SuccessE_FAIL ErrorEnumCfgSetsDeclarationHRESULT EnumCfgSets([out] SAFEARRAY(BSTR) *pConfigSets)ParameterspConfigSetsreturns list wit configuration set(only names,no path)GetCfgSetFileNameDeclarationHRESULT GetCfgSetFileName([out] BSTR* pFileName)ParameterspFileName full nameGetChildrenDeclarationHRESULT GetChildren([in,string] BSTR bstrFullNodeName,[in,string] BSTR bstrNodeDelimiter,[out] SAFEARRAY(BSTR) *bstrArrayChildrenNames,[out] SAFEARRAY(BSTR) *bstrArrayChildrenTypes,[out] SAFEARRAY(BSTR) *bstrArrayChildrenDelimiters)ParametersbstrFullNodeName Specifies fully qualified node namebstrNodeDelimiter Specifies fully qualified node namebstrArrayChildrenNames Array with the names of the all childrenbstrArrayChildrenTypes Array with the types for each childrenbstrArrayChildrenDelimitersArray with the delimiters for each childrenReturn ValueS_OKSuccessE_FAIL ErrorGetNodePropertiesDeclarationHRESULT GetNodeProperties([in, string] BSTR bstrNodeType,[out] BSTR*strEditorGUID,[out] BSTR*strDelimiter)ParametersbstrNodeType Speciffes node typeStrEditorGUIDReturns the Editor GUID for the specified Node typestrDelimiter Returns Node delimiterReturn ValueS_OKSuccessE_FAIL ErrorGetPossibleChildTypesDeclarationHRESULT GetPossibleChildTypes([in, string] BSTR bstrFullNodeName,[out] SAFEARRAY(BSTR) *bstrChildTypes)ParametersbstrFullNodeName Speciffes fully qualified node namebstrChildTypes Returns a list with child typesInitializeDeclarationHRESULT Initialize([in,string]BSTR bstrServerGUID,[in]IUnknown*pCfgRules)ParametersBstrServerGUID Specifies Server Name(ProgID of the Server)PCfgRulesInterface to the IOAgent on the node where the Server residesReturn ValueS_OKSuccessE_FAIL ErrorRenameNodeDeclarationHRESULT RenameNode([in,string] BSTR bstrFullOldNodeName,[in,string] BSTR bstrOldNodeName,[in,string] BSTR bstrNewNodeName)ParametersbstrFullOldNodeNameSpecifies the Full Old Node a NamebstrOldNodeNameSpecifies the Full New name for a NodebstrNewNodeNameSpecifies the Full New name for a NodeReturn ValueS_OKSuccessE_FAIL ErrorSaveCfgSetAsDeclarationHRESULT SaveCfgSetAs([in] BSTRbstrConfigSet)ParametersbstrConfigSetSpecify configation set nameReturn ValueS_OKSuccessE_FAIL ErrorSelectionChangeDeclarationHRESULT SelectionChange([in,string] BSTR bstrFullNodeName,[in,string] BSTR bstrNodeType)ParametersBstrFullNodeName Specifies fully qualified node nameBstrNodeType Specifies Node typeReturn ValueS_OKSuccessE_FAIL ErrorSetCfgSetFileNameDeclarationHRESULT SetCfgSetFileName([in] BSTR bstrFileName)SwitchToCfgSetDeclarationHRESULT SwitchToCfgSet([in] BSTR bstrConfigSet)]]></pre>
IDASPackageSite接口420支持结点编辑器240与对于它们的参数值之间的连接。这一接口不直接与存储区通信。在示例性实施例中,还有存储区与PackageHost 210之间的一个间接级(这实现IDASPackageSite)。这一间接级是通过在远程基础结构250中实现了IIOSrvCfgPersist和IioSrvCfgRules接口的DASConfigAccess.dll提供的。
<pre listing-type="program-listing"><![CDATA[Declaration[ object,uuid(320CoA39-AB7C-11d4-93E4-00B0D0201D61),pointer_default(unique)]interface IDASPackageSiteIUnknown{HRESULT GetAttribute( [in] DWORD attributeHandle,[in] DWORD Prop ID,[out,retval]VARIANT*pVarValue );HRESULT SetAttribute( [in] DWORD attributeHandle,[in] DWORD PropID,[in] VARIANT varValue,[out,retval] VARIANT_BOOL*pbSuccessFlag );HRESULT GetAttrHandle( [in,string] BSTR attParent,[in,string] BSTR attName,[out,retval] DWORD*pAttributeHandle );HRESULT CloseAttrHandle([in] DWORD attributeHandle );HRESULT GetPackageShapeInfo([in,string]BSTR bstrFullNodeName,[in] SHORT nSelection,[out] SAFEARRAY(BSTR)*bstrAttrNames );HRESULT Commit( BSTR bstrFullNodeName,BSTR bstrType,BSTR bstrDelimiter,SHORT*CommitStatus );}Description{vb}OperationsCloseAttrHandleDeclarationHRESULT CloseAttrHandle([in]DWORD attributeHandle)ParametersattributeHandle Handle of the attribute,retrieved from Shape Data Collection.Return ValueS_OK ShapeInfo was successfully retrieved.CommitDeclarationHRESULT Commit( BSTR bstrFullNodeName,BSTR bstrType,BSTR bstrDelimiter,SHORT*CommitStatus)ParametersbstrFullNodeNameFull Node namebstrTypeNode typebstrDelimiter Node DelimitersCommitStatusIndicates the status of the Commit Following values are definedCOMMIT_OK-Changes are saved COMMIT_INVALID_HANDLE-invalid handle specified COMMIT_FAIL-The changes are not saved due toproblems with the overall integriry of the node attributesCOMMIT_REMOTE_FAIL-Remote method call has failedReturn ValueS_OK new values were successfully setE_FAIL Fail to save the changeGetAttrHandleDeclarationHRESULT GetAttrHandle( [in,string] BSTR attParent,[in,string] BSTR attName,[out,retval] DWORD*pAttributeHandle )ParametersattParent The parent of the attribute.attName The parent of the attribute.pAttributeHandle The returned handle of the attribute.Can be used in Get/Set Attribute calls.Return ValueS_OK Successfully set the value of the property.]]></pre>
注释GetAttriHandIe操作获得属性处理,然后该属性处理能够用于Get/Set属性调用。GetAttriHandle操作不解决阵列或性质基准。如果需要这些,客户应当在发出Get或Set调用之前直接更新适当的MxAttributeHandle字段。
<pre listing-type="program-listing"><![CDATA[GetAttributeDeclarationHRESULT GetAttribute ( [in]DWORD attributeHandle, [in]DWORD PropID, [out,retval] VARIANT*pVarValue )ParametersattributeHandle Handle of the attribute,retrieved from Shape Data Collection.PropID Requested Property IDpVar Value Receives the Value of the attribute/property.Return ValueS_OKSuccessfully retrieved the value.RemarksUsed to get the attribute values of a primitives.GetPackageShapeInfoDeclarationHRESULT GetPackageShapeInfo([in,string]BSTR bstrFullNodeName, [in] SHORT nSelection, [out] SAFEARRAY(BSTR)*bstrAttrNames )Parameters BstrFullNodeName Full Node Name NSelection Specifies the type of array to retum For all allowed values please refer to enumerator SHAPE_INFO_ENUM Bstr Attr NamesBSTR Safe array pointer.This array will be filled with reqested shape information for specifique nodeReturn ValueS_OK ShapeInfo was successfully retrieved.SetAttributeDeclarationHRESULT SetAttribute ( [in] DWORD attributeHandle, [in] DWORD PropID, [in] VARIANT varValue, [out,retval] VARIANT BOOL*pbSuccessFlag)ParametersAttributeHandleHandle of the attribute,retrieved from Shape Data Collection.PropID Requested Property IDVarValue Value of the property.pbSuccessFlag Signifies whether set was accepted.Return ValueS_OK Successfully set the value ofthe property.]]></pre>
注释用来设置原语的属性值。
现参见图6,其中描绘了在CIOSrvCfgpersist类500中实现的一组接口。IIOSrvCfgpersist类510定义了一组方法,用于读取当前配置,用于编辑或在配置280中保存一新的配置。
<pre listing-type="program-listing"><![CDATA[Declaration[ object, dual, uuid(52088D9A-DED4-11D3-83F2-00A024A866AC), helpstring(″IIOSrvCfgPersist Interface″), pointer_default(unique) ]/* IIOSrvCfgPersist provides a way to persis the current configuration intothe storage area and retreive this information later*/interface IIOSrvCfgPersistIDispatch{HRESULT GetCfgFileName( [in] BSTRServerClsIdString, [out]BSTR*pFileName ); HRESULT SetCfgFileName( [in] BSTRServerClsIdString, [in] BSTR FileName );HRESULT EnumCfgSets( [in] BSTRServerClsIdString, [out]SAFEARRAY(BSTR) *pConfigSets );HRESULT SwitchToCfgSet( [in] BSTR ServerClsIdString, [in] BSTR pConfigSet );HRESULT SaveCfgSetAs( [in] BSTR ServerClsIdString, [in] BSTR pConfigSet );HRESULT ClearCfgFile( [in] BSTR ServerClsIdString );HRESULT DeleteCfgFile([in] BSTR bstrServerClsIdString,[in] BSTR bstrConfigurationSet );HRESULT SetHierarchyObject( [in] BSTR ServerCls IdString,[in] BSTR Name,[in] BSTR Type,[in] BSTR Delimiter,[in,unique] SAFEARRAY(BSTR) *pProperties );HRESULT GetHierarchyObject( [in] BSTR ServerClsIdString,[in] BSTR Name,[out] BSTR * pType,[out] BSTR * pDelimiter,[out]SAFEARRAY(BSTR)* pProperties );HRESULT RemoveHierarchyObject( [in] BSTR ServerClsIdString,[in] BSTR Name );HRESULT RenameHierarchyObject( [in] BSTR ServerClsIdString,[in] BSTR OldName,[in] BSTR NewName);HRESULT SetTopicObject( [in] BSTR ServerClsIdString,[in] BSTR Name,[in] BSTR Parent,[in] BSTR Type,[in] LONG UpdateInterval,[in,unique] SAFEARRAY(BSTR)* pProperties );HRESULT GetTopicObject( [in] BSTR ServerClsIdString,[in] BSTR Name,[in] BSTR parent,[out] BSTR* pType,[out] LONG* pUpdateInterval,[out] SAFEARRAY(BSTR) * pProperties );HRESULT RemoveTopicObject( [in] BSTR ServerClsIdString,[in] BSTR Name,[in] BSTR Parent);HRESULT RenameTopicObject( [in] BSTR ServerClsIdString,[in] BSTR OldName,[in] BSTR Parent,[in] BSTR NewName);HRESULT SetLeafObject( [in] BSTR ServerClsIdString,[in] BSTR Name,[in] BSTRParent,[in] BSTRType,[in] BSTRDelimiter,[in,unique] SAFEARRAY(BSTR) * pProperties );HRESULT GetLeafObject( [in] BSTR ServerClsIdString,[in] BSTR Name,[in] BSTR Parent,[out] BSTR * pType,[out] BSTR * pDelimiter,[out] SAFEARRAY(BSTR) * pProperties );HRESULT RemoveLeafObject( [in] BSTR ServerClsIdString,[in] BSTR Name,[in] BSTR Parent);HRESULT RenameLeafObject( [in] BSTR ServerClsIdString,[in] BSTR OldName,[in] BSTR Parent,[in] BSTR NewName);HRESULT BrowseHierarchyObjects( [in] BSTR ServerClsIdString,[in] BSTR BranchName,[out]SAFEARRAY(BSTR)*pBranches,[out]SAFEARRAY(BSTR)*pLeaves,[out]SAFEARRAY(BSTR)*pTopics );HRESULT SetDataObject( [in] BSTR ServerClsIdString,[in] BSTR Name,[in] BSTR Type,[in,unique] SAFEARRAY(BSTR) * pProperties );HRESULT GetDataObject( [in] BSTRServerClsIdString,[in] BSTRName,[out] BSTR * ppType,[out]SAFEARRAY(BSTR) * pProperties );HRESULT RemoveDataObject( [in] BSTRServerClsIdString,[in] BSTRName);HRESULT RenameDataObject( [in] BSTRServerClsIdString,[in] BSTROldName,[in] BSTRNewName);HRESULT BrowseDataObjects( [in] BSTRServerClsIdString,[out]SAFEARRAY(BSTR) *pDataObjects );HRESULT Getsystemobject( [in] BSTRServerClsIdString,[out] SAFEARRAY(BSTR) * pProperties );HRESULT SetSystemObject( [in] BSTRServerClsIdString,[in,unique] SAFEARRAY(BSTR) * pProperties );HRESULT RemoveSystemObject( [in] BSTRServerClsIdString);}OperationsBrowseDataObjectsDeclarationHRESULT BrowseDataObjects( [in] BSTRServerClsIdString,[out] SAFEARRAY(BSTR) * pDataObjects )BrowseHierarchyObjectsDeclarationHRESULT BrowseHierarchyObjects( [in] BSTRServerClsIdString,[in] BSTRBranchName,[out]SAFEARRAY(BSTR)*pBranches,[out]SAFEARRAY(BSTR)*pLeavres,[out]SAFEARRAY(BSTR)*pTopics )ClearCfgFileDeclarationHRESULT ClearCfgFile( [in] BSTRServerClsIdString )Return ValueS_OK The operation succeeded.E_FAIL Theoperation failed.E_OUTOFMEMORYNot enough memoryE_INVALIDARG An argument to the function was invalid.DeleteCfgFileDeclarationHRESULT DeleteCfgFile( [in] BSTR bstrServerClsIdString,[in] BSTR bstrConfigurationSet )Return ValueS_OK The operation succeeded.E_FAILThe operation failed.E_OUTOFMEMORY Not enough memory E_INVALIDARGAn argument to the function was invalid.EnumCfgSetsDeclarationHRESULT EnumCfgSets( [in]BSTRServerClsIdString,[out] SAFEARRAY(BSTR) *pConfigSets )ParameterspConfigSetsreturns list wit configuration set(only names,no path)GetCfgFileNameDeclarationHRESULT GetCfgFileName ( [in] BSTR ServerClsIdString,[out] BSTR*pFileName )Return ValueS_OKThe operation succeeded.E_FAIL The operation failed.E_OUTOFMEMORY Not enough memoryE_INVALIDARGAn argument to the function was invalid.GetDataObjectDeclarationHRESULT GetDataObject( [in] BSTR ServerClsIdString,[in] BSTR Name,[out] BSTR *pType,[out] SAFEARRAY(BSTR) *pProperties )GetHierarchyObjectDeclarationHRESULT GetHierarchyObject( [in] BSTR ServerClsIdString,[in] BSTR Name,[out]BSTR *pType,[out]BSTR *pDelimiter,[out]SAFFEARRAY(BSTR) *pProperties )Return ValueS_OK The operation succeeded.E_FAIL The operation failed.E_OUTOFMEMORY Not enough memoryE_INVALIDARGAn argument to the function was invalid.GetLeafObjectDeclarationHRESULT GetLeafObject( [in]BSTR ServerClsIdString,[in]BSTR Name,[in]BSTR Parent,[out] BSTR *pType,[out] BSTR *pDelimiter,[out]SAFEARRAY(BSTR) *pProperties )Return ValueS_OK The operation succeeded.E_FAIL The operation failed.E_OUTOFMEMORYNot enough memoryE_INVALIDARG An argument to the function was invalid.GetSystemObjectDeclarationHRESULT GetSystemObject( [in] BSTR ServerClsIdString,[out]SAFEARRAY(BSTR)* pProperties )GetTopicObjectDeclarationHRESULT GetTopicObject( [in]BSTR ServerClsIdString,[in]BSTR Name,[in]BSTR Parent,[out] BSTR *pType,[out] LONG *pUpdateInterval,[out]SAFEARRAY(BSTR) *pProperties )Return ValueS_OK The operation succeeded.E_FAIL The operation failed.E_OUTOFMEMORY Not enough memoryE_INVALIDARGAn argument to the function was invalid.RemoveDataObjectDeclarationHRESULT RemoveDataObject( [in] BSTR ServerClsIdString,[in] BSTR Name)Return ValueS_OKThe operation succeeded.E_FAIL The operation failed.E_OUTOFMEMORY Not enough memoryE_INVALIDARGAn argument to the function was invalid.RemoveHierarchyObjectDeclarationHRESULT RemoveHierarchyObject([in] BSTR ServerclsIdString, [in] BSTR Name )Return ValueS_OK The operation succeeded.E_FAIL The operation failed.E_OUTOFMEMORY Not enough memoryE_INVALIDARGAn argument to the function was invalid.RemoveLeafObjectDeclarationHRESULT RemoveLeafObject( [in]BSTR ServerClsIdString,[in]BSTR Name,[in]BSTR Parent)Return ValueS_OK The operation succeeded.E_FAIL The operation failed.E_OUTOFMEMORY Not enough memoryE_INVALIDARGAn argument to the function was invalid.RemoveSystemObjectDeclarationHRESULT RemoveSystemObject( [in]BSTRServerClsIdString)Return ValueS_OK The operation succeeded.E_FAIL The operation failed.E_OUTOFMEMORY Not enough memoryE_INVALIDARGAn argument to the function was invalid.RemoveTopicObjectDeclarationHRESULT RemoveTopicobject( [in] BSTR ServerClsIdString,[in] BSTR Name,[in] BSTR Parent)Return ValueS_OK The operation succeeded.E_FAIL The operation failed.E_OUTOFMEMORYNot enough memoryE_INVALIDARG An argument to the function was invalid.RenameDataObjectDeclarationHRESULT RenameDataObject( [in] BSTRServerClsIdString,[in] BSTROldName,[in] BSTRNewName)Return ValueS_OKThe operation succeeded.E_FAIL The operation failed.E_OUTOFMEMORY Not enough memoryE_INVALIDARGAn argument to tbe function was invalid.RenameHierarchyObjectDeclarationHRESULT RenameHierarchyObject( [in] BSTR ServerClsIdString,[in] BSTR OldName,[in] BSTR NewName)Return ValueS_OK The operation succeeded.E_FAIL The operation failed.E_OUTOFMEMORY Not enough memoryE_INVALIDARG An argument to the function was invalid.RenameLeafObjectDeclarationHRESULT RenameLeafObject( [in] BSTR ServerClsIdString,[in] BSTR OldName, [in] BSTR Parent,[in] BSTR NewName)Return ValueS_OK The operation succeeded.E_FAILThe operation failed.E_OUTOFMEMORY Not enough memoryE_INVALIDARGAn argument to the function was invalid.RenameTopicObjectDeclarationHRESULT RenameTopicObject( [in] BSTR ServerClsIdString,[in] BSTR OldName,[in] BSTR Parent,[in] BSTR NewName)Return ValueS_OK The operation succeeded.E_FAIL The operation failed.E_OUTOFMEMORY Not enough memoryE_INVALIDARGAn argument to the function was invalid.SaveCfgSetAsDeclarationHRESULT SaveCfgSetAs( [in] BSTR ServerClsIdString,[in] BSTR pConfigSet )SetCfgFileNameDeclarationHRESULT SetCfgFileName( [in] BSTR ServerClsIdString,[in] BSTR FileName )Return ValueS_OK The operation succeeded.E_FAIL The operation failed.E_OUTOFMEMORY Not enough memoryE_INVALIDARGAn argument to the function was invalid.SetDataObjectDeclarationHRESULT SetDataObject( [in] BSTRServerClsIdString,[in] BSTRName,[in] BSTRType,[in,unique] SAFEARRAY(BSTR) * pProperties )SetHierarchyObjectDeclarationHRESULT SetHierarchyObject( [in] BSTRServerClsIdString,[in] BSTRName,[in] BSTRType,[in] BSTRDelimiter,[in,unique] SAFEARRAY(BSTR) * pProperties )Return ValueS_OK The operation succeeded.E_FAIL The operation failed.E_OUTOFMEMORY Not enough memoryE_INVALIDARGAn argument to the function was invalid.SetleafobjectDeclarationHRESULT SetLeafObject([in] BSTRServerClsIdString,[in] BSTRName,[in] BSTRParent,[in] BSTRType,[in] BSTRDelimiter,[in,unique] SAFEARRAY(BSTR) * pProperties )Return ValueS_OK The operation succeeded.E_FAIL The operation failed.E_OUTOFMEMORY Not enough memoryE_INVALIDARGAn argument to the function was invalid.SetSystemObjectDeclarationHRESULT SetSystemObject( [in] BSTRServerClsIdString,[in,unique] SAFEARRAY(BSTR) * pProperties )SetTopicObjectDeclarationHRESULT SetTopicObject( [in] BSTRServerClsIdString,[in] BSTRName,[in] BSTRParent,[in] BSTRType,[in] LONGUpdateInterval,[in,unique] SAFEARRAY(BSTR) * pProperties )ParametersName name of the topicParentfully qualified nameReturn ValueS_OK The operation succeeded.E_FAIL The operation failed.E_OUTOFMEMORY Not enough memoryE_INVALIDARGAn argument to the function was invalid.SwitchToCfgSetDeclarationHRESULT SwitchToCfgSet( [in] BSTR ServerClsIdString,[in] BSTR pConfigSet )]]></pre>
IIOSrCfgrules接口520定义了一组方法,用于通过远程基础结构250从诸如规则270这样的存储区抽取配置规则。这一接口隔离了调用程序与在特定的物理装置上以特定的位置和形式抽取或存储数据的细节。
<pre listing-type="program-listing"><![CDATA[Declaration[ object,dual,uuid(52088D9A-DED4-11D3-83F2-00A024A866AD),helpstring(″IIOSrvCfgRules Interface″),pointer_default(unique)] /*This interface provides a way to extract the configuration rules from the rules storage area*/interface IIoSrvCfgRulesIDispatch{HRESULT GetCfgRuleFileName( [in] BSTR ServerClsIdString,[out]BSTR*pFileName );HRESULT SetCfgRuleFileName( [in] BSTR ServerClsIdString,[in] BSTR pFileName );HRESULT GetHostClsIds( [in] BSTR ServerClsIdString,[out]BSTR* pPackageClsIdString,[out]BSTR* ,pEditorHostClsIdString );HRESULT GetRulesForObjectType( [in] BSTR ServerClsIdString, [in] BSTR ObjectType,[out]BSTR* pEditorClsIdString,[out]BSTR* pPackageClsIdString,[out]BSTR* pDelimiter);HRESULT GetCfgChildRulesForObjectType( [in] BSTR ServerClsIdString,[in] BSTR Type,[out]SAFEARRAY(BSTR)* ChildTypes,[out] SAFEASY(LONG) *ChildTypesMaxOccurs,[out] LONG* pOptions );HRESULT GetCfgPropertyRulesForObjectType( [in] BSTR ServerClsIdString,[in] BSTR Type,[out]SAFEARRAY(BSTR) *PropertyName,[out]SAFEARRAY(LONG) *PropertyType,[out]SAFEARRAY(VARIANT) *DefaultValue,[out]SAFEARRAY(VARIANT) *PropertyMin,[out]SAFEARRAY(VARIANT) *PropertyMax,[out]SAFEARRAY(BSTR) *PropertyEditHeader,[out]SAFEARRAY(BSTR) *PropertyEditUni t,[out]SAFEARRAY(BSTR) *PropertyEditHelp,[out]SAFEARRAY(LONG) *PropertyAccessRights );}OperationsGetCfgChildRulesForObjectTypeDeclarationHRESULT GetCfgChildRulesForObjectType( [in] BSTR ServerClsIdString,[in] BSTR Type,[out]SAFEARRAY(BSTR) *ChildTypes,[out]SAFEARRAY(LONG) *ChildTypesMaxOccurs,[out]LONG* pOptions )Parameters ServerClsIdString server clsid. Type type name-if rules for the root are to beretrieved pass empty string ChildTypesGet the array of possible child types.Theconfiguration snap-in displays these types aschoices to the user to create child objects ChildTypesMaxOccurs Number of maximum occurences of the correspondingchild object type. pOptions List of bit-options in returned DWORD currently 3bits are defined]]></pre>
注释获得用于对象类型的子规则。规则是基于用户类型的。这意思是说,相同用户类型的对象具有相同的规则集。
<pre listing-type="program-listing"><![CDATA[GetCfgPropertyRulesForObjectTypeDeclarationHRESULT GetCfgPropertyRulesForObjectType( [in] BSTR ServerClsIdString,[in] BSTR Type,[out]SAFEARRAY(BSTR) * PropertyName,[out]SAFEARRAY(LONG) * PropertyType,[out]SAFEARRAY(VARIANT) * DefaultValue,[out]SAFEARRAY(VARIANT) * PropertyMin,[out]SAFEARRAY(VARIANT) * PropertyMax,[out]SAFEARRAY(BSTR) * PropertyEditHeader,[out]SAFEARRAY(BSTR) * PropertyEditUnit,[out]SAFEARRAY(BSTR) * PropertyEditHelp,[out]SAFEARRAY(LONG) * PropertyAccessRights)ParametersServerClsIdStringserver clsid.Type type name - if rules for the root are to be retrieved pass empty string PropertyName Array of unique property names.The configuration snap-in will display an edit field for each property.PropertyType Array of property types.The configuration snap- in uses this type to perform validation on user input.DefaultValue Array of property default values.The configuration snap-in uses this value to initialize user input values.Any configuration data client uses this as the default value if not present.Inthe case of VARIANT_EMPTY there is no default value.PropertyMin Array of minimum property values.The configuration snap-in uses this value to validate user input values.In case of type ′STRING′this represents the minimum number of (UNICODE)characters.PropertyMax Array of maximum property values.The configuration snap-inuses this value to validate user input values.In case of type ′STRING′this represents the maximum number of (UNICODE)characters.PropertyEditHeader Array of property edit headers.The configuration snap-in uses this value to precede the edit field for user input.PropertyEditUnit Array of property edit uni ts.The configuration snap-in uses this string to be diplayed after the edit field for user input.ProPertyEditHelp Array of property edit help strings.The configuration snap-in uses this string to display an online help string on user request for the corresponding edit field.PropertyAccessRights Array of property edit lock flags.The configuration snap-in uses this value to determine the accessrights on this property.]]></pre>
注释获得用于对象类型的性质规则。规则是基于用户类型的。这意思是说,相同用户类型的对象具有相同的规则集。
<pre listing-type="program-listing"><![CDATA[GetCfgRuleFileNameDeclarationHRESULT GetCfgRuleFilaName ([in] BSTR ServerClsIdString[out] BSTR* pFileName)ParametersServerClsIdString DAS server class IDpFileName pointer tofile name]]></pre>注释检索服务器的现用配置文件的cfg规则文件名。配置咬接通常不需要知道这一文件名。这只是用于通知的目的。
<pre listing-type="program-listing"><![CDATA[GetHostClsIdsDeclarationHRESULT GetHostClsIds( [in] BSTR ServerClsIdString,[out]BSTR*pPackageClsIdString,[out]BSTR*pEditorHostClsIdString )ParametersServerClsIdString DAS server class IDPPackageClsIdString Clsid of the packagePEditorHostClsIdStringClsid of the editor host]]></pre>注释检索用于给定对象类型的编辑器DisId<pre listing-type="program-listing"><![CDATA[GetRulesForObjectTypeDeclarationHRESULT GetRulesForObjectType([in] BSTR ServerClsIdString,[in] BSTR ObjectType,[out]BSTR* pEditorClsIdString,[out]BSTR* pPackageClsTdString,[out]BSTR* pDelimiter)ParametersServerClsIdStringDAS server class IDObjectType objecttype(value of the type attribute of the corresponding object in the configuration file)pEditorClsIdString Clsid of the editor Activex responsible for editing all object propertiespPackageClsIdString Clsid of the packagepDelimiter Delimiter of the type(post delimiter)]]></pre>注释检索用于给定对象类型的编辑器DisId<pre listing-type="program-listing"><![CDATA[SetCfgRuleFileNameDeclarationHRESULT SetCfgRuleFileName( [in]BSTRServerClsIdString, [in]BSTRpFileName )Parameters ServerClsIdStringDAS server class ID pFileNamefile name]]></pre>注释设置规则文件名现转向图7,其中一顺序图描绘了当结点编辑器打开并由用户选择了一特定的数据访问服务器时所执行的一组步骤。在步骤600期间,用户通过MMC启动DAS控制台客户。对此的响应是DASCC在步骤602与位于支持DAS的每一结点上的DAS代理通信,以便列举网络上所有DAS。然后,在步骤604用户选择用于配置的被列举DAS之一,并在步骤606和608,DASCC发出请求以便生成程序包主机210对象的实例及编辑器主机230的实例。如果规定了结点程序包或结点编辑器,则这些对象也被例示。
在生成以上配置组件之后,在步骤610DASCC向程序包主机210发出请求,对于包含由用户在步骤604期间所选的数据访问服务器请求一组结点配置参数。在步骤612程序包主机210通过CIOSrvCfgPersist接口510把阅读请求传送给远程基础结构。远程基础结构调用配置存储器280以便在步骤614期间阅读与所选DAS相关的现有的参数,并在步骤616期间调用规则存储器2270以便阅读任何与所选DAS相关的适用的规则。然后所检索的配置参数和规则被返回调用程序包主机210。
在步骤618期间,DAS控制台在寻求生成的编辑器主机230上发出“init”调用。在步骤620与622期间,编辑器主机230对此响应而生成由的访问的结点规定的结点编辑器240定制面板的实例,并然后把“init”调用转发给结点编辑器240。在步骤624,结点编辑器240调用程序包主机210,以便获得对每一由结点(及任何相关规则)规定的参数值,并然后在步骤626期间根据相关规则通过定制面板显示配置参数。然后,用户请求结点编辑器240与对所选DAS配置会话相关改变结点参数。
现转向图8,其中一顺序图描绘了一系列为编辑现有配置所执行的示例性步骤,并具体在对所选的数据访问服务器规定的配置分层结构中添加了一新的结点。在步骤700期间,用户选择父结点(类型),以便通过向DASCC 200传送一适当的用户接口请求添加到一配置。在步骤702期间DASCC 200对此的响应而向程序包主机210发出一请求,以便获得与所选结点(包含任何子结点)类型相关的配置参数和规则的一列表。在步骤704,程序包主机210从CIOSrvCfgPersist对象500请求对于所选结点的所有规则。然后,CIOSrvCfgPersist对象500把配置规则请求传送给规则存储器270。然后,在步骤708程序包主机210向CIOSrvCfgPersist对象500发出请求以便对于所选结点阅读子结点参数。在步骤710对此响应请求被传送给配置存储器280。在接收适当的规则和参数时,程序包主机向接收的参数施加配置规则以生成适当的父结点结构。
然后在步骤714,用户向DASCC 200发出接口命令以便添加寻求所选类型的新的结点。然后在步骤716,DASCC 200向程序包主机210发出请求,以便向配置分层结构内的所选/标识的子结点添加一新的结点。在步骤718,程序包主机210调用CIOSrvCfgPersist对象500,以便对当前所选配置向存储区添加一新的结点。然后在步骤720,CIOSrvCfgPersist对象500向配置存储器280发出存储生成的新结点的请求。
现在转向图9,其中一顺序图描绘了使用先前描绘的分布式配置组件向一配置保存变化的步骤。在步骤800期间响应用户通过在编辑器主机230的用户界面上选择“施加”按钮发出保存请求。在步骤802期间编辑器主机230对此响应传送一调用(结点类型专用面板)以便向结点编辑器240保存配置的变化。在步骤804期间,结点编辑器240对此响应使用一请求调用程序包主机210保存结点参数新的值。程序包主机210在步骤806期间,可能参照定制结点程序包220,核实所请求的结点变化信息。在步骤808期间程序包主机210调用CIOSrvCfgPersist对象500请求保存对一组规定的结点参数操作。CIOSrvCfgPersist对象500在步骤810通过在配置存储器280中存储改变的参数值执行保存请求。在新的配置信息存放在配置存储器280之后,CIOSrvCfgPersist对象500确定受到影响的DAS当前是否在运行。在DAS运行的情形下,在步骤812 CIOSrvCfgPersist对象500把该变化(包括规定被改变的结点)通知给对应的DAS。在步骤812实施的该通知机制便于运行数据访问服务器的热配置。对此响应,服务器从配置存储器280阅读新的值,并在这种改变不破坏正在进行的DAS的操作的一时间点更新其配置。
以下是在程序包主机210和结点编辑器240的一示例性实现中使用的一组类型定义。
<pre listing-type="program-listing"><![CDATA[Type DefinitionsATTR_PROPERTYIDSDeclaration{_PROPERTY_INVALID_PROPID_=0,_PRoPERTY_NAME_,_PROPERTY_TYPE_,_PROPERTY_VALUE_,_PROPERTY_MIN_,_PROPERTY_MAX_,_PROPERTY_HEADER_,_PROPERTY_EUNITS_,_PROPERTY_HELP_,_PROPERTY_ACCESSRIGHTS_}DescriptionSpecifies the Attribute propertiesElements_PROPERTY_VALUE__PROPERTY_HEADER__PROPERTY_MAX__PROPERTY_MIN__PROPERTY_INVALID_ROPID_ Zero is reserved for invalid PropID_PROPERTY_TYPE__PROPERTY_HELP__PROPERTY_ACCESSRIGHTS__PROPERTY_EUNITS__PROPERTY_NAME_COMMIT_ENUMDeclarationenum {COMMIT_OK=1,COMMIT_INVALID_HANDLE,COMMIT_FAIL,COMMIT_REMOTE_FAIL}DescriptionSpecifies the options for status of Commit operationElementsCOMMIT_INVALID_HANDLECOMMIT_REMOTE_FAILCOMMIT_OKCOMMIT_FAILIOSRVPROPERTYDeclarationtypedef struct tagIOSRVPROPERTY{ [string] BSTR szKey;[string] BSTR szProperty;} IOSRVPROPERTYDescriptionDescribes a parameter′s name and value.PROPERTYACCESSRIGHTDeclarationtypedef enum tagPROPERTYACCESSRIGHTS{ PROPERTYACCESSRIGHT_ALL=0, PROPERTYACCESSRIGHT_LOCKED=1}PROPERTYACCESSRIGHTDescriptionDescribes user access rights for a propertySHAPE_INFO_ENUMDeclarationenum { SHAPE_INFO_ATTRIBUTES=1,SHAPE_INFO_NODES,SHAPE_INFO_TOPICS,SHAPE_INFO_LEAVES}DescriptionSpecifies the Shape information optionsElementsSHAPE_INFO_ATTRIBUTESSHAPE_INFO_TOPICSSHAPE_INFO_LEAVESSHAPE_INFO_NODES]]></pre>
以下是构成远程配置规范的暂留区第一部分的规则文件270的一例。一组标签说明先于实际的例子。
<pre listing-type="program-listing"><![CDATA[?xml version=″1.0″encoding=″UTF-8″?><CONFIGURATIONRULES NAME=″DAS ABTCP″PACKAGEHOSTID=″{7F5B8DEE-AB78-11D4-93E4-00B0D0201D61}″EDITORHOSTID=″{5C9AF1AA-AEC8-11D4-93E6-00B0D0201D61}″> <HIERARCHYNODE TYPE=″$ROOT$″><CHILDRULES ENABLEDEVICEGROUPS=″1″ENABLEDEVICEITEMS=″0″ENABLESYSTEMITEMS=″1″> <PORT_TCPIPMAXOCCURRENCES=″1″/> </CHILDRULES> <PROPERTYRULES> <UpdateInterval><PROPERTYTYPE>VT_I4</PROPERTYTYPE><DEFAULTVALUE>1000</DEFAULTVALUE><PROPERTYMIN>0</PROPERTYMIN><PROPERTYMAX>100000</PROPERTYMAX><PROPERTYEDITUNIT>ms</PROPERTYEDITUNIT><PROPERTYEDITHELP>Update interval of default topics for hierarchies without overridingconfiguration</PROPERTYEDITHELP> </UpdateInterval> <SlowP,Interval><PROPERTYTYPE>VT_I4</PROPERTYTYPE><DEFAULTVALUE>10000</DEFAULTVALUE><PROPERTYMIN>0</PROPERTYMIN><PROPERTYMAX>100000</PROPERTYMAX><PROPERTYEDITUNIT>ms</PROPERTYEDITUNIT><PROPERTYEDITHELP>Update interval of topics for hierarchies in slow pollmode</PROPERTYEDITHELP> </SlowPollInterval> <CaseSensitive><PROPERTYTYPE>VT_I4</PROPERTYTYPE><DEFAULTVALUE>0</DEFAULTVALUE><PROPERTYMIN>0</PROPERTYMIN><PROPERTYMAX>1</PROPERTYMAX><PROPERTYEDITUNIT>T/F</PROPERTYEDITUNIT><PROPERTYEDITHELP>TRUE means case-sensitive Device Group and Item IDnames</PROPERTYEDITHELP> </CaseSensitive> <DefaultPokeMode><PROPERTYTYPE>VT_I4</PROPERTYTYPE><DEFAULTVALUE>1</DEFAULTVALUE><PROPERTYMIN>0</PROPERTYMIN><PROPERTYMAX>2</PROPERTYMAX><PROPERTYEDITUNIT/><PROPERTYEDITHELP>0=Control,1=Transition,2=Optimized,</PROPERTYEDITHELP> </DegsultPokeMode> <DegsfaultDelimiter><PROPERTYTYPE>VT_BSTR</PROPERTYTYPE><DEFAULTVALUE>.</DEFAULTVALUE><PROPERTYMIN>1</PROPERTYMIN><PROPERTYMAX>3</PROPERTYMAX><PROPERTYEDITUNIT/><PROPERTYEDITHELP>Delimiter for hierarchies not configured</PROPERTYEDITHELP></DefaultDelimiter><SimulationMode><PROPERTYTYPE>VT_I4</PROPERTYTYPE> <DEFAULTVALUE>0</DEFAULTVALUE> <PROPERTYMIN>0</PROPERTYMIN> <PROPERTYMAX>1</PROPERTYMAX> <PROPERTYEDITUNIT>T/F</PROPERTYEDITUNIT> <PROPERTYEDITHELP>TRUE means simulate for DAServers that supportsimulation</PROPERTYEDITHELP></SimulationMode><EnableSystemItems> <PROPERTYTYPE>VT_I4</PROPERTYTYPE> <DEFAULTVALUE>1</DEFAULTVALUE> <PROPERTYMIN>0</PROPERTYMIN> <PROPERTYMAX>1</PROPERTYMAX> <PROPERTYEDITUNIT>T/F</PROPERTYEDITUNIT> <PROPERTYEDITHELP>TRUE to allow system items</PROPERTYEDITHELP></EnableSystemItems><LinkTopicCache> <PROPERTYTYPE>VT_UI4</PROPERTYTYPE> <DEFAULTVALUE>0</DEFAULTVALUE> <PROPERTYMIN>0</PROPERTYMIN> <PROPERTYMAX>1</PROPERTYMAX> <PROPERTYEDITUNIT>T/F</PROPERTYEDITUNIT> <PROPERTYEDITHELP>TRUE merges all subscription items in a single cache</PROPERTYEDITHELP></LinkTopicCache><UniqueDeviceGroup> <PROPERTYTYPE>VT_UI4</PROPERTYTYPE> <DEFAULTVALUE>1</DEFAULTVALUE> <PROPERTYMIN>0</PROPERTYMIN> <PROPERTYMAX>1</PROPERTYMAX> <PROPERTYEDITUNIT>T/F</PROPERTYEDITUNIT> <PROPERTYEDITHELP>TRUE requires all device group names be unique</PROPERTYEDITHELP></UniqueDeviceGroup><ProtocolTimerTick> <PROPERTYTYPE>VT_UI4</PROPERTYTYPE> <DEFAULTVALUE>50</DEFAULTVALUE> <PROPERTYMIN>10</PROPERTYMIN> <PROPERTYMAX>100000</PROPERTYMAX> <PROPERTYEDITUNIT>ms</PROPERTYEDITUNIT> <PROPERTYEDITHELP>Protocol timer tick interval in milliseconds</PROPERTYEDITHELP></ProtocolTimerTick><TransactionTimeout> <PROPERTYTYPE>VT_UI4</PROPERTYTYPE> <DEFAULTVALUE>60000</DEFAULTVALUE> <PROPERTYMIN>10</PROPERTYMIN> <PROPERTYMAX>60000</PROPERTYMAX> <PROPERTYEDITUNIT>ms</PROPERTYEDITUNIT> <PROPERTYEDITHELP>Default transaction timeout for hierarchies with noconfiguration</PROPERTYEDITHELP> </Transaction Timeout> <LockConfigurationFile> <PROPERTYTYPE>VT_BOOL</PROPERTYTYPE> <DEFAULTVALUE>0</DEFAULTVALUE><PROPERTYMIN>0</PROPERTYMIN> <PROPERTYMAX>1</PROPERTYMAX> <PROPERTYEDITUNIT>T/F</PROPERTYEDITUNIT> <PROPERTYEDITHELP>TRUE for non-Magellan configurers locked out</PROPERTYEDITHELP></LockConfigurationFile><SubscriptionTransactionRatio> <PROPERTYTYPE>VT_UI4</PROPERTYTYPE> <DEFAULTVALUE>2</DEFAULTVALUE> <PROPERTYMIN>1</PROPERTYMIN> <PROPERTYMAX>1000</PROPERTYMAX> <PROPERTYEDITUNIT/> <PROPERTYEDITHELP>Subscription/Transaction ratio</PROPERTYEDITHELP></SubscriptionTransactionRatio> </PROPERTYRULES> </HIERARCHYNODE> <HIERARCHYNODE TYPE="PORT_TCPIP″EDITORID=″{1B48839F-B68E-4CDA-A090-C8BD87932126}″ PACKAGEID=″{7F5B8DEE-AB78-11D4-93E4-00B0D0201D61}″DELIMITER=″.″><CHILDRULES> <PLC5_TCPIPMAXOCCURRENCES=″100″/> <SLC500_TCPIP MAXOCCURRENCES=″100″/> <PYRAMID_EI MAXOCCURRENCES=″100″/> </CHILDRULES> <PROPERTYRULES><MaxQueuedMsgs> <!--Maximum number ofqueued messages for a topic--> <PROPERTYTYPE>VT_UI4</PROPERTYTYPE> <DEFAULTVALUE>4</DEFAULTVALUE> <PROPERTYMIN>1</PROPERTYMIN> <PROPERTYMAX>20</PROPERTYMAX> <PROPERTYEDITHEADER>Max QueuedMsgs</PROPERTYEDITHEADER> <PROPERTYEDITUNIT/> <PROPERTYEDITHELP>Number of Messages</PROPERTYEDITHELP></MaxQueuedMsgs><MaxSockets> <PROPERTYTYPE>VT_UI4</PROPERTYTYPE> <DEFAULTVALUE>200</DEFAULTVALUE> <PROPERTYMIN>1</PROPERTYMIN> <PROPERTYMAX>200</PROPERTYMAX> <PROPERTYEDITHEADER>Maximum number of sockets</PROPERTYEDITHEADER> <PROPERTYEDITUNIT/> <PROPERTYEDITHELP>Maximum number of sockets</PROPERTYEDITHELP></MaxSockets><MaxUnsolConn> <PROPERTYTYPE>VT_UI4</PROPERTYTYPE><DEFAULTVALUE>20</DEFAULTVALUE><PROPERTYMIN>1</PROPERTYMIN> <PROPERTYMAX>30</PROPERTYMAX> <PROPERTYEDITHEADER>Maximum number of peer-to-peerconnections</PROPERTYEDITHEADER> <PROPERTYEDITUNIT/> <PROPERTYEDITHELP>Maximum number of peer-to-peer connections</PROPERTYEDITHELP></MaxUnsolConn><UnsolicitedMsgTimeout> <PROPERTYTYPE>VT_UI4</PROPERTYTYPE><DEFAULTVALUE>5000</DEFAULTVALUE><PROPERTYMIN>1000</PROPERTYMIN><PROPERTYMAX>10000</PROPERTYMAX><PROPERTYEDITHEADER>Timeout for peer-to-peer unsolicitedcommunication</PROPERTYEDITHEADER><PROPERTYEDITUNIT>MSec</PROPERTYEDITUNIT><PROPERTYEDITHELP>Timeout for peer-to-peer unsolicited communication</PROPERTYEDITHELP> </UnsolicitedMsg Timeout> <FlipStringBytes><!--Flip String Bytes--><PROPERTYTYPE>VT_BOOL</PROPERTYTYPE><DEFAULTVALUE>0</DEFAULTVALUE><PROPERTYMIN>0</PROPERTYMIN><PROPERTYMAX>1</PROPERTYMAX><PROPERTYEDITHEADER>Flip String Bytes</PROPERTYEDITHEADER><PROPERTYEDITUNIT/><PROPERTYEDITHELP>Flip String Bytes</PROPERTYEDITHELP> </FlipStringBytes> </PROPERTYRULES> </HIERARCHYNODE> <HIERARCHYNODE TYPE=″PLC5_TCPIP″PACKAGEID=″″EDITORID=″{85B57144-49F8-47D2-B5B7-E55CD82CFBC2}″DELIMITER=″.″> <CHILDRULES ENABLEDEVICEGROUPS=″1″/> <PROPERTYRULES> <HostName> <PROPERTYTYPE>VT_BSTR</PROPERTYTYPE> <DEFAULTVALUE/> <PROPERTYMIN>0</PROPERTYMIN> <PROPERTYMAX>255</PROPERTYMAX> <PROPERTYEDITHEADER>device IP address</PROPERTYEDITHEADER> <PROPERTYEDITUNIT/> <PROPERTYEDITHELP>Device IP Host Name/Address</PROPERTYEDITHELP> </HostName> <DataBlockSize> <PROPERTYTYPE>VT_UI4</PROPERTYTYPE> <DEFAULTVALUE>2000</DEFAULTVALUE> <PROPERTYMIN>2</PROPERTYMIN> <PROPERTYMAX>2000</PROPERTYMAX> <PROPERTYEDITHEADER>Message data block size(bytes)for PLC5 onEthemet</PROPERTYEDITHEADER> <PROPERTYEDITUNIT/> <PROPERTYEDITHELP>Message data block size(bytes)for PLC5 onEthemet</PROPERTYEDITHELP></DataBlockSize><ReplyTimeout> <PROPERTYTYPE>VT_UI4</PROPERTYTYPE> <DEFAULTVALUE>15</DEFAULTVALUE> <PROPERTYMIN>1</PROPERTYMIN> <PROPERTYMAX>300</PROPERTYMAX> <PROPERTYEDITHEADER>ReplyTimeout</PROPERTYEDITHEADER> <PROPERTYEDITUNIT>Sec</PROPERTYEDITUNIT> <PROPERTYEDITHELP>Reply Timeout</PROPERTYEDITHELP></ReplyTimeout><SupportsPID><PROPERTYTYPE>VT_BOOL</PROPERTYTYPE><DEFAULTVALUE>1</DEFAULTVALUE><PROPERTYMIN>0</PROPERTYMIN><PROPERTYMAX>1</PROPERTYMAX><PROPERTYEDITHEADER>Support PID and String Files</PROPERTYEDITHEADER><PROPERTYEDITUNIT/><PROPERTYEDITHELP>Support PID and String Files</PROPERTYEDITHELP> </SupportsPID> <UnsolClientMsg><PROPERTYTYPE>VT_BOOL</PROPERTYTYPE><DEFAULTVALUE>1</DEFAULTVALUE><PROPERTYMIN>0</PROPERTYMIN><PROPERTYMAX>1</PROPERTYMAX><PROPERTYEDITHEADER>Support Unsolicited ′CLIENT Messaging</PROPERTYEDITHEADER><PROPERTYEDITUNIT/><PROPERTYEDITHELP>Support Unsolicited′CLIENT Messaging</PROPERTYEDITHELP> </UnsolClientMsg> <ConnectionTimeout><!--Connection Timeout-><PROPERTYTYPE>VT_U4</PROPERTYTYPE><DEFAULTVALUE>2000</DEFAULTVALUE><PROPERTYMIN>1000</PROPERTYMIN><PROPERTYMAX>20000</PROPERTYMAX><PROPERTYEDITHEADER>Connection AttemptTimeout</PROPERTYEDITHEADER><PROPERTYEDITUNIT>MSec</PROPERTYEDITUNIT><PROPERTYEDITHELP>Connection Attempt Timeout</PROPERTYEDITHELP> </ConnectionTimeout> </PROPERTYRULES> </HIERARCHYNODE> <HIERARCHYNODE TYPE=″SLC500_TCPIP″PACKAGEID=″″EDITORID=″{63B40882-4981-41F0-868B-CBCD508C0733}″DELIMITER=″.″> <CHILDRULES ENABLEDEVICEGROUPS=″1″/> <PROPERTYRULES><HostName> <PROPERTYTYPE>VT_BSTR</PROPERTYTYPE> <DEFAULTVALUE>10.32.12.36</DEFAULTVALUE> <PROPERTYMIN>0</PROPERTYMIN> <PROPERTYMAX>255</PROPERTYMAX> <PROPERTYEDITHEADER>device IP address</PROPERTYEDITHEADER> <PROPERTYEDITUNIT/> <PROPERTYEDITHELP>Device IP Host Name/Address</PROPERTYEDITHELP></HostName><DataBlockSize> <PROPERTYTYPE>VT_UI4</PROPERTYTYPE> <DEFAULTVALUE>510</DEFAULTVALUE> <PROPERTYMIN>2</PROPERTYMIN> <PROPERTYMAX>510</PROPERTYMAX> <PROPERTYEDITHEADER>Data packet size for PLC5 on Ethernet</PROPERTYEDITHEADER> <PROPERTYEDITUNIT/> <PROPERTYEDITHELP>Data packet size for PLC5 on Ethemet</PROPERTYEDITHELP></DataBlockSize><ReplyTimeout> <PROPERTYTYPE>VT_UI4</PROPERTYTYPE> <DEFAULTVALUE>15</DEFAULTVALUE><PROPERTYMIN>1</PROPERTYMIN><PROPERTYMAX>300</PROPERTYMAX><PROPERTYEDITHEADER>ReplyTimeout</PROPERTYEDITHEADER><PROPERTYEDITUNIT>Sec</PROPERTYEDITUNIT> <PROPERTYEDITHELP>Reply Timeout</PROPERTYEDITHELP> </Reply Timeout> <ConnectionTimeout><!--Connection Timout--><PROPERTYTYPE>VT_U4</PROPERTYTYPE><DEFAULTVALUE>2000</DEFAULTVALUE><PROPERTYMIN>1000</PROPERTYMIN><PROPERTYMAX>20000</PROPERTYMAX><PROPERTYEDITHEADER>Connection Attempt Timeout</PROPERTYEDITHEADER><PROPERTYEDITUNIT>MSec</PROPERTYEDITUNIT><PROPERTYEDITHELP>Connection Attempt Timeout</PROPERTYEDITHELP> </ConnectionTimeout> </PROPERTYRULES> </HIERARCHYNODE> <HIERARCHYNODE TYPE=″PYRAMID_EI″EDITORID=″{4D9DE9D0-48BB-489E-9CED-5284FFA3EFED}″DELIMITER=″.″><CHILDRULES> <PYRAMID_KA MAXOCCURRENCES=″4″/> <PYRAMID_RM MAXOCCURRENCES=″1″/> <PYRAMID_PLC5250 MAXOCCURRENCES=″4″/></CHILDRULES><PROPERTYRULES> <HostNamc> <PROPERTYTYPE>VT_BSTR</PROPERTYTYPE> <DEFAULTVALUE>10.32.12.36</DEFAULTVALUE> <PROPERTYMIN>0</PROPERTYMIN> <PROPERTYMAX>255</PROPERTYMAX> <PROPERTYEDITHEADER>device IP address</PROPERTYEDITHEADER> <PROPERTYEDITUNIT/> <PROPERTYEDITHELP>Device IP Host Name/Address</PROPERTYEDITHELP></HostName><ConnectionTimeout> <!--Connection Timout--> <PROPERTYTYPE>VT_U4</PROPERTYTYPE> <DEFAULTVALUE>2000</DEFAULTVALUE> <PROPERTYMIN>1000</PROPERTYMIN> <PROPERTYMAX>20000</PROPERTYMAX> <PROPERTYEDITHEADER>Connection Attempt Timeout</PROPERTYEDITHEADER> <PROPERTYEDITUNIT>MSec</PROPERTYEDITUNIT> <PROPERTYEDITHELP>Connection Attempt Timeout</PROPERTYEDITHELP> </ConnectionTimeout></PROPERTYRULES> </HIERARCHYNODE> <HIERARCHYNODE TYPE=″PYRAMID_PLC5250″PACKAGEID=″″EDITORID=″{A7EBCF9D-9ECE-4DD5-B417-506ABA20855F}″DELIMITER=″.″><CHILDRULES ENABLEDEVICEGROUPS=″1″/><PROPERTYRULES> <ReplyTimeout> <PROPERTYTYPE>VT_UI4</PROPERTYTYPE> <DEFAULTVALUE>15</DEFAULTVALUE><PROPERTYMIN>1</PROPERTYMIN> <PROPERTYMAX>300</PROPERTYMAX> <PROPERTYEDITHEADER>ReplyTimeout</PROPERTYEDITHEADER> <PROPERTYEDITUNIT>Sec</PROPERTYEDITUNIT> <PROPERTYEDITHELP>Reply Timeout</PROPERTYEDITHELP> </Reply Timeout> <DataBlockSize> <PROPERTYTYPE>VT_UI4</PROPERTYTYPE> <DEFAULTVALUE>2000</DEFAULTVALUE> <PROPERTYMIN>2</PROPERTYMIN> <PROPERTYMAX>2000</PROPERTYMAX> <PROPERTYEDITHEADER>Message packet size for PLC5 on Ethernet</PROPERTYEDITHEADER> <PROPERTYEDITUNIT/> <PROPERTYEDITHELP>Message packet size for PLC5 on Ethernet</PROPERTYEDITHELP></DataBlockSize> </PROPERTYRULES> </HIERARCHYNODE> <HIERARCHYNODE TYPE=″PYRAMID_RM″EDITORID=”DELIMITER=″.″> <CHILDRULES><PORT_DHP MAXOCCURRENCES=″2″/><PORT_DH MAXOCCURRENCES=″2″/> </CHILDRULES> </HIERARCHYNODE> <HIERARCHYNODE TYPE=″PYRAMID_KA″EDITORID=″{8A04DA4D-F6C0-4C1F-A771-806CDA40029F}″DELIMITER=″.″> <CHILDRULES><PORT_DHP MAXOCCURRENCES=″2″/><PORT_DH MAXOCCURRENCES=″2″/> </CHILDRULES> <PROPERTYRULES><Pushwheel> <PROPERTYTYPE>VT_UI4</PROPERTYTYPE> <DEFAULTVALUE>1</DEFAULTVALUE> <PROPERTYMIN>1</PROPERTYMIN> <PROPERTYMAX>4</PROPERTYMAX> <PROPERTYEDITHEADER>Push Wheel</PROPERTYEDITHEADER> <PROPERTYEDITUNIT/> <PROPERTYEDITHELP>Push Wheel</PROPERTYEDITHELP></Pushwheel> </PROPERTYRULES> </HIERARCHYNODE> <HIERARCHYNODE TYPE=″PORT_DHP″EDITORID=″{2B22472C-2F98-4D1B-A211-7036FCBF9AA2}″PACKAGEID=″″DELIMITER=″.″> <CHILDRULES><PLC5_DHP MAXOCCURRENCES=″100″/><SLC500_DHP MAXOCCURRENCES=″100″/><PLC3_DHP MAXOCCURRENCES=″100″/> </CHILDRULES> <PROPERTYRULES><PortNumber> <!--Port Number--> <PROPERTYTYPE>VT_UI4</PROPERTYTYPE> <DEFAULTVALUE>2</DEFAULTVALUE> <PROPERTYMIN>2</PROPERTYMIN><PROPERTYMAX>3</PROPERTYMAX><PROPERTYEDITHEADER>Channel Number</PROPERTYEDITHEADER><PROPERTYEDITUNIT/><PROPERTYEDITHELP>Channel Number</PROPERTYEDITHELP> </PortNumber> </PROPERTYRULES> </HIERARCHYNODE> <HIERARCHYNODE TYPE=″PORT_DH″PACKAGEID=″″EDITORID=″{67D79FDA-4DC4-43A2-9B24-5735C3E3B428}″DELIMITER=″.″> <CHILDRULES><PLC2_DH MAXOCCURRENCES=″100″/> </CHILDRULES> <PROPERTYRULES> <PortNumber><!--Port Number--> <PROPERTYTYPE>VT_UI4</PROPERTYTYPE> <DEFAULTVALUE>2</DEFAULTVALUE> <PROPERTYMIN>2</PROPERTYMIN> <PROPERTYMAX>3</PROPERTYMAX> <PROPERTYEDITHEADER>Channel Number</PROPERTYEDITHEADER> <PROPERTYEDITUNIT/> <PROPERTYEDITHELP>Channel Number</PROPERTYEDITHELP></PortNumber> </PROPERTYRULES> </HIERARCHYNODE> <HIERARCHYNODE TYPE=″PLC5_DHP″EDITORID=″{BF71A6EF-818F-4406-9038-60745B9A1538}″DELIMITER=″.″> <CHILDRULES ENABLEDEVICEGROUPS=″1″/> <PROPERTYRULES><NodeAddress><PROPERTYTYPE>VT_UI4</PROPERTYTYPE> <DEFAULTVALUE>1</DEFAULTVALUE> <PROPERTYMIN>0</PROPERTYMIN> <PROPERTYMAX>63</PROPERTYMAX> <PROPERTYEDITHEADER>DH+Node Nukmber</PROPERTYEDITHEADER> <PROPERTYEDITUNIT>Octal</PROPERTYEDITUNIT> <PROPERTYEDITHELP>Datahighway Plus Node Number</PROPERTYEDITHELP></NodeAddress><ReplyTimeout> <PROPERTYTYPE>VT_UI4</PROPERTYTYPE> <DEFAULTVALUE>15</DEFAULTVALUE> <PROPERTYMIN>1</PROPERTYMIN> <PROPERTYMAX>300</PROPERTYMAX> <PROPERTYEDITHEADER>ReplyTimeout</PROPERTYEDITHEADER> <PROPERTYEDITUNTT>Sec</PROPERTYEDITUNIT> <PROPERTYEDITHELP>Reply Timeout</PROPERTYEDITHELP></ReplyTimeout><DataBlockSize> <PROPERTYTYPE>VT_UI4</PROPERTYTYPE> <DEFAULTVALUE>240</DEFAULTVALUE> <PROPERTYMIN>2</PROPERTYMIN> <PROPERTYMAX>240</PROPERTYMAX> <PROPERTYEDITHEADER>Message packet size for PLC5 on DatahiwayPlus</PROPERTYEDITHEADER><PROPERTYEDITUNIT/><PROPERTYEDITHELP>Message packet size for PLC5 on Datahiway Plus</ROPERTYEDITHELP> </DataBlockSize> </PROPERTYRULES> </HIERARCHYNODE> <HIERARCHYNODE TYPE=″SLC500_DHP″EDITORID=″{78FF43FC-EA3B-4B37-AFA9-D8D95CFB69A5}″DELIMITER=″.″> <CHILDRULES ENABLEDEVICEGROUPS=″1″/> <PROPERTYRULES> <NodeAddress> <PROPERTYTYPE>VT_UI4</PROPERTYTYPE> <DEFAULTVALUE>1</DEFAULTVALUE> <PROPERTYMIN>0</PROPERTYMIN> <PROPERTYMAX>63</PROPERTYMAX> <PROPERTYEDITHEADER>DH+Node Nukmber</PROPERTYEDITHEADER> <PROPERTYEDITUNIT>Octal</PROPERTYEDITUNIT> <PROPERTYEDITHELP>Datahighway Plus Node Number</PROPERTYEDITHELP> </NodeAddress><ReplyTimeout> <PROPERTYTYPE>VT_UI4</PROPERTYTYPE> <DEFAULTVALUE>15</DEFAULTVALUE> <PROPERTYMIN>1</PROPERTYMIN> <PROPERTYMAX>300</PROPERTYMAX> <PROPERTYEDITHEADER>ReplyTimeout</PROPERTYEDITHEADER> <PROPERTYEDITUNIT>MSec</PROPERTYEDITUNIT> <PROPERTYEDITHELP>Reply Timeout</PROPERTYEDITHELP></ReplyTimeout><DataBlockSize> <PROPERTYTYPE>VT_UI4</PROPERTYTYPE> <DEFAULTVALUE>204</DEFAULTVALUE> <PROPERTYMIN>2</PROPERTYMIN> <PROPERTYMAX>204</PROPERTYMAX> <PROPERTYEDITHEADER>Message packet size for PLC5 on DatahiwayPlus</PROPERTYEDITHEADER> <PROPERTYEDITUNIT/> <PROPERTYEDITHELP>Message packet size for PLC5 on Datahiway Plus</PROPERTYEDITHELP></DataBlockSize> </PROPERTYRULES> </HIERARCHYNODE> <HIERARCHYNODE TYPE=″PLC3_DHP″EDITORID=″{F59F96D7-FAID-4C9F-91F3-FABC09E00683}″DELIMITER=″.″> <CHILDRULES ENABLEDEVICEGROUPS=″1″/> <PROPERTYRULES><NodeAddress> <PROPERTYTYPE>VT_UI4</PROPERTYTYPE> <DEFAULTVALUE>1</DEFAULTVALUE> <PROPERTYMIN>0</PROPERTYMIN> <PROPERTYMAX>63</PROPERTYMAX> <PROPERTYEDITHEADER>DH+Node Nukmber</PROPERTYEDITHEADER> <PROPERTYEDITUNIT>Octal</PROPERTYEDITUNIT> <PROPERTYEDITHELP>Datahighway Plus Node Number</PROPERTYEDITHELP> </NodeAddress> <ReplyTimeout> <PROPERTYTYPE>VT_UI4</PROPERTYTYPE><DEFAULTVALUE>15</DEFAULTVALUE><PROPERTYMIN>1</PROPERTYMIN><PROPERTYMAX>300</PROPERTYMAX><PROPERTYEDITHEADER>ReplyTimeout</PROPERTYEDITHEADER><PROPERTYEDITUNIT>MSec</PROPERTYEDITUNIT><PROPERTYEDITHELP>Reply Timeout</PROPERTYEDITHELP> </ReplyTimeout> <DataBlockSize><PROPERTYTYPE>VT_UI4</PROPERTYTYPE><DEFAULTVALUE>240</DEFAULTVALUE><PROPERTYMIN>2</PROPERTYMIN><PROPERTYMAX>240</PROPERTYMAX><PROPERTYEDITHEADER>Message packet size for PLC5 on DatahiwayPlus</PROPERTYEDITHEADER><PROPERTYEDITUNIT/><PROPERTYEDITHELP>Message packet size for PLC5 on Datahiway Plus</PROPERTYEDITHELP> </DataBlockSize> </PROPERTYRULES> </HIERARCHYNODE> <HIERARCHYNODE TYPE=″PLC2_DH″EDITORID=″{9C53E368-C85A-44B1-8F7E-5EE6EE07DBED}″DELIMITER=″.″><CHILDRULES ENABLEDEVICEGROUPS=″1″/><PROPERTYRULES><NodeAddress> <PROPERTYTYPE>VT_UI4</PROPERTYTYPE> <DEFAULTVALUE>1</DEFAULTVALUE> <PROPERTYMIN>0</PROPERTYMIN> <PROPERTYMAX>255</PROPERTYMAX> <PROPERTYEDITHEADER>DH Node Nukmber</PROPERTYEDITHEADER> <PROPERTYEDITUNIT>Octal</PROPERTYEDITUNIT> <PROPERTYEDITHELP>Datahighway Node Number</PROPERTYEDITHELP> </NodeAddress> <ReplyTimeout> <PROPERTYTYPE>VT_UI4</PROPERTYTYPE> <DEFAULTVALUE>15</DEFAULTVALUE> <PROPERTYMIN>1</PROPERTYMIN> <PROPERTYMAX>300</PROPERTYMAX> <PROPERTYEDITHEADER>ReplyTimeout</PROPERTYEDITHEADER> <PROPERTYEDITUNIT>MSec</PROPERTYEDITUNIT><PROPERTYEDITHELP>Reply Timeout</PROPERTYEDITHELP> </ReplyTimeout> <DataBlockSize> <PROPERTYTYPE>VT_UI4</PROPERTYTYPE> <DEFAULTVALUE>240</DEFAULTVALUE> <PROPERTYMIN>100</PROPERTYMIN> <PROPERTYMAX>240</PROPERTYMAX> <PROPERTYEDITHEADER>Message packet size for PLC5 on DatahiwayPlus</PROPERTYEDITHEADER> <PROPERTYEDITUNIT/> <PROPERTYEDITHELP>Message packet size for PLC5 on Datahiway Plus</PROPERTYEDITHELP></DataBlockSize> </PROPERTYRULES> </HIERARCHYNODE></CONFIGURATIONRULES>]]></pre>
以下是构成远程配置规范的暂留区第二部分的配置文件280一例。
<pre listing-type="program-listing"><![CDATA[<?xml version=″1.0″encoding=″UTF-8″?><DASConfiguration NAME=″Wonderware ABTCP(non-official)″DELIMITER=″.″> <!--Wonderware AB TCP/IP Server--> <created>03.29.2000 16:40</created> <user>Clement Lie</user> <DeviceNode TYPE=″PORT_TCPIP″NAME=″TCP″DELIMITER=″.″> <!--TCP/IP Port for ABTCP--> <MaxQueuedMsgs>3</MaxQueuedMsgs> <MaxSockets>200</MaxSockets> <MaxUnsolConn>20</MaxUnsolConn> <UnsolicitedMsg Timeout>5000</UnsolicitedMsgTimeout> <DeviceNode TYPE=″PYRAMID_EI″NAME=″EI″DELIMIYER=″.″> <!--Ethernet Interface Module of Pyramid Integrator--> <HostName>P5250_1</HostName> <ConnectionTimeout>2000</ConnectionTimeout> <DeviceNode TYPE=″PYRAMID_PLC5250″NAME=″P5250_1″DELIMITER=″.″> <DataBlockSize>2000</DataBlockSize> <ReplyTimeout>15</ReplyTimeout> <DeviceGroup NAME=″P5250_1_Fast″UPDATEINTERVAL=″100″/> <DeviceGroup NAME=″P5250_1″UPDATEINTERVAL=″1000″/> <DeviceGroup NAME=″P5250_1_Slow″UPDATEINTERVAL=″5000″/> </DeviceNode><DeviceNode TYPE=″PYRAMID_RM″NAME=″RM″DELIMITER=″.″> <DeviceNode TYPE=″PORT_DHP″NAME=″CH2″DELIMITER=″.″><PortNumber>2</PortNumber><DeviceNode TYPE=″PLC5_DHP″NAME=″P511_1″DELIMITER=″.″> <NodeAddress>6</NodeAddress> <DataBlockSize>240</DataBlockSize> <ReplyTimeout>15</ReplyTimeout> <DeviceGroup NAME=″P511_1″UPDATEINTERVAL=″1000″/> <DeviceGroup NAME=″P511_1_Fast″UPDATEINTERVAL=″100″/> <DeviceGroup NAME=″P511_1_Slow″UPDATEINTERVAL=″5000″/></DeviceNode> </DeviceNode> <DeviceNode TYPE=″PORT_DHP″NAME=″CH3″DELIMITER=″.″><PortNumber>3</PortNumber><DeviceNode NAME=″SLC504_2″TYPE=″SLC500_DHP″DELIMITER=″.″> <NodeAddress>24</NodeAddress> <ReplyTimeout>15</ReplyTimeout> <DataBlockSize>204</DataBlockSize> </DeviceNode> <DeviceNode NAME=″P520E_2″TYPE=″PLC5_DHP″DELIMITER=″.″> <NodeAddress>7</NodeAddress> <ReplyTimeout>15</ReplyTimeout> <DataBlockSize>240</DataBlockSize></DeviceNode> </DeviceNode></DeviceNode><DeviceNode TYPE=″PYRAMID_KA″NAME=″KA″DELIMITER=″.″> <Pushwheel>1</Pushwheel> <DeviceNode TYPE=″PORT_DHP″NAME=″CH2″DELIMITER=″.″> <PortNumber>2</PortNumber> <DeviceNode TYPE=″PLC3_DHP″NAME=″P310_1″DELIMITER=″.″> <NodeAddress>9</NodeAddress> <DataBlockSize>240</DataBlockSize> <ReplyTimeout>15</ReplyTimeout> <DeviceGroup NAME=″PLC3″UPDATEINTERVAL=″1000″/> <DeviceGroup NAME=″PLC3_Fast″UPDATEINTERVAL=″100″/> <DeviceGroup NAME=″PLC3_Slow″UPDATEINTERVAL=″5000″/></DeviceNode><DeviceNode NAME=″P520C_1″TYPE=″PLC5_DHP″DELIMITER=″.″> <NodeAddress>52</NodeAddress> <ReplyTimeout>15</ReplyTimeout> <DataBlockSize>240</DataBlockSize> </DeviceNode> <DeviceNode NAME=″P580E_1″TYPE=″PLC5_DHP″DELIMITER=″.″> <NodeAddress>5</NodeAddress> <ReplyTimeout>15</ReplyTimeout> <DataBlockSize>240</DataBlockSize> </DeviceNode> <DeviceNode NAME=″P520E_2″TYPE=″PLC5_DHP″DELIMITER=″.″> <NodeAddress>7</NodeAddress> <ReplyTimeout>15</ReplyTimeout> <DataBlockSize>240</DataBlockSize></DeviceNode> </DeviceNode><DeviceNode TYPE=″PORT_DH″NAME=″CH3″DELIMITER=″.″> <PortNumber>2</PortNumber> <DeviceNode TYPE=″PLC2_DH″NAME=″P216_1″DELIMITER=″.″> <NodeAddress>83</NodeAddress> <DataBlockSize>100</DataBlockSize> <ReplyTimeout>15</ReplyTimeout> </DeviceNode></DeviceNode> </DeviceNode> </DeviceNode> <DeviceNode TYPE=″PLC5_TCPIP″NAME=″P520E_2″DELIMITER=″.″> <!--PLC5 on TCP/IP--> <HostName>P520E_2</HostName> <ReplyTimeout>300</ReplyTimeout> <DataBlockSize>1000</DataBlockSize> <SupportsPID>1</SupportsPID> <UnsolClientMsg>1</UnsolCliemtMsg> <ConnectionTimeout>2000</ConnectionTimeout> <DeviceGroup NAME=″P520E_2″UPDATEINTERVAL=″1000″/> <DeviceGroup NAME=″P520E_2_Slow″UPDATEINTERVAL=″5000″/> <DeviceGroup NAME=″P520E_2_Fast″UPDATEINTERVAL=″100″/> <DeviceGroup NAME=″P520E_2Unsol″UPDATEINTERVAL=″10000000000″/></DeviceNode><DeviceNode TYPE=″SLC500_TCPIP″NAME=″SLC505_2″DELIMITER=″.″> <HostName>SLC505_2</HostName> <ReplyTimeout>10</ReplyTimeout> <DataBlockSize>510</DataBlockSize> <ConnectionTimeout>2000</ConneetionTimeout> <DeviceGroup NAME=″SLC505_1_Fast″UPDATEINTERVAL=″100″/> <DeviceGroup NAME=″SLC505_1″UPDATEINTERVAL=″1000″/> <DeviceGroup NAME=″SLC505_1_Slow″UPDATEINTERVAL=″5000″/></DeviceNode> <DeviceNode NAME=″MyPLC5″TYPE=″PLC5_TCPIP″DELIMITER=″.″> <HostName>10.32.12.36</HostName> <DataBlockSize>2000</DataBlockSize> <ReplyTimeout>3</ReplyTimeout> <SupportsPID>1</SupportsPID> <UnsolClientMsg>1</UnsolClientMsg> <ConnectionTimeout>2000</ConnectionTimeout> <DeviceGroup NAME=″Fast PLC5″TYPE=″Topic″UPDATEINTERVAL=″20″/> <DeviceGroup NAME=″Medium PLC5″TYPE=″Topic″UPDATEINTERVAL=″1000″/> <DeviceGroup NAME=″Slow PLC5″TYPE=″Topic″UPDATEINTERVAL=″10000″/> <DeviceItem TYPE=″″NAME=″N7:0″/> <DeviceItem TYPE=″″NAME=″N7:2″/> <DeviceItem TYPE=″″NAME=″N7:3″/> <Deviceltem TYPE=″″NAME=″N7:11″/> <DeviceItem TYPE=″″NAME=″N7:14″/> <DeviceItem TYPE=″″NAME=″N17:0″/> <DeviceItem TYPE=″″NAME=″N17:1″/> <DeviceItem TYPE=″″NAME=″N17:2″/> <DeviceItem TYPE=″″NAME=″N17:3″/> <DeviceItem TYPE=″″NAME=″N17:50″/> <DeviceItem TYPE=″″NAME=″N17:99″/> <DeviceItem TYPE=″″NAME=″N27:0″/><DeviceItem TYPE=″″NAME=″N27:1″/><DeviceItem TYPE=″″NAME=″N27:2″/><DeviceItem TYPE=″″NAME=″N27:3″/><DeviceItem TYPE=″″NAME=″N27:50″/><DeviceItem TYPE=″″NAME=″N27:99″/><DeviceItem TYPE=″″NAME=″B3:0/8″/><DeviceItem TYPE=″″NAME=″B13:0/180″/><DeviceItem TYPE=″″NAME=″A9:0-8″/><DeviceItem TYPE=″″NAME=″F8:2″/><DeviceItem TYPE=″″NAME=″F8:12″/><DeviceItem TYPE=″″NAME=″ST10:0″/> </DeviceNode> <DeviceNode NAME=″MyPLC37″TYPE=″PLC5_TCPIP″ DELIMITER=″.″><HostName>10.32.12.37</HostName><DataBlockSize>2000</DataBlockSize><ReplyTimeout>3</ReplyTimeout><SuPPortsPID>1</SupportsPID><UnsolClientMsg>1</UnsolClientMsg><ConnectionTimeout>2000</Connection Timeout><DeviceGroup NAME=″Fast PLC37″TYPE=″Topic″UPDATEINTERVAL″20″/><DeviceGroup NAME=″Medium PLC37″TYPE=″Topic″UPDATEINTERVAL=″1000″/><DeviceGroup NAME=″Slow PLC37″TYPE=″Topic″UPDATEINTERVAL=″10000″/><ItemHint TYPE=″″NAME=″N7:0-4″/><ItemHint TYPE=″″NAME=″F8:0-3″/><ItemHint TYPE=″″NAME=″BT9:0-3″/><ItemHint TYPE=″″NAME=″N10:0-74″/><ItemHint TYPE=″″NAME=″B11:0-0″/><ItemHint TYPE=″″NAME=″PD12:0-0″/><ItemHint TYPE=″″NAME=″N13:0-3″/><ItemHint TYPE=″″NAME=″N14:0-4″/><ItemHint TYPE=″″NAME=″N15:0-4″/> </DeviceNode> </DeviceNode> <System NAME=″SYSTEM″TYPE=″SYSTEM″> <UpdateInterval>1000</UpdateInterval> <SlowPollInterval>10000</SlowPollInterval> <CaseSensitive>0</CaseSensitive> <DefaultPokeMode>0</DefaultPokeMode> <DefaultDelimiter>″.″</DefaultDelimite> <SimulationMode>0</SimulationMode> <EnableSystemItems>1</EnableSystemItems> <LinkTopicCache>0</LinkTopicCache> <UniqueDeviceGroup>1</UniqueDeviceGroup> <ProtocolTimerTick>60</ProtocolTimerTick> <TransactionTimeout>2000</TransactionTimeout> <LockConfigurationFile>0</LockConfigurationFile> <SubscriptionTransactionRatio>2</SubscriptionTransactionRatio> </System></DASConfiguration>]]></pre>
本发明的示例性实施例及其一定的变形,已经在附图中及伴随的书面说明中提供。但并不是要把本发明限于这些实施例。本发明是要在以下这里所附权利要求定义的这一公开和发明所允许的最充分的程度上,函盖公开的各实施例以及其它属于本发明的范围和精神的实施例。
权利要求
1.一种分布式配置实用程序,便于过程控制数据访问服务器的远程配置,该分布式配置实用程序包括位于控制台的配置编辑器;包括当前服务器配置说明的配置存储器;规则数据库,用于存储一组与每一通过配置实用程序可配置的数据访问服务器相关的配置规则,其中这组配置规则提供了到配置存储器内信息的导向,规定了对一些过程控制数据访问服务器的配置;以及服务器代理,位于远离控制台的计算结点,并包含可配置的过程控制数据访问服务器,该服务器代理包括可执行程序,用于通知配置编辑器可配置过程控制数据访问服务器的存在,并从而便于在配置编辑器与可配置过程控制数据访问服务器之间建立配置接口。
2.权利要求1的分布式配置实用程序,其中该组配置规则规定了配置分层级。
3.权利要求2的分布式配置实用程序,其中该组配置规则规定了与配置分层级特定的一些配置结点相关的性质。
4.权利要求1的分布式配置实用程序,还包括一种可执行的通知机制,这种机制建立到一运行的数据访问服务器的连接,该服务器已经改变了配置参数值,并通知该运行的数据访问服务器对其配置的改变。
5.权利要求1的分布式配置实用程序,还包括一用户编辑器主机,提供一接口支持编辑器接口面板,接口面板是对过程控制数据访问服务器配置的特定组件类型规定的。
全文摘要
公开了一种远程配置实用程序体系结构,用于制造/过程扩控制系统数据访问服务器。位于远程结点(250)的服务器代理程序通知系统上的现有的数据访问服务器的配置控制台。配置实用程序包括一控制台,用户从该控制台选择标识的数据访问服务器之一。然后,配置控制台通过远程接口获得配置参数(280)及与所选数据访问服务器相关的有关规则(270)。然后配置实用程序在用户界面面板内显示检索到的配置信息,该界面面板是对于所选的配置结点的类型定义的,用于从所选的DAS显示/编辑。使用对于所选结点类型的各种面板,对于与所选数据访问服务器相关的配置,用户生成,清理,检验和/或操作分层布置的结点。
文档编号H04L29/06GK1504041SQ01818968
公开日2004年6月9日 申请日期2001年9月14日 优先权日2000年9月15日
发明者雷纳·海斯莫, 伊万·A·特德洛夫, 迈克尔·哈德利克, 路易斯·D·罗斯, D 罗斯, 哈德利克, A 特德洛夫, 雷纳 海斯莫 申请人:旺德维尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1