OPC DA 中文版 翻译 点击:12938 | 回复:101



alou

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 107回
  • 年度积分:0
  • 历史总积分:410
  • 注册:2004年2月07日
发表于:2006-06-28 15:57:00
楼主
详细资料 请登陆 www.suntri.cn



zhang56742820

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 1回
  • 年度积分:0
  • 历史总积分:0
  • 注册:2007年10月07日
发表于:2007-09-26 10:19:00
61楼
这资料真的不差呀,请发一份完整的资料给我,谢谢啦
zhang56742820@163.com

houwen0

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 5回
  • 年度积分:0
  • 历史总积分:6
  • 注册:2007年9月27日
发表于:2007-09-27 17:13:00
62楼
请给我一份,谢谢!!!houwen0@163.com

eruter

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 7回
  • 年度积分:0
  • 历史总积分:10
  • 注册:2007年7月27日
发表于:2007-10-19 17:18:00
63楼
谁有没有《OPC Data Access Specification 1.0A》,发个参考参考,我有GE的OPC server1.0源代码,希望有文档结合看看,老是看2.05A感觉对不起来。
tangmimi@sohu.com

zzl19831018

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 1回
  • 年度积分:0
  • 历史总积分:1
  • 注册:2007年10月23日
发表于:2007-10-23 19:11:00
64楼
发我份吧
zzl831018@hotmail.com

冷咖啡

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 512回
  • 年度积分:0
  • 历史总积分:686
  • 注册:2006年5月07日
发表于:2007-11-15 16:23:00
65楼
麻烦来一份 chai1288@eyou.com 谢谢

jianchao

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 6回
  • 年度积分:0
  • 历史总积分:148
  • 注册:2007年3月19日
发表于:2009-01-02 10:53:32
66楼

您好:能不能给我也发一份,谢谢!   chaojianchao@126.com

刘起

  • 精华:0帖
  • 求助:1帖
  • 帖子:1帖 | 68回
  • 年度积分:0
  • 历史总积分:211
  • 注册:2008年10月26日
发表于:2009-01-04 20:20:32
67楼

您好:能不能给我也发一份,谢谢!

EMAIL:LSUIQ2008@YAHOO.CN

335769139@QQ.COM

translations581

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 10回
  • 年度积分:0
  • 历史总积分:0
  • 注册:1900年1月01日
发表于:2009-02-17 16:13:12
68楼

打包给我们下载吧! 谢了!

我们提供专业文档翻译,软件网站本地化,口译等服务,擅长领域包括技术文档翻译、市场文档翻译、财经法律翻译、合同标书翻译、医学文档翻译、专利文档翻译、投标文档翻译等。如有需要,请联系translations581@gmail.com, QQ:363696729, msn: translations581@hotmail.com

alou

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 107回
  • 年度积分:0
  • 历史总积分:410
  • 注册:2004年2月07日
发表于:2009-03-19 15:25:42
69楼

十分感谢大家的支持,我会继续发下去....

alou

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 107回
  • 年度积分:0
  • 历史总积分:410
  • 注册:2004年2月07日
发表于:2009-03-19 15:26:18
70楼
4.2.11 启动问题
当条目被加到组里面以后,OPC服务器会花费一些时间为这些条目获得一些实时的值。在这些情况下,客户端就会完成一次读缓存,或者建立一个AdviseSink或者基于预约好的连接点,和在这些建立在预约上的值可用之前对他们进行一次刷新。你会在后边对预约的讨论中你会看到,在一个组中会期望有一个包含所有数值刷新的回调函数。当条目被加到组中的同时,在这种条件下期望的行为就会被概括描写。这些条目的初始状态会设为被OPC_QUALITY_WAITING_FOR_INITAL_DATA(20)屏蔽的OPC_QUALITY_BAD。任何客户端对这个组的操作会被表现为好和坏的质量评估。如果服务器在添加条目时不能迅速判断数据类型,它就会返回VT_EMPTY 的规范数据类型。注意在同步读和异步2操作时,服务器可能返回开发者定义的特殊的错误信息来提示开发者的一个特殊的错误例如“服务器初始化错误”。

alou

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 107回
  • 年度积分:0
  • 历史总积分:410
  • 注册:2004年2月07日
发表于:2009-03-19 15:27:27
71楼

4.2.12 VARIANT 数据类型和通用性
为了增强通用性,推出了下边的规则和建议。
一般的建议:
RARIANT类的 VT_I2, I4, R4, R8, CY, DATE, BSTR, BOOL, UI1 还有这些类型的单数组类希望能被经常作为通用类型使用。(部分地因为它们是VB里的合法类型)。
推荐无论什么情况下客户端请求的数据为这些数据类型,服务器也同样返回的是这些数据类型的数据。


如果想对一些扩展的数据类型进行使用在服务器和客户端都是同一个开发者开发的软件中进行不可移动的数据返回到客户端,为了通用性这些东西尽量少用。

 
在实际用于中法相一些服务器在条目加入和删除的时候不能断定不活动的数据类型(例如 那些远程和本地的连接)。作为不活动的数据类型返回的VT_EMPTY类型在这些服务器中已经得到了实践。当数据可用和他们的实际数据类型可以断定的时候,这些服务器会保持请求的数据类型和将以请求的数据类型返回数据,推荐客户端处理AddItems和ValidateItems返回的初始的VT_EMPTY。


通用规则:
在推荐的数据类型之上服务器被允许维护和返回任何合法的通用数据类型(任何的对VT_flags的合法更换)

alou

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 107回
  • 年度积分:0
  • 历史总积分:410
  • 注册:2004年2月07日
发表于:2009-03-19 15:29:07
72楼

客户端被允许请求在推荐的数据类型之上的Variant数据类型


服务器应该准备以极好的方法来处理那些不能被转化为他们被请求类型的数据。那就是,他们不应该失效,或返回错误的结果,或丢失内存,就像提到的,任何地方它们都可能返回各种错误包括微软VariantChangeType.返回的错误类型。


客户端应该随时准备处理那些不能处理请求数据类型的服务器。也就是,当错误被返回时它们不应该失效和丢失内存。


请求VT_EMPTY(习惯被表示返回他自己的通用类型)的客户端应该同样准备处理任何被返回的类型。也就是,即使发现他们不能用或不能显示返回的数据。他们应该正确释放数据。和正确地给用户提示一个不能被客户程序识别的数据类型被返回了。


Variant的实数值(VT_R4,VT_R8)将包含IEEE浮点数。标注,IEEE标准浮点数包含无数值的值(NAN)以这种格式存储。即使这些值相当少用,它们也是允许使用的。如果这些值被返回,就需要QUALITY 标志位被设置为OPC_QUALITY_BAD。


虽然IEEE标准允许NAN被存储到VT_R4和VT_R8格式,这些值仅可用目标条目的额外的固定格式来进行读写。他们不能与其他类型进行相互转换。当这些数值被读时QUALITY标志为必须被服务器返回OPC_QUALITY_BAD。如果这些值被写时QUALITY标志必须被客户提供位OPC_QUALITY_BAD,一些特殊的服务器是否返回和接受这些值就看服务器这方面是否特殊说明了。

alou

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 107回
  • 年度积分:0
  • 历史总积分:410
  • 注册:2004年2月07日
发表于:2009-03-19 15:30:16
73楼
数据转换的公认额外规则
OPC服务器必须支持至少是下面的在规范的和请求的数据类型之间的转换。读和写必须同步。注意早期的版本实现这个功能是同沟在COM库中的
VariantChangeEx()来提供的。在下面的表中,标志为OK的时可用的,其他的能与不能与数据源的特殊性有关。

luoyan1984

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 5回
  • 年度积分:0
  • 历史总积分:1
  • 注册:2009年4月08日
发表于:2009-04-08 10:29:45
74楼

能发份给吗?我邮箱是:luoyan19841018@yahoo.com.cn

谢谢了。

liuyang198696

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 2回
  • 年度积分:0
  • 历史总积分:2
  • 注册:2009年5月02日
发表于:2009-05-08 16:40:01
75楼
您好,请问能给我一份吗?我现在很需要这个,谢谢。liuyang198696@126.com

alou

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 107回
  • 年度积分:0
  • 历史总积分:410
  • 注册:2004年2月07日
发表于:2009-05-16 09:24:48
76楼

象在这个规范的其他地方注释的一样,客户程序都会明确一个localID来使用。服务起会把他传递给VariantChangeTypeEx()在所有的会话中使用。注意有喜恶客户会通过控制面板的区域设置覆盖默认的区域设定。例如,英文的设置可能是MM/DD/YY 或YY/MM/DD 也有其他的格式。显然 03/02/01 在这种情况下是含糊不清的。终端用户应该确保对给定的local ID 在网路上不同的机子上是兼容的。

 

alou

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 107回
  • 年度积分:0
  • 历史总积分:410
  • 注册:2004年2月07日
发表于:2009-05-16 09:32:43
77楼
标注:: 1转换的“死亡“, 例如,从I4到I2 或者 从R8到R4是允许的,即使溢出了也是可能的。如果溢出出现了,一个溢出错误值就会被返回,这种情况下读的质量被设定为BAD,
这种情况下写的目标值不会改变。
2 注意内部的存储类型VT_BOOL是短整数,必须得值为VARIANT_TRUE(0xFFFF-例如‘-1’被保存为短整数类型)和VARIANT_FALSE(0)。当转换成布尔型时任何非零值被转换为VARIANT_TRUE, 布尔型向其他有符号类型转换,VARIANT_TRUE转换为-1,或者-0.1
无符号类型的话是转换为最大值。提醒,OPC标准的转换是从布尔到BSTR 不是真和假分别是0和-1,入宫服务器选择转换为真和假必须告诉本地机器原因。同样应该注意标准的C++关键字 true 当转换为其他类型的值时总是被转换为1。因此当设定真到boolVal时,总是被设定为VARIANT_FALSE或VARIANT_TRUE。
3,注意 日期类型是作为双精度数存储的,整数部分是日,小数部分是时间,对日期来说 0.0是 1899年 12 月 30,(例如,1900年1月1日是2.0 和 2001年12月4日是37229.0)对时间来说,小数部分是从午夜0点开始计算来表示的,(例如 0.2500表示上午6:00,0.400表示 上午9:36:00 ) 这个小数是不会受到日期的符号影响的,无论是正值和负值都是从午夜0点算起的。例如 -1.4 是1899年 12月29日 上午 9:36:00 这些转换是VariantChangeTypeEx()支持的。一般当转换到UI1,I1,UI2或者 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转换为UI1是255,相似地 一个UI1类型的254转换为I1类型为-2。对I2和I4也是一样的。通过这个函数这样的行为是不正确的。 客户端的程序员和用户应该特别注意很多服务器是使用这个函数的,会出现这种现象的。推荐纠正这些但是不时需要OPC都一样。对不同位数的类型的转换这个函数是正确的
8 各种类型之间的转换可能失去精度,(例如从R8到R4,从R4到I4或I2)但是不会有溢出,和返回的质量是GOOD
注意ChangeVariantTypeEx不能应用于数组,支持数组的服务器必须有另外的代码来实现逻辑转换。对数组说当任何元素出现了转换错误,第一错误检测就会返回(DISP_E_OVER 或DISP_E_TYPE),如果读质量被置为BAD,一个空的变量就会返回。对写,如果任何一个元素出现了错误那么没有一个元素会被更改,第一错误产生就会返回
位置区域和区域ID
就像这个文档中提到的一样,服务器的对位置区域的适应对开发者不是是什么难度。然而这些问题需要讨论一下。位置区域不仅地字符串错误和信息重要。他对值作为字符串读写同样重要。数字,日期,货币等都的格式都依靠位置。一般会期望客户端会查询服务器对位置区域的支持然会使用SetlocalID()或者相似的函数来选择一个。注意:

alou

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 107回
  • 年度积分:0
  • 历史总积分:410
  • 注册:2004年2月07日
发表于:2009-06-10 14:03:20
78楼
注意:在有些DataAcess的使用状况里,组的LocaleID会根据服务器的需要,通过IOPCCommon::SetLocaleID( ).
能被设定的与默认的LocaleID不一样
客户端会希望 服务器返回已经根据LocaleID转换和格式过的字符串,为了使这些数据对组的影响最小。这些字符串包括那些因为是VARIANT类型要转化为需要的数据类型的。服务器会用函数VariantChangertypeEx()很轻易的完成这些变换。
同样地 任何OPC服务器对象会希望 客户端会传递一些根据客户端已经告诉服务器要对对象使用的LocaleID而被转换和格式过的字符串。这些包括BSTRs变成服务器需要转换的活动的数据类型 VARIANT。同样 服务器能用VariantChangertypeEx()来实现这个功能。
例如 如果客户端告诉服务器当从一个特殊的对象读数据时要返回德语格式的字符串。那么自然服务器希望当客户端向服务器端的对象写数据时要传送德语格式的字符串。

alou

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 107回
  • 年度积分:0
  • 历史总积分:410
  • 注册:2004年2月07日
发表于:2009-06-10 16:01:52
79楼
4.2.14 条目的属性
概览
这些属性能被合法的IOPCItemProperties 接口和被方法IOPCBrowse::GetProperties 访问,这些接口被客户用来浏览与ITEMI D 有关的可用属性和读这些属性的当前数值。有有些方面与EnumItemAttributes 和SyncIO Read 函数提供的功能相似。这些接口有两个重要的区别a)要求很容易使用。b)不可用作大量的数据访问。
既使期望允许程序用来很容易地浏览和读取特殊条目的额外详细的信息。
这个接口的设计是基于如多条目是由表示相关的值类似工程单位区间,描述,报警状态得条目组成的假设而设计的。比如系统会自己创建一个对当前复杂对象(PID控制器,计时器,计数器等)的一个记录,这些记录条目会有些属性。(当前值,上限,下限,描述等)。
结果 ,这些方法允许灵活的,方便得方式去浏览,定位和读取相关的信息,而不用在底层做任何特殊的结构设计。
不用创建和管理任何OPCGroups,这些信息同样允许被读写。
属性怎样与ItemIDs 关联的
如多情况下希望能这些属性通过ItemIDs 被访问 例如FIC101.HI_EU, FIC101.DESC, FIC101.ALMSTAT, 等 这些相关的ITEMIDs 可能在一个OPCGroup. 里被使用。这个方法提供一个方式来决定是否这个可选择的访问方法用来访问属性,如果要访问大量的信息被有效的获取的话。

alou

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 107回
  • 年度积分:0
  • 历史总积分:410
  • 注册:2004年2月07日
发表于:2009-08-09 11:42:22
80楼
象上面所述的一个系统(例如,一个有内部的记录组成的系统)有可能也会暴漏一个高等级的地址空间以作为分支的A100和作为子项的A100.CV, A100.CV, A100.SP, A100.OUT, A100.DESC的形式给OPC。也就是说,一个条目的被记录的属性通常会被映射进一个较低及的ITEMIDS. 另外一种被认为是这样的方法是 象A100,有一些属性做为分支的的节点会在OPC浏览器里被显示,和一些属性作为子节点在OPC浏览器里被显示。
注:A100条目可能实际上被嵌入一个高层次的Plant.Building.Line 级别,然而这时我们不考虑,这个文章中没有涉及这些。
这个方法的目的是通过以下功能:
1. 被给出一个任何一个与属性相关的数字的ITEMID(象 A100.CV或A100.DESC或 甚至A100),返回一个其他相关属性的清单。
2. 给一个条目属性的ID清单,返回一个当前数据值的清单。
3. 给一个条目属性ID的清单,返回一个可以在调用AddGroup里使用的条目清单。
需要注意的是前面的8个属性(OPC的特殊被设定为1的属性)是特例的 如果这些条目被加的一个OPC 组里他们表示数据会存在OPCServer里 或者 不能表示在一个底层系统实际的变量记录被命名的属性。
在这个设定里的一些属性与OPCITEMATTRIBUTES结构的子项保持一致。这些包括CanonicalDataType, AccessRights, EUType and EUInfo,这些属性,还有那些表示数值的,时间戳的,质量的属性 应用于一个单独的和可用的条目(一个被大于99的属性ID表示),因此,OPC的被设定为1的属性在接口的这个方法的行为不一样。参考每个方法的行为的描述定义。
典型的使用
这些方法的典型的客户应用可能用来获取一个条目甚至用那个过IopCBrowse来获得一个子项或者通过被使用者直接输入到一个编辑框。如果使用合法的IOPCItemProperties,接着那个条目会被传递到QueryAvailableProperties()。产生的结果会展示给用户。他会从列表里选择他想要看到的属性。客户程序会把这个设定传给GetItemProperties ()来得到一个数据的快照。客户程序可以选择把这个设定传递给LookupItemIDs何使用条目设定的结果来创建个OPCGroup来反复的获得数据。 如果使用IOPCBrowse::GetProperties 那么这个方法能被用来或其这个信息。
例子
这仅仅是个例子。不打算在任何服务器的实现上用任何特殊的结构。
一个典型的OPC条目可能是FIC101.CV,这个可能是表示一个变量的当前的值,或者是被叫做是FIC101的功能块。这个功能块一般有一些其他的属性和他有关,例如,工程单位,循环描述等。这个功能块肯能也会有一些报警的界限和状态,设定值,调整参数和文档交叉索引一样,维护信息,帮助显示,默认的操作显示和一个其他属性无限的设定。所有的这些属性都通过他们与FIC101的关联而相互有关联。这个接口提供了一个方便的快捷方式来访问这些相关的属性。
例如一个模拟量输入的功能函数块可能有一个值,高低限值和状态。他们可能具有F100.CV, F100.HI, F100.LO, F100.STAT这样的条目。把这些条目传递给IOPCItemProperties::QueryAvailableProperties 或者IOPCBrowse::GetProperties都会可能产生相同的结果。例如,一个4个属性ID的列表(另外8保留个属性ID)每一个属性都保持一致。相同的属性ID有可能被返回无论ItemID是否被传递。传递这4个属性ID给IOPCItemProperties::LookupItemIDs 或 IOPCBrowse::GetProperties将也会每次都给出同样的结果因此他会返回这里提到的ItemIDs。传递这些属性ID给IOPCItemProperties::GetItemProperties 或者 IOPCBrowse::GetProperties也会产生相同的特性的值。一个不同的东西会是,传递8个保留的属性ID中的任何一个都会获得与特殊的ItemID有关的信息(例如,会返回与作为GetItemProperties的第一个参数传递特殊的ItemID有关的数值,质量和时间戳等
一个MMI包 例如会用这些方法允许用户来表达 高低工程单位值用来缩放一个用来表示数据的棒图。
注意由于这些联系可能太多了和也可能是循环的,一个客户应用程序不希望自动地把他们都做出来。不期望这些属性的浏览是分层的。
另外的一个相似的例子可能是一个功能块例如每个对象都由各种属性组成的一个高端PLC里的计时器或者计数器
属性ID
服务器需要给属性分配双字的ID代码。这个允许客户端很容易地管理它想要访问的属性列表。这些属性被分三系列(一些是分层的)。OPC固定的设定包含了通过OPCITEMATTRIBUTE的返回来区分的那些属性,建议的设定是对大多数服务器都是通用的, 开发者自定义的是包含适合的额外的属性。对头两个属性ID是固定的,用户自定义的属性使用的ID应该超过5000.
OPC 属性设定
这时一套属性ID对大多是服务器都一样的,提供一致的属性的服务器必须使用一下列表中的ID编码。等他这些属性的代号在OPCProps。H文件里提供的有(查看这个文档的附录)
再次注意 这个接口不期望允许对大量数据的有效访问。
服务器的LocaleID(通过IOPCCommon::SetLocaleID设定)被服务器用来定位返回的数据条目字符串的格式。字符串的描述不会被重新改变位置区域。
ID 设定为1 ---OPC 特殊的属性---这些包括对系统来说直接与OPC服务器有关信息。

热门招聘
相关主题

官方公众号

智造工程师