OPC说明书--中文版

发布时间:   来源:文档文库   
字号:
<>题目:Opc数据存取接口定义标准版本2.05A日期2002628
规范类型:工业标准规范
题目:OPC数据存取接口定义规范作者:OPC基金会日期2002628版本:2.05A软件:MS_Word
资源:opcda205a_cust状态:发布大纲
这个规范是为OPC客户端和服务器端开发者作的接口规范.这个规范是在为能产生一个能够让不同的卖主的客户和服务器能一起无缝交互的分析和设计过程中诞生的.[/color]
商标:[/color]
多数计算机和软件都有商标或者已经注册商标,在这里不单独列出商标.
]需要运行环境
这个标准需要Windows95WindowsNT4.0或者更晚版本.
公开的授权协议书
opc基金会,一个非赢利的公司“opc基金会已经建立了一系列为增强过程控制工业里的自动控制应用程序,现场系统/设备和商业/办公应用程序协作能力已经建立了一系列标准的ole/com接口协议
当前的opc规范,原理性样例和相关的文档(统称”opc资料,形成了一系列建立在微软的ole/com技术的功能需要的基础上的的标准的ole/com接口协议。这些技术为服务器适时信息定义了一些标准的对象,方法和属性,象分散过程控制系统,可编程逻辑控制器,精巧的现场设备和为传输信息的分析系统这些服务器适合所有符合标准的ole/com技术的设备(例如,服务器,应用程序等)
opc基金会同意你(用户)无论是个人还是法人单位,具有授权和为用户提供一个当前opc资料的一个拷贝,只要用户接受包含在这个非专有的授权协议书里的条款。opc资料如果无用,所有资料的拷贝(所有形式的)用户的个人财产必须被销毁和归还opc基金会。使用opc资料的用户(包括任何雇员和用户代理)必须接受这个协议书了的约束。
授权的承认:
这份协议的期限和条件OPC基金会承认不独占,免费出售的用户,禁止使用,拷贝,展示,分发OPC资料为制造,使用,销售或分发其他的任何产品和或者符合OPC资料的标准产品文献。
所有的用户制作的或分发的OPC资料的拷贝必须把opc资料里包含的版权和其他的所有权声明包含进来。OPC基金会保留所有在OPC资料里的权利,标题和利益,标注的协议里禁止的用户的授权。

不承担的责任和义务
用户接受OPC基金会提供的OPC资料是出于为了帮助用户理解微软的OLE/COM技术的信息。OPC资料是作为没有任何类型的明确的和含糊的包含的授权,但是没有任何的限制,性能的保证,销售商,适合特殊的目的和无伤害的。用户承担所有的与性能,设计,使用和OPC资料性能有关的风险。OPC基金会及其会员不能承担OPC资料在他们的设计或他们的使用会遇到用户不断的需求,操作和大量的错误的责任。这份协议或任何OPC资料的使用的结果使OPC基金会,及其会员们或第三方组织不承担任何通过用户或任何第三方的使用导致事件的资费,开支,损失,损害,或人身伤害
一般规定:
这个OPC材料约定和用户授权应当被终止a在用户停止所有OPC材料的使用。(b用户获得了更高版本的材料来替代它,或者cOPC基金会有选择终止,当用户不正当的,超出协议使用这是资料。依据以上的终止协议,用户应该立即停止使用所用的OPC材料,销毁所有的相关资料的拷贝然后是自己制作的相关资料和其他发生的相关行为,作为OPC基金会要求确保没有任何在此协议之下的资料授权的拷贝在个人的财产上。
用户不应该出口,和二次出口opc材料,在美国的出口控制法和出口规则没有授权接收它们的任何个人或目的地的任何的产品不得直接的使用相关资料这些软件和文档是有限制的提供的。使用,复制或者纰漏都美国政府依据以下的限制(a)这个协议要依据DFARS227,7202-3(b(c(1(iDFARS252227-7013的规定(c商业计算机软件的限制权依据FAR52.227-19子条(c(1(2的规定使用。订约/制造:OPC基金会,邮箱:140524,德州奥斯丁,78714-0524如果任何的这个协议中提供的被置空,残缺,没有强制的能力或不能在法庭上使用,其他相关的条款不受到影响。
这个协议受到明尼苏达州的法律的强制和解释执行,依据法律选择执行。
这个协议收录了当事人的期望和推迟执行任何的解释和协议(口头的和书面的相关opc资料的全部解释
新增功能
30版本摘要
这个版本包含了对2.05A版的DataAccessCustomInterface办更,再晚些时候会决定是否会提供一个单独的文档(TheOPCDataAccessAutomationSpecification3.0用来描述适用于VBDelphi和其他一些有自动化功能的产品与OPC服务器的接口。以下的功能是已经加入到这个版本的规范中了加入的新接口IOPCBrowse
IOPCItemDeadbandMgtIOPCItemSamplingMgtIOPCitemIOIOPCSyncIO2IOPCAsyncIO3
IOPCGroupStateMgt2
阐明了启动的问题和加入了WAITING_FOR_INITIAL_DATA质量状态掩饰加入了EUTYPE#78条目属性
阐明SetActimState用来表明一个条目从非激活到激活的变换中产生的质量结果,和控制

回调函数。
加入了新服务器状态列举变量(OPC_STATUS_COMM_FAULT在头标签里加入了便于进入访问目录表的方法在这给规范中删除了以下接口IOPCServerPublicGroups
IOPCBrowseServerAddressSpaceIOPCPublicGroupStateMgtIOPCAsyncIO
IOPCItemProperties
另外加入拼写,语法,格式和最小的净化代码用来提高规范的质量。加入了条目属性的章节。阐明了RemoveGroupidl中加入了CATIDs
提供了读写质量和时间戳的功能
使回调函数连接更健康加入了保持活动生命期机制205A版本摘要
这个版本在4.2.13的注释(5)中阐述关于怎样把浮点数和双精度数转换成整数,也纠正了附录D(200-2071关闭属性的定义205版本摘要
这个版本包含了在4.2.13小节中列举并阐述了关于在Native和请求数据类型之间的转换204版本摘要
这个版本包含对某几个在相互协作的会话和服从测试中出现的不明确地方的另了的精简。有一些章节:时间偏倚和死区在GroupObject中讨论,通用属性(4.5.1SetStateLocaleID(使GetItemProperties,LookupItemIDs,AddItems,ValidateItemsRemoveItems,SetActiveState,SetClientHandles,SetDataTypes,bothSyncIOandAsyncIOReadandWriteE_INVALIDARGS_FALSE
部分成功改为一个或多个错误完成这就清晰的预示着输出的方法(特别是PPErrors返回值)定义为这种情况,其他的对返回错误文本的调整又通过交叉函数组成。阐述GetItemID行为。在Refresh2IOPCDateCallback::OnDataChange传送参数的ID被阐述。特别的0是被允许的值。也可以见到对OPCAsyncIO的描述(4.5.6,增加了4.2.14小节对客户和服务器中关于LocaleID职责的讨论。203版本摘要
4.5.1.6IOPCServer::CreateGroupEnumeratorIOPCBrowseServerAddressSpace::BrowseAccessPaths的描述已经被澄清和描述,他们现在由已经存在的IOPCBrowseServerAddressSpace::BrowseOPCItemIDS的描述组成202版本摘要
这个版本包括了对OPCItemProperties接口讨论4.4.6GroupStateMgt::SetState(4.5.3.210版中对流聚合的讨论(4.6.4.6)的简要阐述201版本摘要
这个版本阐述了IOPCBrowseServerAddressSpace中的dwAccessRightsFilter和讨论了一

般的数据入口(6.7.6节)20版本摘要
这个版本包含了对1.0A版本的增强。通篇中也作了更改。下面的方面或许特别重要:这个被称为OPCDataAccessSpecificatong的东西是从其他的OPC起步努力中得来的自动化
接口规范被分在另外一个独立的文档中
所有的前一版本的定义接口被保留并做了简单的阐述。
IDataObject使IOPCAsyncIO,IDataObject和客户端的IAdviseSink接口支持老板本(10)的连接。新的接口IOPCAsyncIO2,IConnectionPiontContainer和客户端的IOPCDataCallback接口支持新诗的20版的连接
定义了新的舒服的接口,IOPCItemProperties允许轻松访问一般的和开发者的特殊属性或条目及变量的属性
一个关闭请求功能特性的加入,通过服务器组件连接点和客户端IOPCShutdown接口允许服务器请求关闭所有客户端同服务器的连接。这个接口将被其他的OPC服务器使用
服务器中加入了一个IOPCCommon接口,这个接口提供了一些公共的LocaleID相关的功能。这个接口将被其他的OPC服务器使用
BrowseServerAddressSpace中加入了OPC_BROWSE_TO的能力
目录表1介绍。111读者。112提供的内容。12OPC数据访问的基本原理。221OPC总览。222哪些地方适合使用OPC323通常的OPC的机构和组成。424OPC数据访问结构详述。525对象和接口总览。626服务器的地址空间和配置。727服务器和网络节点应用水平的选择。828同步和串行传输的问题。829持久存储的事例。93OPC数据访问的快速参考。1031自定义接口。104OPC自定义接口。1141浏览OPC自定义接口。1142综合资料。12422内存所有权。13423标准的接口。14424空字符串和空指针。14425返回阵列。14426高速缓存数据,设备数据和时间戳。15427时间系列的值。15

428异步和同步的对比。15429激活标志,死区和更新率。154210错误和返回代码。154211启动问题。154212VARIANT数据类型和互用性。164213定位和LocaleID194214条目属性。194215IOPCSyncIO254216IOCASyncIO2264217通过IOPCDataCallback的定制。2743OPCServer对象。28431概要。28432IUnknown29433IOPCCommon29434IOPCServer304341IOPCServer::AddGroup304342IOPCServer::GetErrorString334343IOPCServer::GetGroupByName344344IOPCServer::GetStatus354345IOPCServer::RemoveGroup。删除组。364346IOPCServer::CreateGroupEnumerator。创建组列举。38435IConnectionPointContainer(OnOPCServer。连接电容器。404351IConnectionPointContainer::EnumConnectionPoints。连接点列举。414352IConnectionPointContainer::FindConnectionPoint。查询连接接点。42436IOPCBrowseOPC浏览。434.3.6.1IOPCBrowse::Browse...浏览..................................43
4.3.6.2IOPCBrowse::GetProperties......获得属性.........................464.3.7IOPCItemIO...................条目.........................48
4.3.7.1IOPCItemIO::Read........读取...............................484.3.7.2IOPCItemIO::WriteVQT...................................51
4.4OPCGROUPOBJECT.............组对象..............................534.4.1GeneralProperties......一般属性............................544.4.1.1Name..............名字.....................................54
4.4.1.2Cacheddata..........缓存数据..................................544.4.1.3Active................激活................................54
4.4.1.4UpdateRate...............更新率..............................55
4.4.1.5TimeZone(TimeBias.........时区(时间偏倚)............................554.4.1.6PercentDeadband...........死区百分比.............................564.4.1.7ClientHandle..............客户端句柄..............................564.4.1.8ReadingandWritingData.........读写数据......................564.4.2IOPCItemMgt........................................58
4.4.2.1IOPCItemMgt::AddItems.......加入条目..........................584.4.2.2IOPCItemMgt::ValidateItems...条目生效........................604.4.2.3IOPCItemMgt::RemoveItems......刈除条目.....................62

4.4.2.4IOPCItemMgt::SetActiveState....设置为活动状态.....................634.4.2.5IOPCItemMgt::SetClientHandles....设置客户端句柄....................644.4.2.6IOPCItemMgt::SetDatatypes........设定数据类型....................654.4.2.7IOPCItemMgt::CreateEnumerator.....创建枚举器.....................664.4.3IOPCGroupStateMgt..................................67
4.4.3.1IOPCGroupStateMgt::GetState.....获取状态.......................674.4.3.2IOPCGroupStateMgt::SetState.......设置状态......................694.4.3.3IOPCGroupStateMgt::SetName.......设置名称......................714.4.3.4IOPCGroupStateMgt::CloneGroup.....关闭组......................724.4.4IOPCGroupStateMgt2................................74
4.4.4.1IOPCGroupStateMgt2::SetKeepAlive....设置生命期..................744.4.4.2IOPCGroupStateMgt2::GetKeepAlive......获得生命期...............764.4.5IOPCSyncIO.....................同步IO....................77
4.4.5.1IOPCSyncIO::Read.............读取...........................774.4.5.2IOPCSyncIO::Write..............写入........................804.4.6IOPCSyncIO2.........................................82
4.4.6.1IOPCSyncIO2::ReadMaxAge.....读取最大生命期...................824.4.6.2IOPCSyncIO2::WriteVQT..............................854.4.7IOPCAsyncIO2.............异步IO................87
4.4.7.1IOPCAsyncIO2::Read..........................................884.4.7.2IOPCAsyncIO2::Write..........................91
4.4.7.3IOPCAsyncIO2::Refresh2...........刷新................944.4.7.4IOPCAsyncIO2::Cancel2............取消..................964.4.7.5IOPCAsyncIO2::SetEnable.........使活动..................974.4.7.6IOPCAsyncIO2::GetEnable..........获得活动...................984.4.8IOPCAsyncIO3........................99
4.4.8.1IOPCAsyncIO3::ReadMaxAge...读取最大生命期...................994.4.8.2IOPCAsyncIO3::WriteVQT............................102
4.4.8.3IOPCAsyncIO3::RefreshMaxAge....刷新最大生命期................1044.4.9IOPCItemDeadbandMgt..........................106
4.4.9.1IOPCItemDeadbandMgt::SetItemDeadband.....设置条目死区...............1064.4.9.2IOPCItemDeadbandMgt::GetItemDeadband.....获得条目死区........108
4.4.9.3IOPCItemDeadbandMgt::ClearItemDeadband....清除条目死区..............1104.4.10IOPCItemSamplingMgt(optional.........................112
4.4.10.1IOPCItemSamplingMgt::SetItemSamplingRate....................1134.4.10.2IOPCItemSamplingMgt::GetItemSamplingRate...............1164.4.10.3IOPCItemSamplingMgt::ClearItemSamplingRate...............1184.4.10.4IOPCItemSamplingMgt::SetItemBufferEnable.................1194.4.10.5IOPCItemSamplingMgt::GetItemBufferEnable....................1214.4.11IConnectionPointContainer(onOPCGroup.......连接点容器.....123
4.4.11.1IConnectionPointContainer::EnumConnectionPoints......列举连接点.........1244.4.11.2IConnectionPointContainer::FindConnectionPoint......查找连接点.......1254.4.12IEnumOPCItemAttributes..............列举条目属性.................1264.4.12.1IEnumOPCItemAttributes::Next.........下一个....................126

4.4.12.2IEnumOPCItemAttributes::Skip.........跳过.................1274.4.12.3IEnumOPCItemAttributes::Reset..........复位...........1284.4.12.4IEnumOPCItemAttributes::Clone...........克隆.................1294.5CLIENTSIDEINTERFACES.........客户端接口........................1304.5.1IOPCDataCallback............回调函数........................130
4.5.1.1IOPCDataCallback::OnDataChange.....数据变更通知.....................1314.5.1.2IOPCDataCallback::OnReadComplete......全部读入.......................1344.5.1.3IOPCDataCallback::OnWriteComplete......全部写入......................1364.5.1.4IOPCDataCallback::OnCancelComplete....全部取消.................1384.5.2IOPCShutdown.............关闭............................139
4.5.2.1IOPCShutdown::ShutdownRequest.....关闭请求............................1395INSTALLATIONISSUES..............安装问题.......................1405.1COMPONENTCATEGORIES........组建类........................140
5.2REGISTRYENTRIESFORCUSTOMINTERFACE......................140
5.3REGISTRYENTRIESFORTHEPROXY/STUBDLL.......dll..........141
6DESCRIPTIONOFDATATYPES,PARAMETERSANDSTRUCTURES...数据类型,参数,结构的描述..142
6.1ITEMDEFINITION........条目定义..........................1426.2ACCESSPATH...............访问路径..............................1436.3BLOB...............污点.........................144
6.4TIMESTAMPS.......时间戳................................144
6.5VARIANTDATATYPESFOROPCDATAITEMS......OPC数据条目的Variant数据类.......145
6.6CONSTANTS...........................................1466.6.1OPCHANDLE...............................146
6.6.1.1GroupHandles......组句柄........................146
6.6.1.2ItemHandles........条目句柄.................................146
6.7STRUCTURESANDMASKS..............结构和蒙布........................1476.7.1OPCITEMSTATE..............条目状态.......................1476.7.2OPCITEMDEF.................条目定义.....................148
6.7.3OPCITEMRESULT...............条目结果.........................1506.7.4OPCITEMATTRIBUTES............条目特性....................1516.7.5OPCSERVERSTATUS..............服务器状态......................1536.7.6AccessRights................存取权限...................154
6.7.7OPCITEMPROPERTY...............条目特权.....................1566.7.8OPCITEMPROPERTIES..............条目属性表....................1576.7.9OPCBROWSEELEMENT..............浏览的组成...............1586.7.10OPCITEMVQT....................................159
6.8OPCQUALITYFLAGS..............OPC性能标志...............160
7SUMMARYOFOPCERRORCODES............OPC错误代码摘要........1648APPENDIXA-OPCERROR.H.............附录A头文件.....167
9APPENDIXB-DATAACCESSIDLSPECIFICATION.......附录B数据访问IDL文件规

..173
1介绍
在一个单独的OPC概述文档((OPCOVW.DOC)对OPC作了全面的介绍,这个特殊的文档只是对OPC数据访问接口做详细的解说11读者
这个规范是特地为做OPC客户端和服务器端开发者作的一个参考手册。他认为读者已经对MSOLE/COM技术和工业过程控制需求非常熟悉。
这个规范是为熟悉并选择使用CC++语言来开发OPC客户程序提供的资料。所以开发者要对这些方面的技术和特别的组件要相当熟悉。12可获得的资料
OPC基金会可获得的OPC借口访问相关的资料包括他OPC规范本身以外还有OPCIDL文件(在这本文档的附录里)和OPC错误头文件(在这个文档里)。你可以方便地在OPC基金会的网站上可以找到标准的代理存根的DLLS和从OPC接口访问IDL文件产生的头文件,会员可以在OPC基金会的网站上下载OPC接口访问的例子的源代码。这个OPC数据访问规范包括以下设计信息
1.OPC数据访问自定义接口这个文档描述了OPC组件和对象的接口和方法。2.OPC数据访问自动化接口晚些时候将会提供一个可选择的单独文档OPC数据访问自动化接口规范30用来描述OPC自动化接口,这是为使用VBDelphi和其他具备自动化功能产品的软件来与OPC服务器对接编成提供的
2OPC数据访问基本原理
这个小节介绍OPC数据访问和涵盖OPC数据访问的主题的细节。另外的公共话题包括WindowsNTUNICODE线程模式,等在OPC概述OPCOVW.DOC的资料里讨论。21OPC概览
这个规范描述OPCCOM组件和他们的接口通过OPC服务器的实现。一个OPC户能连接到不同开发商开发的一个或多给OPC服务器上。2-1OPC客户(略)
不同的开发商提供不同的OPC服务器,开发商提供的代码决定了每个服务器访问的设备和数据,数据名称,和服务器访问的物理数据的细节。命名习惯在后来的章节提供。2-2客户/服务器关系(略)
水平高一点一个OPC服务器可以由多个对象组成:服务器,组,和条目。OPC服务器对象提供服务器的信息和作为容器为组对象服务。OPC组对象提供组的信息和提供了包含和逻辑组织OPC条目的机制。
OPC组对象为客户组织数据提供了一个方式。例如组可也用一个特别的操作来展示和报告来表示条目。数据能被读写。基于连接的异常在客户与组里的条目之间被创建和根据需使能或取消使能。OPC客户端可以配置OPC服务器为客户端提供数据变化的速率。再每一个组里,客户端可以定义一个或多个OPC条目。2-3/条目关系(略)
OPC条目表示同服务器的数据源连接。从自定义的接口来看,一个OPC条目不能被OPC客户端理解为一个对象。因此,没有为OPC条目定义的接口。所有的对OPC条目的访问都是通过OPC组对象来实现的,组对象包含了OPC条目,和OPC条目的简单定义。每一个条目都是由数值,性质,和时间戳组成。数值是VARIANT类型的,性质很像Fieldbus

里面的定义规范。
标注:条目不是数据源,他们仅仅提供连接。例如,一个DCS系统里的变量的存在跟客户端是否正在访问他们没有关系。OPC条目应该被认为一个简单的数据地址的标示,不能认为地址所指实际的物理数据源。那里适合OPC
虽然OPC首先是为从网络服务器来访问数据而设计的,可是OPC接口能被应用到很多地方。在低端的应用水平,他们可也从物理设备里获得原始数据并写入SCADADCS或者从SCADADCS系统里到应用程序里。他的结构和设计使构造一个允许一个客户端访问多个不同开发者开发的运行在不同节点的服务器提供的数据的客户应用程序成为可能。
2-4OPC客户/服务器关系(略)一般的OPC体系结构与组成
OPC是两套接口的规范:OPC自定义接口和OPC自动化接口,一个修订的自动化接口随着30OPC规范的发布一起提供。下面是结构图(略)图2-5OPC接口OPC说明书指定了COM接口,不是接口的实现,他指定了客户期望接口提供的功能行为。包括架构的描述和适合这些架构接口,象所有COM的实现一样,OPC的架构是客户/务器模型,OPC服务器组件为OPC组件提供接口和管理他们。
OPCServer的实现里有几个综合的考虑。主要的问题是超越不可分享物理设备路径的数据传输的频率。因而,我们期望OPCServer是一个本地的或远程的EXE代码,能负责有效的物理设备数据的收集.
一个OPC客户程序通过规范的OPC接口与一个OPCServer进行通信.OPCServer必须实现自定义的接口,可选的自动化接口如果定义了有时也会实现.
一个OPC句柄会用来聚合接口和提供OPC自动化接口的额外的条目功能.参考下面的图例:典型的OPC构架
服务器被期望巩固和使所有的客户的数据访问最优化用来提高同物理设备的通信性能。对输入,从设备返回的数据会被暂存为了各种OPC客户的异步分发和同步采集。对输出,OPC务器会为OPC客户程序更新物理设备的数据。2.4OPC数据访问架构的伴随规范
OPC数据访问提供基本的功能同过一套标准的的接口来从各种网络上的设备访问数据。些接口使客户和服务器发现对方和通信容量(功能,命名空间,命名空间条目信息)的相互协作变得更容易,另外提供了一套完善的接口定义来促进各种装置根据客户应用程序的需要来读写数据条目。OPC数据访问的首要意图是为支持纵向的构架的数据服务提供接口(在高层的计算机上提供从设备到客户应用程序的服务)
OPC基金会朝着扩展OPC数据访问的能力方向努力工作着。伴随的接口被加进来为提供需要的扩展数据访问功能。这些包括在不同的工业网络分享服务器数据的能力。伴随的构架包括:
OPC公共的定义和接口包含公共规则和设计标准和公共的数据访问接口的规范。OPC复杂的数据,详细说明了怎么使用数据访问来交换数据结构。他提供了一种机制来象传送实际值一样来传送数据的结构。综合的数据没有集成到OPCDa3.0规范中
OPC数据交换,OPCDX已经被设计用来在OPC服务器间横向移动设备层数据,为了表达这种新的技术,OPCDX能够实现在Ethernet系统包括PLCHMI/SCADA设备和PC间的数据的互用


25对象和接口综述
OPC服务器对象提供了同一系列数据源进行通信和数据访问的一种方式,可用的资源的类型是关于服务器实现的一个功能。
一个OPC客户程序同一个OPC服务器连接和通信是通过接口来完成的。OPC服务器对象为客户程序提供了创建和操作OPC组对象的功能。这些组对象允许客户们组织她们想访问的数据。一个组可以是活动的或者非活动的单位,一个组也可以提供一个方式让客户用来定制条目列表从了在条目发生变化时得到通知。
注:所有的COM对象都是通过接口访问的。客户看到的仅仅是接口。因此,这里描述的对象是逻辑上的表示,没有对服务器内部作任何的实现。下面的图是OPC对象的和他们的接口的摘要。注一些接口是可选择的[]中的。

26服务器的地址空间和配置
这个版本的OPC说明书设定服务器的地址空间的配置是用IPersistfile接口管理和长期存储的。只有服务器的特殊的信息会被长期存储。所用的客户配置信息(组和条目的定义)必须由用户程序分别自己永久存储。所有的系统定义的句柄在客户和服务器的会话过程中拥有相同的值。
把服务器空间和他的特殊用途的子空间区分开来是很重要的(做为服务器配置)客户的详细的组的维护细节会在这个说明书里讨论。组的永久存储是各个客户程序的事。服务器地址空间的定义和配置的细节特别没有说明。例如地址空间可能如下。全部固定。(如,对于特别的设备接口象测量设备)
OPC环境以外完全配置。(如,外部存在的DCS系统的接口)一个智能的服务器能智能在启动时自动配置,让服务器安装硬件和接口。根据客户程序当前的请求的数据条目的名称服务器自动地配置
服务器的地址空间期望是稳定的和能在服务器内进行管理。客户程序会更具需要不时地定义和管理被叫做组的相关的小的条目列表。通过OPCGroups得使用,这里描述的接口给客户程序提供了定义,管理,重新创建这些需要的列表的能力

27应用级别服务器和网络节点选择
OPC数据访问支持在服务器内部管理客户组的请求的概念。这些组能包含仅从从一个特殊OPC服务器对象数据请求。为了能访问数据,一个客户应用程序需要详细说明下列能容:OPC数据访问服务器的名称(CoCreateInstance,CoCreateInstanceEx,使用)OPC数据访问服务器主机的名称(CoCreatInstanceEx
开发商的OPC条目的定义详细说明(在地址空间里的数据条目的名称)
说明书为讨论这些架构里的具体实现和客户程序里的接口留一些余地。
28同步和串行问题
在单独的传输里的客户读写数值和属性的性能被称为同步传输。例如,很多应用想确保特殊的条目的数值,性能,和时间戳是同步的。还有,一个报告数据包被希望能确保一个组的几个值的读写能作为一个绑定的报告捆绑在一起。最后,一个配方的下载包也会被期望组里的所有的值在一起发送,数值没有接收完配方不会被执行。仅有一少部分的关于同步重要性

的例子。
OPC自身不能够保证所有的同步任务被完成只是一少部分结果。服务器和客户程序之间还加入了传送握手信号和标志来标示准备好和完成状态的请求。还有一些东西需要被详细说明,也就是OPC服务器的行为要确保这些同步能被完成。
以后会看到OPC允许直接读写组里的条目和单独的条目也希望能在连接之上。不用回头太远就能够观察到这些问题和服务器的行为。
1一般地,OPC服务器会尝试在一个对数据条目和属性的单独的读写操作时保持同步。独的条目的读和单独的条目的写操作要求保持同步是没有必要的。显然,从不同的物理设备进行数据读操作是很难保持同步的。
2.能被不同线程访问的数据条目的读与写必须实现线程的安全,在这个方面这本说明书里对数据同步作了详细的说明。例如重要性包括:在一个服务器内部的逻辑,当另一个线程完成物理传输和对一个与第一个线程共享的缓冲区放进数据时一个服务线程方法被执行。另外一个例子可能一个句柄的逻辑或者一个隐藏的OPC线程服务OnDataChange方法的代理服务器在对共享缓冲器写数据时一个客户线程也可能在读该缓冲器。3.线程问题经常是很重要的,尤其在SMP系统更是重要。
串行通信我们的意思是在写操作之行时客户程序控制顺序的功能。
1.前列推荐在任何服务器的实现里对同一个设备的写请求安顺序控制。例如一用程序会使用配方完成标志,在一个单独的配方条目发送以后一个配方下载完成标志被应用程序置位。在这种情况下,数据会被按照同样的顺序传输到物理设备,他会保证在所用数据传送完之前完整标志不会被置位。在服务器缓冲器里输出数据和执行单独的传送关系线程来发送输出到物理设备,服务器的实现必须特别注意来确保输出的次序的保持。2客户程序在读数值要非常明确同时在接收通过回调函数更新时特别注意给出准确地定义回调函数发生和没有发生。这些会在以后讨论的更多。所有这些问题会在以下的方法的具体实现的细节里被澄清。
29永久存储过程
OPC服务器会实现一个可选择的接口来使OPC客户告诉OPC服务器保存OPC服务器的配置信息更方便。服务器信息可能包括同设备和使数据源同OPC服务器通信变得更方便的必要的数据源信息。客户程序的配置信息包括组,条目被服务器永久存储。客户程序对被他们请求使用的组和条目的配置和永久存储有责任。
3OPC数据访问快速参考
这一节包括自定义接口方法的快速参考。在以后的参考章节定义了详细的接口行为和参数。31自定义接口
COMIUnknownIEnumStringIEnumUnknown这些被OPC数据访问使用的接口。OPCServerIOPCServer
IOPCBrowse(new3.0IOPCItemIO(new3.0
IConnectionPointContainerIOPCCommonOPCGroup
IOPCGroupStateMgt

IOPCGroupStateMgt2(new3.0IOPCASyncIO2
IOPCAsyncIO3(new3.0IOPCItemMgt
IOPCItemDeadbandMgt(new3.0
IOPCItemSamplingMgt(new3.0,optionalIConnectionPointContainerIOPCSyncIO
IOPCSyncIO2(new3.0EnumOPCItemAttributesIEnumOPCItemAttributes
4OPC自定义接口
41OPC自定义接口总览
OPC自定义接口对象包括以下自定义对象:OPCServerOPCGroup
这一章详细描述了这些对象的接口和行为。OPC服务器开发者需要实现这章中定义的OPC对象的功能。
这章中也说明和定义了标准的OLE接口的期望行为。OPC服务器和OPC客户端需要的接口在OPC应用组件编译时被实现。
标准的自定义接口对象Enumerator被创建,这些对象的接口也会被返回。因为他们的行为已经被OLE很好的定义了所以一般的列举对象和接口只做简短的描述。下面的OPC明书对象的列举器被创建和返回方法首选下面的方法而不是通过QueryInterface列举器如下:
组列举器(看IOPCServer::CreateGroupEnumerator条目属性列举器(看IOPCItemMgt::CreateEnumertor
你也应该注意这些情况,有些返回列表是通过列举器返回的有时作为条目列表返回。我们的选择依据期望的条目返回数据。大的列表通过列举器返回小的更容易通过列表返回。
42一般信息
这一节中提供了有关OPC接口的综合的信息,和一些OPC设计者期望这些接口怎么被实现和使用的背景信息。421版本的通用
数据访问服务器说明书应该使1.0a,2.x30版本的环境的或其他数据访问说明书版本的相关组成应当兼容。数据访问客户端也应该使1.0a,2.x30版本的环境的或

其他数据访问说明书版本的相关组成应当兼容
客户端和服务器端的开发者应该根据他们的特殊应用情况使用最好的兼容策略。例如一个开发者经常把自己开发的客户端和服务器端组件作为一个包系统出售,他的OPC表现出的很强的兼容性使他不用需要支持接口的很多版本。
作为一个通用的方针强烈推荐已经存在的服务器的开发者添加3.0版本的支持和继续添加对2.01.0版本的支持,允许已经存在的客户端移植到他们自己的空间。


数据访问服务器需要的接口1.02.03.0OPCServer
IUnknown需要需要需要IOPCServer需要需要需要IOPCCommonN/A需要需要
IConnectionPointContainerN/A需要需要IOPCItemPropertiesN/A需要N/AIOPCBrowseN/AN/A需要
IOPCServerPublicGroups可选择可选择N/AIOPCBrowseServerAddressSpace可选择可选择N/AIOPCItemION/AN/A需要OPCGroup
IUnknown需要需要需要IOPCItemMgt需要需要需要IOPCGroupStateMgt需要需要需要IOPCGroupStateMgt2N/AN/A需要IOPCPublicGroupStateMgt可选择可选择N/AIOPCSyncIO需要需要需要IOPCSyncIO2N/AN/A需要IOPCAsyncIO2N/A需要需要IOPCAsyncIO3N/AN/A需要IOPCItemDeadbandMgtN/AN/A需要IOPCItemSamplingMgtN/AN/A可选择IConnectionPointContainerN/A需要需要IOPCAsyncIO需要可选择N/AIDataObject需要可选择N/A
422内存的分配
每一个COM说明书,客户程序必须释放所有同输出和输入/输出参数有关的内存。这个包括任何结构的成员指向内存的指针。客户端编写者明白这个是很重要的,否则,很难发现浪费的大量的内存泄漏。从IDL文件里可以看到并确认那些参数是输出参数。强烈推荐一个方法一个客户端应该创建一个子程序用来经常施放结构的空间。成功和失败的无关性,服务器必须经常为输出参数返回健康的定义的数值。释放分配的资源是客户程序的职责。
注:如果返回的错误结果是任何的FAILED错误象E_OUTOFMEMORY,OPC服务器应该为所有的输出指针返回NULL(这是标准的COM行为),这个规则也应用于函数返回的指针组。通常,一个鲁棒型的OPC客户应该确认任何一个输出和输入/输出指针并优先用NULL来释放他们。
423标准的接口
每个COM说明书,所有的接口需要的方法都必须被实现。
每个COM说明书,任何可选择的支持接口必须存在接口实现的内部功能,甚至实现紧紧是一个返回E_NOTIMPL的存根。

424空串和空指针
这两个术语在以下被使用:他们不是同一个东西。一个NULL指针是一个有错误的指针0这个指针可能导致使用异常。一个NUL串是一个问题指针,他指向一个是NUL字符的字符数列。如果NULL串从一个方法里作为输出参数被返回的话他必须被释放。否则的话包含该指针的内存就会丢失。还要注意一个NULL指针不能通过一个输入字符窜参数传递,因为受COM聚合的限制。在这种情况下一个指向NULL的字符串应当作为省略的参数被传递。无论如何,NUL
串在本说明里被使用.C#没有NUL指针和NUL串的指针.4.2.5返回的数列.
你会注意在IDL文件使用的用从指针到指针组成的Size_is(,dwCount函数的语法.他表示返回的条目时一个指向一定类型的实际数组的指针,不是指向一定类型的指针数组的数组指针.这个可以使服务器和客户使用聚合,创建,和数据访问更简单.
4.2.6缓冲器数据,设备数据和时间戳
在这个说明书里大部分的术语CACHEDEVICE被抽象化了.,那就是缓冲器和设备数据的读取会完全影响完全方式定义的接口行为的描述。这些功能的具体实现细节没有在这个说明书里做详细的描述。事实上,很多服务器会把数据读进各种缓冲器里。很多客户程序也会去通过一些接下来讨论的机制来从这些缓冲器里读数据。对设备的数据访问希望慢一点和首先用作诊断和特殊的关键操作。
缓冲器应该反映最新的数据的值,质量和时间戳。时间戳应该反映设备获得的值和质量的时间。或者服务器更新和使值和质量在缓冲器里有效的时间。注意如果设备每隔10秒检查数值的话那么期望的数值时间戳会每隔10秒钟更新一次。因此时间戳反映服务器知道的准确的时间
系统接口的物理设备是否基于例外会真的被忽视。假设知道(a)一个例外的设备每隔0.5秒检查一次,(b同一个设备的通信是完好的(c三分钟以前设备更新条目FIC101的值为1.234。在这种情况下从缓冲器里读到的值将会是1.234和很重要。从这个数值返回的时间戳将会是当前时间(0.5秒内)因此知道条目的值事实上是0.5秒前的值1.234
428异步和同步接口比较
架设很多客户程序希望访问暂存器的数据,会有几种方法客户用来访问服务器数据。
可以用同步方式从缓冲器里读数据。这种方式适合很简单的一些客户程序,只读一些相当小数量的数据和最大效率不予考虑。这种方式操作的客户程序本质上是对服务器上已经存在的扫描的一种复制。
可以用IOPCDataCallback预订缓冲器里的数据,这个是客户程序被推荐使用的一种方式,因为它会消耗CPU和网络资源最少。429活动标志,死区,和更新速率
这些组和条目的属性用来降低客户和服务器的消耗的资源。在稍后的GROUPS里会做详IOPCDataCallback的访问频率。4210错误和返回代码
OPC说明书描述了OPC服务器实现的和OPC客户应用程序依靠的接口和相应的行为。这个说明书的OPC错误代码摘要一章中包含了一个OPC详细的错误列表和返回代码。在每个被描述的方法后面都有一个所有可能出现的OPC错误代码也包括最平常的OLE错误

代码。客户程序有可能遇到额外的错误代码象RPC和实际的安全代码,他们应该做好预处理这些代码的工作。
在两种情况下(读/写)允许服务器返回开发商特殊的错误代码。这些代码被传递给GetErrorString方法。以后会详细讨论这个。
所有的情况下E错误代码表示FAILED类型的错误和S错误代码表示有局部成功。
4.2.11启动问题
当条目被加到组里面以后,OPC服务器会花费一些时间为这些条目获得一些实时的值。在这些情况下,客户端就会完成一次读缓存,或者建立一个AdviseSink或者基于预约好的连接点,和在这些建立在预约上的值可用之前对他们进行一次刷新。你会在后边对预约的讨论中你会看到,在一个组中会期望有一个包含所有数值刷新的回调函数。当条目被加到组中的OPC_QUALITY_WAITING_FOR_INITAL_DATA(20屏蔽的OPC_QUALITY_BAD任何客户端对这个组的操作会被表现为好和坏的质量评估。如果服务器在添加条目时不能迅速判断数据类型,它就会返回VT_EMPTY的规范数据类型。注意在同步读和异步2操作时,服务器可能返回开发者定义的特殊的错误信息来提示开发者的一个特殊的错误例如服务器初始化错误
4.2.12VARIANT数据类型和通用性
为了增强通用性,推出了下边的规则和建议。一般的建议:
RARIANT类的VT_I2,I4,R4,R8,CY,DATE,BSTR,BOOL,UI1还有这些类型的单数组类希望能被经常作为通用类型使用。(部分地因为它们是VB里的合法类型)。推荐无论什么情况下客户端请求的数据为这些数据类型,服务器也同样返回的是这些数据类型的数据。
如果想对一些扩展的数据类型进行使用在服务器和客户端都是同一个开发者开发的软件中进行不可移动的数据返回到客户端,为了通用性这些东西尽量少用。

在实际用于中法相一些服务器在条目加入和删除的时候不能断定不活动的数据类型(例如那些远程和本地的连接)。作为不活动的数据类型返回的VT_EMPTY类型在这些服务器中已经得到了实践。当数据可用和他们的实际数据类型可以断定的时候,这些服务器会保持请求的数据类型和将以请求的数据类型返回数据,推荐客户端处理AddItemsValidateItems返回的初始的VT_EMPTY
通用规则:
在推荐的数据类型之上服务器被允许维护和返回任何合法的通用数据类型(任何的对VT_flags的合法更换)
客户端被允许请求在推荐的数据类型之上的Variant数据类型
服务器应该准备以极好的方法来处理那些不能被转化为他们被请求类型的数据。那就是,

他们不应该失效,或返回错误的结果,或丢失内存,就像提到的,任何地方它们都可能返回各种错误包括微软VariantChangeType.返回的错误类型。
客户端应该随时准备处理那些不能处理请求数据类型的服务器。也就是,当错误被返回时它们不应该失效和丢失内存。
请求VT_EMPTY(习惯被表示返回他自己的通用类型)的客户端应该同样准备处理任何被返回的类型。也就是,即使发现他们不能用或不能显示返回的数据。他们应该正确释放数据。和正确地给用户提示一个不能被客户程序识别的数据类型被返回了。
Variant的实数值(VT_R4,VT_R8)将包含IEEE浮点数。标注,IEEE标准浮点数包含无数值的值(NAN)以这种格式存储。即使这些值相当少用,它们也是允许使用的。如果这些值被返回,就需要QUALITY标志位被设置为OPC_QUALITY_BAD
虽然IEEE标准允许NAN被存储到VT_R4VT_R8格式,这些值仅可用目标条目的额外的固定格式来进行读写。他们不能与其他类型进行相互转换。当这些数值被读时QUALITY标志为必须被服务器返回OPC_QUALITY_BAD。如果这些值被写时QUALITY标志必须被客户提供位OPC_QUALITY_BAD,一些特殊的服务器是否返回和接受这些值就看服务器这方面是否特殊说明了。
数据转换的公认额外规则
OPC服务器必须支持至少是下面的在规范的和请求的数据类型之间的转换。读和写必须同步。注意早期的版本实现这个功能是同沟在COM库中的
VariantChangeEx()来提供的。在下面的表中,标志为OK的时可用的,其他的能与不能与数据源的特殊性有关。
象在这个规范的其他地方注释的一样,客户程序都会明确一个localID来使用。服务起会把他传递给VariantChangeTypeEx(在所有的会话中使用。注意有喜恶客户会通过控制面板的区域设置覆盖默认的区域设定。例如,英文的设置可能是MM/DD/YYYY/MM/DD也有其他的格式。显然03/02/01在这种情况下是含糊不清的。终端用户应该确保对给定的localID在网路上不同的机子上是兼容的。



标注::1转换的死亡,例如,从I4I2或者从R8R4是允许的,即使溢出了也是可能的。如果溢出出现了,一个溢出错误值就会被返回,这种情况下读的质量被设定为BAD这种情况下写的目标值不会改变。
2注意内部的存储类型VT_BOOL是短整数,必须得值为VARIANT_TRUE0xFFFF-例如-1‟被保存为短整数类型)和VARIANT_FALSE0。当转换成布尔型时任何非零值被转换VARIANT_TRUE,布尔型向其他有符号类型转换,VARIANT_TRUE转换为-1或者-0.1无符号类型的话是转换为最大值。提醒,OPC标准的转换是从布尔到BSTR不是真和假分别是0-1,入宫服务器选择转换为真和假必须告诉本地机器原因。同样应该注意标准的C++关键字true当转换为其他类型的值时总是被转换为1。因此当设定真到boolVal时,总是被设定为VARIANT_FALSEVARIANT_TRUE3注意日期类型是作为双精度数存储的,整数部分是日,小数部分是时间,对日期来说0.018991230例如,190011日是2.02001124日是37229.0对时间来说,小数部分是从午夜0点开始计算来表示的,(例如0.2500表示上午6000.400表示上午93600)这个小数是不会受到日期的符号影响的,无论是正值和负值都是从午夜0点算起的。例如-1.418991229日上午93600这些转换是VariantChangeTypeEx(支持的。一般当转换到UI1I1UI2或者I2时总会发生溢出错误。当日期转换到整数时作为时间的小数部分会丢失。
4串无意转换到目标类型时BSTR转换会给出DISP_E_TYPE错误。例如1234转换为日和数字类型(例如UI1会产生溢出)“12/04/2001”转换到DATE(依据地区)不会转换为任何数字类型,ABCD不转换为任何其他类型。
5从非整数到整数的变化必须考虑小数第一位大于0.5的进位。例如1.6要进位到2-1.6要进位到-2。除此之外,一般是期望小数大于或等于0.5。然而,客户端和服务器端的开发者要注意VariantChange函数是不支持等于0.5进位规律的。实际应用的经验是浮点数和双精度数可以等于0.5进位的其他的会丢弃。等于0.5时为了一致无论进位和丢弃都要接受。6要记住,货币类型时作为扩展的8字节整数形式存储的。小数点后为四位的精度。例如12.34保存为123400
7在有符号和无符号整数之间转换的是时候,如果要求的类型不能对存放数值一个溢出就会产生。(例如:I1=-1转换为UI1时就会溢出,UI1类型的255转换为I1时就会溢出)然而,一些通过ChangeVariantType进行的类似的转换是不正确的。特别是转换相同位的数据,是不不会检测溢出的。例如一个I1类型的-1转换为UI1255,相似地一个UI1型的254转换为I1类型为-2。对I2I4也是一样的。通过这个函数这样的行为是不正确的。客户端的程序员和用户应该特别注意很多服务器是使用这个函数的,会出现这种现象的。推荐纠正这些但是不时需要OPC都一样。对不同位数的类型的转换这个函数是正确的8各种类型之间的转换可能失去精度,(例如从R8R4,R4I4I2)但是不会有溢出,和返回的质量是GOOD
注意ChangeVariantTypeEx不能应用于数组,支持数组的服务器必须有另外的代码来实现逻辑转换。对数组说当任何元素出现了转换错误,第一错误检测就会返回DISP_E_OVERDISP_E_TYPE,如果读质量被置为BAD,一个空的变量就会返回。对写,如果任何一个元素出现了错误那么没有一个元素会被更改,第一错误产生就会返回位置区域和区域ID
就像这个文档中提到的一样,服务器的对位置区域的适应对开发者不是是什么难度。然而这些问题需要讨论一下。位置区域不仅地字符串错误和信息重要。他对值作为字符串读写同样重要。数字,日期,货币等都的格式都依靠位置。一般会期望客户端会查询服务器对位置区

域的支持然会使用SetlocalID()或者相似的函数来选择一个。注意:
注意:在有些DataAcess的使用状况里,组的LocaleID会根据服务器的需要,通过IOPCCommon::SetLocaleID(.
能被设定的与默认的LocaleID不一样
客户端会希望服务器返回已经根据LocaleID转换和格式过的字符串,为了使这些数据对组的影响最小。这些字符串包括那些因为是VARIANT类型要转化为需要的数据类型的。服务器会用函数VariantChangertypeEx(很轻易的完成这些变换。
同样地任何OPC服务器对象会希望客户端会传递一些根据客户端已经告诉服务器要对对象使用的LocaleID而被转换和格式过的字符串。这些包括BSTRs变成服务器需要转换的活动的数据类型VARIANT。同样服务器能用VariantChangertypeEx(来实现这个功能。例如如果客户端告诉服务器当从一个特殊的对象读数据时要返回德语格式的字符串。那么自然服务器希望当客户端向服务器端的对象写数据时要传送德语格式的字符串。
4.2.14条目的属性概览
这些属性能被合法的IOPCItemProperties接口和被方法IOPCBrowse::GetProperties访问,这些接口被客户用来浏览与ITEMID有关的可用属性和读这些属性的当前数值。有有些方面与EnumItemAttributesSyncIORead函数提供的功能相似。这些接口有两个重要的区别a要求很容易使用。b不可用作大量的数据访问。
既使期望允许程序用来很容易地浏览和读取特殊条目的额外详细的信息。这个接口的设计是基于如多条目是由表示相关的值类似工程单位区间,描述,报警状态得条目组成的假设而设计的。比如系统会自己创建一个对当前复杂对象(PID控制器,计时器,计数器等)的一个记录,这些记录条目会有些属性。(当前值,上限,下限,描述等)结果,这些方法允许灵活的,方便得方式去浏览,定位和读取相关的信息,而不用在底层做任何特殊的结构设计。
不用创建和管理任何OPCGroups,这些信息同样允许被读写。属性怎样与ItemIDs关联的
如多情况下希望能这些属性通过ItemIDs被访问例如FIC101.HI_EU,FIC101.DESC,FIC101.ALMSTAT,等这些相关的ITEMIDs可能在一个OPCGroup.里被使用。这个方法提供一个方式来决定是否这个可选择的访问方法用来访问属性,如果要访问大量的信息被有效的获取的话。
象上面所述的一个系统(例如,一个有内部的记录组成的系统)有可能也会暴漏一个高等级的地址空间以作为分支的A100和作为子项的A100.CV,A100.CV,A100.SP,A100.OUT,A100.DESC的形式给OPC。也就是说,一个条目的被记录的属性通常会被映射进一个较低及的ITEMIDS.另外一种被认为是这样的方法是象A100,有一些属性做为分支的的节点会在OPC浏览器里被显示,和一些属性作为子节点在OPC浏览器里被显示。
注:A100条目可能实际上被嵌入一个高层次的Plant.Building.Line级别,然而这时我们不考虑,这个文章中没有涉及这些。这个方法的目的是通过以下功能:
1被给出一个任何一个与属性相关的数字的ITEMID(象A100.CVA100.DESC或甚至A100,返回一个其他相关属性的清单。
2.给一个条目属性的ID清单,返回一个当前数据值的清单。
3.给一个条目属性ID的清单,返回一个可以在调用AddGroup里使用的条目清单。

需要注意的是前面的8个属性(OPC的特殊被设定为1的属性)是特例的如果这些条目被加的一个OPC组里他们表示数据会存在OPCServer里或者不能表示在一个底层系统实际的变量记录被命名的属性。
在这个设定里的一些属性与OPCITEMATTRIBUTES结构的子项保持一致。这些包括CanonicalDataType,AccessRights,EUTypeandEUInfo这些属性,还有那些表示数值的,时间戳的,质量的属性应用于一个单独的和可用的条目(一个被大于99的属性ID表示)因此,OPC的被设定为1的属性在接口的这个方法的行为不一样。参考每个方法的行为的描述定义。典型的使用
这些方法的典型的客户应用可能用来获取一个条目甚至用那个过IopCBrowse来获得一个子项或者通过被使用者直接输入到一个编辑框。如果使用合法的IOPCItemProperties,接着那个条目会被传递到QueryAvailableProperties(。产生的结果会展示给用户。他会从列表里选择他想要看到的属性。客户程序会把这个设定传给GetItemProperties(来得到一个数据的快照。客户程序可以选择把这个设定传递给LookupItemIDs何使用条目设定的结果来创建个OPCGroup来反复的获得数据。如果使用IOPCBrowse::GetProperties那么这个方法能被用来或其这个信息。例子
这仅仅是个例子。不打算在任何服务器的实现上用任何特殊的结构。
一个典型的OPC条目可能是FIC101.CV这个可能是表示一个变量的当前的值,或者是被叫做是FIC101的功能块。这个功能块一般有一些其他的属性和他有关,例如,工程单位,循环描述等。这个功能块肯能也会有一些报警的界限和状态,设定值,调整参数和文档交叉索引一样,维护信息,帮助显示,默认的操作显示和一个其他属性无限的设定。所有的这些属性都通过他们与FIC101的关联而相互有关联。这个接口提供了一个方便的快捷方式来访问这些相关的属性。
例如一个模拟量输入的功能函数块可能有一个值,高低限值和状态。他们可能具有F100.CV,F100.HI,F100.LO,F100.STATIOPCItemProperties::QueryAvailableProperties或者IOPCBrowse::GetProperties都会可能产生相同的结果。例如,一个4个属性ID的列表(另外8保留个属性ID)每一个属性都保持一致。相同的属性ID有可能被返回无论ItemID是否被传递。传递这4个属性IDIOPCItemProperties::LookupItemIDsIOPCBrowse::GetProperties将也会每次都给出ItemIDsIDIOPCItemProperties::GetItemProperties或者IOPCBrowse::GetProperties也会产生相同的特性的值。一个不同的东西会是,传递8个保留的属性ID中的任何一个都会获得与特殊ItemID有关的信息(例如,会返回与作为GetItemProperties的第一个参数传递特殊的ItemID有关的数值,质量和时间戳等
一个MMI包例如会用这些方法允许用户来表达高低工程单位值用来缩放一个用来表示数据的棒图。
注意由于这些联系可能太多了和也可能是循环的,一个客户应用程序不希望自动地把他们都做出来。不期望这些属性的浏览是分层的。
另外的一个相似的例子可能是一个功能块例如每个对象都由各种属性组成的一个高端PLC里的计时器或者计数器属性ID
服务器需要给属性分配双字的ID代码。这个允许客户端很容易地管理它想要访问的属性列OPC

OPCITEMATTRIBUTE的返回来区分的那些属性,建议的设定是对大多数服务器都是通用的,开发者自定义的是包含适合的额外的属性。对头两个属性ID是固定的,用户自定义的属性使用的ID应该超过5000.OPC属性设定
这时一套属性ID对大多是服务器都一样的,提供一致的属性的服务器必须使用一下列表中ID编码。等他这些属性的代号在OPCPropsH文件里提供的有(查看这个文档的附录)再次注意这个接口不期望允许对大量数据的有效访问。
服务器的LocaleID(通过IOPCCommon::SetLocaleID设定)被服务器用来定位返回的数据条目字符串的格式。字符串的描述不会被重新改变位置区域。
ID设定为1---OPC特殊的属性---这些包括对系统来说直接与OPC服务器有关信息。
P31
ID(编号)返回的VARIANT格式的数据类型标准的解释1VT_I2条目的规定类型,条目变量以I2类型保存2<各种类型>条目的数值,VARIANT
注意返回的数据类型有以上的条目规定类型决定,并以来条目本身,这个像在读取设备数据的时候会表现出来。3VT_I2条目的品质
OPCQUALITYI2格式存在),这个像在读取设备数据的时候会表现出来。4VT_DATE条目的时间戳
FILETIME格式转换来的。这个像在读取设备数据的时候会表现出来。5VT_I4条目的访问权限。
OPCACCESSRIGHTSI4格式存在)6VT_R47VT_I48VT_BSTRVT_ARRAY
9-99保留OPC将来使用
IDSet2ID设定是2)是推荐的属性,其实是多余的一个建议,这个对ITEM来说是最常用的属性,它也包括条目值的范围也被保留在将来其他的说明中会用到。想了解其他的新的ID设定的话请查询其它相关的基金会的说明。
OPC基金会的职能就是,如果你有一个属性看上去与下面描述的很像的话,建议你使用下面的描述肯ID通过接口来表述你的属性。
一个服务器能提供这些数值的任何子项(或者一个也不提供)

ID反回的数据类型,准确描述
100VT¬¬¬__BSTREU单位例如,DEGC或者GALLONS101VT¬¬¬__BSTR条目描述例如:蒸发6冷却剂温度
102VT__R8EU模拟量上限的表达时使用,在正常操作时的最大值,也在自动放缩一个棒图时会用到。例如:1400.0
103VT__R8EU模拟量下限的表达时使用,在正常操作时的最大值,也在自动放缩一个棒图时会用到。例如-200.0
104VT__R8仪表最高范围只有模拟量数据会用到,用来表达仪表返回的最大数值,例如9999.9
105VT__R8仪表最底范围只有模拟量数据会用到,用来表达仪表返回的最小数值,例如-9999.9
106VT_BSTR触点关闭标签,仅用来表示离散的数据,表示一个与这个触点有关的字符串,当它在关闭(非0)状态。例如:运行,关闭使能等。107VT_BSTR触点打开标签,仅用来表示离散的数据,表示一个与这个触点有关的字符串,当它在关闭(0)状态。例如:停止,打开非使能等。108VT_I4时区条目,当你获取他的数值时UTC时间戳和本地时间戳的分钟格式是有区别的,查看OPCGroupTimeBias属性,也可看WIN32TIMEZONEINFORMATION结构。109-199保留OPC将来使用

本文来源:https://www.2haoxitong.net/k/doc/558916566bec0975f565e28a.html

《OPC说明书--中文版.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式