工业实时数据采集传送软件开发设计_第1页
工业实时数据采集传送软件开发设计_第2页
工业实时数据采集传送软件开发设计_第3页
工业实时数据采集传送软件开发设计_第4页
工业实时数据采集传送软件开发设计_第5页
已阅读5页,还剩66页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

.OPCDataAccessCustomInterfaceSpecificationIOPCServer:GetStatus<>formoredetails.Whenyouaccessthisproperty,youwillgetthevaluethattheautomationserverhasobtainedfromthecustomserverviatheGetStatus<>interface.

AnerroroccursiftheclienthasnotconnectedtoaDataAccessServerviatheConnectmethod..ExampleDimServerStateAsLong

ServerState=AnOPCServer.ServerStateLocaleIDDescription<Read/Write>Thispropertyidentifiesthelocale,whichmaybeusedtolocalizestringsreturnedfromtheserver..ThisLocaleIDwillbeusedbytheGetErrorStringmethodonthisinterfaceSyntaxLocaleIDAsLongRemarksItshouldalsobeusedasthe‘default’LocaleIDbyanyotherserverfunctionsthatareaffectedbyLocaleID.AnerroroccursiftheclienthasnotconnectedtoaDataAccessServerviatheConnectmethod.Example‘<gettingtheproperty>:

DimLocaleIDAsLong

LocaleID=AnOPCServer.LocaleID

‘<settingtheproperty>:

AnOPCServer.LocaleID=LocaleID1介绍1.1背景用于多种数据源的一种标准。不管是在工厂车间,还是在控制室内的数据库或者设备的有机规范。标准机构将包括针对允许的VisualBasic应用程序,以及其他的自动化功能的应用程序进行通信,用在上述指定的数据源的标准自动化的接口。制造商需要从车间访问数据,并将其整合到他们现有的采集系统。制造商必须能够利用现成的工具〔SCADA软件包,数据库,电子表格等,以组建一个系统,来满足他们的需求。关键是开放的,有效的通信架构集中数据访问和数据的不同类型。我们通过架构并指定一个标准的自动化接,OPC数据访问自定义接口,方便了使用自动化接口来访问工厂底层数据的应用程序来解决这方面的需求。1.2目的我们需要的是用于自动化应用到从像装置或数据库中的任何数据源访问数据的常用方法。OPC数据访问自动化定义了一个标准,其中自动化应用程序可以访问过程数据。该接口提供相同的功能的自定义界面。鉴于使用自动化来访问其他软件环境〔如:RDBMS,MSOffice应用程序,WWW对象,该接口已针对缓解应用程序的开发,而不消除自定义接口定义的功能。下图显示了一个自动化客户端调用到使用"包装"DLL的OPC数据访问服务器。由服务器和客户端所需的自动化接口提供的自定义接口之间的这种包装转换。需要注意的是,一般的自动化客户端与自动化服务器之间的连接是"在线连接",而自动化服务器和自定义服务器之间的连接可以是在工艺,本地或远程。1.3适用范围该文件规定了OPC规范的1.0版本中指定的OLE自动化接口的修订版。这些修订最重要的是:•使界面更容易由VisualBasic程序员使用•运用VisualBasic的新功能的优势〔如事件•允许创建一个共同的包装DLL这可以通过所有的供应商共享本文假设读者熟悉设置在OPC数据访问自定义接口规范的信息。该文提供的OPC功能的概述以及各种功能行为的详细描述。1.4参考资料克雷格Brockschmidt,内部OLE,第二版,微软出版社,华盛顿州雷德蒙市,1995年。微软系统杂志,Q&A,1996年4月,第89-101。OLE自动化编程参考,微软出版社,华盛顿州雷德蒙德,1996。OLE2编程参考,卷.1,微软出版社,华盛顿州雷德蒙市,1994年。OPC数据访问自定义接口标准,2.0版,1998OPC基金会。1.5读者此规范是为OPC自动化客户端所需要的OPC数据访问自定义接口的开发的参考材料。开发人员将需要一些基本的自动化概念和一些术语知识。2构架设计的基本目标是,这个接口是通过自定义接口提供的功能对现有的OPC数据访问自定义接口的服务器提供一个方便的自动化机制。2.1功能要求•自动化接口提供了几乎所有的OPC数据访问自定义接口的必需和可选接口的功能。自动化接口一般不支持在该自定义接口做同样的方式和可选功能。如果底层的自定义接口省略了一些可选功能,那么相应的自动化功能和属性将在此文档后面详细描述的一些合理的默认行为表现出来。•该接口完全支持VC++和VisualBasic5.0。他们允许其具有一个OLE自动化接口〔如VBVC++,并启用VB应用程序根据各应用程序的限制来访问OPC接口的任何应用程序。•本说明书中描述的界面,以一个单独的包装来开发,以适应VBScript和Java脚本的需求。2.2OPC自动化服务器对象模型OPCOPC服务器OPC组对象〔集合OPC项对象OPC项OPC组OPC浏览器图2-1自动化对象层次对象名说明OPC服务器OPC服务器对象在使用其他OPC对象前必须生成。OPC服务器自动含有一个OPC组集合对象,并可在其基础上生成一个OPC浏览器对象OPC组集合OPC服务器中添加的所有的OPC组集合。OPC组OPC组对象是用于组的状态管理以及利用项集合为单位的数据访问。OPC标签集合在对OPC组中添加的所有的OPC标签集合。OPC标签含有OPC标签的定义,现在值,状态,以及最后更新时间等信息对象。OPC浏览器用于浏览OPC服务器的名称空间对象。2.3OPC数据访问自动化对象模型该OPCServe对象提供了一种以一组数据源来〔读/写访问或通信,。在该服务器上执行可用资源的功能。一个OPC自动化客户端连接到OPC自动化服务器的通信,通过这里所描述的自动化对象提供功能的基础数据源〔如:OPC数据访问自定义服务器。该OPC服务器提供了一个〔OPCGroups自动化集合对象来保持OPCGroup对象的集合。该OPCGroup对象允许客户组织他们想要访问的数据。一个OPCGroup可作为一个单元激活和去激活。一个OPCGroup还提供了一种方法为客户端"订阅"项目的列表中,以便它可以发生变化时被通知。该OPCGroup对象提供OPCItems的OPCItem集合。该OPCItem对象提供的基础数据源中单个数据项的连接。2.4数据同步一个要求,即VB的客户端能够读取或接收数据,使得所述值,质量和时间戳信息保持同步。基本上,客户端需要得到保证,该数据的质量和所述时间戳的值匹配。如果客户端获得并且使用任何方法读取它的值,时间戳和质量属性将与对方同步。如果客户端通过注册DataChange事件获得的数据,则该值,时间戳和质量将是同步的事件处理程序的范围之内。如果客户端混合这两种方法就不可能实现客户端,以保证该项目的属性是完全同步的,因为它改变了客户机访问的各种属性和时间之间可能发生的事件。2.5异常和事件简述2.5.1异常这里描述的大多数属性和方法与OPC定制服务器通信。在OLE自动化,有没有简单的方法访问属性时返回一个错误?解决这一问题的最佳方式是自动化服务器,如果基础数据源中发生这样的错误产生异常。这意味着客户端需要具有异常逻辑就位来处理错误。设置属性时发生的错误是使用标准的VisualBasic错误对象报告。2.5.2事件自动化接口支持被提供用VisualBasic5.0事件通知的机制。自动化服务器响应异步刷新,异步读取和写入异步方法调用触发的事件。此外,自动化服务器根据客户端规范数据变化时触发事件。实施自动化客户端有能力处理这些事件。2.6数组按照惯例,OPC自动化接口假设数组是基于1。如果一个数组传递给一个函数,比计数或Items的参数时,只计算或Items的元素将被使用,开始于索引1。这仅适用于在自动化接口中的职能和活动参数。这不适用于项目值,其中该项目的值的数据类型本身是一个数组。为了避免错误故建议VB代码使用"OptionBase1"。2.7集OLE自动化集合是支持计数,项目,和隐藏属性称为_NewEnum对象。具有这些特性的接口的一部分的任何对象都可以称为集合。在VB中,一个集合可以使用两种语言迭代。第一种方法明确地使用次数和项目索引集合的元素。ForI=1Toobject.Count

element=object.Item<I> ‘or…element=object<I>

NextI通过使用隐藏_NewEnum功能的可用项目第二种方法迭代:ForEachelementInobject

‘dosomethingwithelement

Nextelement在对于迭代的集合中的每个方法比显式Item方法更快。产品还可以用于访问特定索引,如第〔3。它并不需要被一个循环内使用。2.8可选参数可选参数由关键字"可选"表示。可选参数可以从一个方法调用,如果省略默认行为是可以接受的。OLE自动化要求,可选参数的Dim'd为Variant,虽然他们可能持有一个字符串,数组,等等。2.9参数方法方法参数被假定为通过byval除非指定要为byref的byref参数得到填充并由该方法并传回。2.10库类型VB采用OPC自动化类型库定义以下接口。确保〔在VisualBasic5.0属性|引用了"OPCAutomation2.0"检查。3关于OPC数据访问自动化包装DLLOPC基金会提供的数据访问自动化接口OPC基金会成员提供了一个自动化接口,OPC数据访问自定义接口服务器使用的参考样本。参考样本是作为一个完整的DLL与VisualC++源代码。供应商可以直接提供DLL和他们的产品。选择供应商修改源代码,甚至只是建立从源代码〔不变之前包括或运送DLL必须做到以下几点。OPC自动化DLL的名字必须从OPCDAAuto.dll更改为一个特定供应商的唯一的名称。OPC自动化IDL〔opcauto.idl文件的名称应改为一个特定供应商的唯一的名称。在IDL文件中的helpstring〔"OPCAutomation2.0"必须改变,以反映您的特定供应商的OPC自动化接口。这是显示在自动化类型库的名称。使用您的供应商构建自动化的OPC接口DLLVisualBasic应用程序将包括DLL使用类型库。所有的GUIDIDL文件必须改为使用GUIDGEN工具生成的新的工具。这是为了防止供应商建立自动化界面库被混淆内置自动化库或OPC基金会提供的自动化库的另一个供应商。卖方为鼓励不改变现有的自动化接口。如果附加的功能是理想的,一个新的对象和接口应该被添加,并应复制将被加入到现有的对象的所有功能。OPC基金会还提供了一个演示数据访问自动化接口的使用一个VisualBasic样本。此示例的目的仅展示在OPC数据访问自动化接口的功能。OPC数据访问自动化对象和接口4.1OPCServe对象描述客户端创建OPCServe自动化对象。然后客户端"连接"到一个OPC数据访问自定义接口〔参见"连接"的方法。该OPCServe对象现在可以用于获得关于一个OPC服务器的一般信息以及创建和操纵OPCGroup对象的集合。OPCServe语句备注所述Withevents语法促使对象以支持在对特定对象的声明的事件。对于OPC服务器,定义的唯一事件是ServerShutDown。所述OPCGroup〔后述具有所有与DataChange和以支撑OPCGroup对象的异步方法所需的事件相关联的事件。举例DimWithEventsAnOPCServerAsOPCServer

SetAnOPCServer=NewOPCServer4.1.1属性摘要开始时间当前时间更新时间主要版本次要版本建立次数供应商信息服务器状态区域ID组宽OPC组集合公用组名服务器名服务器节点客户端名4.1.2方法综述获取OPC服务器连接断开创建浏览器获取错误字符查询有效区域设置ID查询可用属性获取项目属性寻找项ID4.1.3事件摘要服务器关闭4.1.4OPC服务器属性开始时间描述〔只读返回服务器开始运行的时间。这是客户端已指定到连接到服务器的开始时间。连接到同一台服务器多个客户可以放心,每个客户端会从服务器读取此属性的相同值。句法StartTimeAsDate备注自动化服务器预计使用自定义接口的getStatus〔,获得的值对于该属性,以及许多的定义为OPCServe属性的其它性能。如果客户端还没有连接到服务器时发生错误。举例DimAnOPCServerTimeAsDateAnOPCServerTime=AnOPCServer.StartTime当前时间描述〔只读返回服务器的当前时间。当你访问这个属性,你会得到的自动化服务器已经从通过的getStatus〔接口的定制服务器获得的值。句法CurrentTimeAsDate备注如果客户端还没有连接到,通过连接方法的数据访问服务器时发生错误。举例DimAnOPCServerTimeAsDate

AnOPCServerTime=AnOPCServer.CurrentTime最后刷新时描述〔只读返回来自服务器的最后更新时间。当你访问这个属性,你会得到的自动化服务器已经从通过的getStatus〔接口的定制服务器获得的值。句法LastUpdateTimeAsDate备注如果客户端还没有连接到通过连接方法的数据访问服务器时发生错误,返回最后的时间数据从服务器发送到客户端应用程序。举例DimAnOPCServerTimeAsDate

AnOPCServerTime=AnOPCServer.LastUpdateTime主要版本描述〔只读返回服务器版本号的主要部分〔例如,在1.32版本的"1"。当你访问这个属性,你会得到自动化服务器已经从通过的getStatus〔接口定制服务器获得的值。句法MajorVersionAsInteger备注如果客户没有通过Connect方法连接数据访问服务器时发生错误举例DimAnOPCServerMajorVersionAsString

AnOPCServerMajorVersion=Str<AnOPCServer.MajorVersion>次要版本描述〔只读返回的服务器版本号〔1.32版本"32"的小部分。当你访问这个属性,你会得到的自动化服务器已经从通过的getStatus〔接口定制服务器获得的值。句法MinorVersionAsInteger备注如果客户端还没有连接到通过连接方法连接的数据访问服务器时发生错误。举例DimAnOPCServerMinorVersionAsString

AnOPCServerMinorVersion=Str<AnOPCServer.MinorVersion>建立时间描述〔只读返回服务器的版本号。当你访问这个属性,你会得到的自动化服务器已经从通过的getStatus〔接口定制服务器获得的数值。句法BuildNumberAsInteger备注如果客户端还没有连接到通过连接方法连接的数据访问服务器时发生错误。举例DimBuildNumberasInteger

BuildNumber=AnOPCServer.BuildNumber版本号描述〔只读返回服务器的版本号。当你访问这个属性,你会得到的自动化服务器已经从通过的getStatus〔接口定制服务器获得的数据。句法BuildNumberAsInteger备注如果客户端还没有连接到通过连接方法连接的数据访问服务器时发生错误。举例DimBuildNumberasInteger

BuildNumber=AnOPCServer.BuildNumber供应商信息描述〔只读返回服务器的供应商信息的字符串。当你访问这个属性,你会得到的自动化服务器已经从通过的getStatus〔接口的定制服务器获得的值。句法VendorInfoAsString备注如果客户端还没有连接到通过连接方法连接的数据访问服务器时发生错误。举例DiminfoAsString

info=AnOPCServer.VendorInfo区域设置ID描述〔读/写该属性标识的区域设置,其可以用于从服务器返回字符串进行本地化。。这的区域设置ID将这个接口上使用的GetErrorString方法句法LocaleIDAsLong备注如果客户没有通过Connect方法连接到数据访问服务器时发生错误举例DimLocaleIDAsLong

LocaleID=AnOPCServer.LocaleID

‘<settingtheproperty>:

AnOPCServer.LocaleID=LocaleID致谢随着毕业日子的到来,毕业设计也接近了尾声。经过好几周的奋战我的毕业设计终于完成了。在没有做毕业设计以前觉得毕业设计只是对这几年来所学知识的单纯总结,但是通过这次做毕业设计发现自己的看法有点太片面。毕业设计不仅是对前面所学知识的一种检验,而且也是对自己能力的一种提高。通过这次毕业设计使我明白了自己原来知识还比较欠缺。自己要学习的东西还太多。通过这次毕业设计,我才明白学习是一个长期积累的过程,在以后的工作、生活中都应该不断的学习,努力提高自己知识和综合素质。在此特别要感谢赵正天赵老师对我毕业设计的指导,当遇到自己不能解决的问题时,总是能悉心的指导我完成并且解决问题。是自己能顺利的完成毕业设计。附录DimcnAsNewADODB.ConnectPublicmydbconnAsNewADODB.ConnectionDimWithEventsOPCServerObjAsOPCServer'声明OPC服务器DimWithEventsOPCGroupObjsAsOPCGroups'声明OPC组集合DimWithEventsOPCGroupObjAsOPCGroup'声明OPC组对象DimOPCItemsAsOPCItems'声明OPC项集合DimOPCItemAsOPCItem'声明OPC项对象DimOne<10>AsOPCItemPublicstrProgIDAsStringPublicstrNodeAsStringDimaServerhandle<10>AsLongPrivateFunctionDBInsert<ByVal现场数据采集AsString,ByRefShuXing<>AsString,ByRefShuXingZhi<>AsVariant>将数据导入到数据库Dimsql<3>AsStringDimsqlAsStringDimiAsLongsql<0>="INSERTINTO"&现场数据采集&"<"Fori=1TonStep1sql<1>=sql<1>&ShuXing<i>Ifi=nThenElsesql<1>=sql<1>&","EndIfNextisql<2>=">VALUES<"Fori=1TonStep1sql<3>=sql<3>&"'"&ShuXingZhi<i>&"'"Ifi=nThensql<3>=sql<3>&">"Elsesql<3>=sql<3>&","EndIfNextisql=sql<0>&sql<1>&sql<2>&sqll<3>mydbconn.ExecutecolumnEndFunctionPrivateSubCombo1_Click<>'选择opc服务器IfCombo1.ListIndex=0ThenstrProgID="OPC.SimaticNET"Command2.Enabled=TrueEndIfIfCombo1.ListIndex=1ThenstrProgID="RslinxOPCServer"Command2.Enabled=TrueEndIfEndSubPrivateSubCombo2_LostFocus<>'opc服务器的TCP/IP地址strNode=Combo2.TextEndSubPrivateSubCommand1_Click<>cn.ConnectionString="DSN=cigl;uid=sa;pwd=sa;"cn.ConnectionTimeout=10cn.OpenEndWithMsgBox"连接数据库成功",,"提示"Command1.Enabled=FalseCommand5.Enabled=TrueEndSubPrivateSubCommand2_Click<>IfOPCServerObjIsNothingThenSetOPCServerObj=NewOPCServer'创建OPC服务器EndIfIfOPCServerObj.ServerState=OPCDisconnectedThenOPCServerObj.ConnectstrProgID,strNodeEndIfMsgBox"连接OPC服务器成功",,"提示"Command2.Enabled=FalseCommand3.Enabled=TrueText1.Enabled=TrueSetOPCGroupObj=OPCServerObj.OPCGroups.Add<"group">'添加OPC组对象OPCGroupObj.IsSubscribed=True'设置该组数据为后台刷新OPCGroupObj.IsActive=True'设置该组为激活状态OPCGroupObj.UpdateRate=1000'设置数据刷新时间为1000EndSubPrivateSubCommand3_Click<>Text1.Locked=FalseText2.Locked=FalseText3.Locked=FalseOPCServerObj.Disconnect'断开OPC服务器SetOPCServerObj=NothingMsgBox"断开OPC服务器",,"提示"Command3.Enabled=FalseCommand2.Enabled=TrueEndSubPrivateSubCommand4_Click<>读现场数据将数据读入Text<>IfText1.Locked=TrueThenSetOne<0>=OPCGroupObj.OPCItems<1>One<0>.ReadOPCCacheText5.Text=One<0>.ValueText6.Text=One<0>.QualityText7.Text=One<0>.TimeStampaServerhandle<0>=One<0>.ServerHandleEndIfIfText2.Locked=TrueThenSetOne<1>=OPCGroupObj.OPCItems<2>One<1>.ReadOPCCacheText8.Text=One<1>.ValueText9.Text=One<1>.QualityText10.Text=One<1>.TimeStampaServerhandle<1>=One<1>.ServerHandleEndIfIfText3.Locked=TrueThenSetOne<2>=OPCGroupObj.OPCItems<3>One<2>.ReadOPCCacheText11.Text=One<2>.ValueText12.Text=One<2>.QualityText13.Text=One<2>.TimeStampaServerhandle<3>=One<2>.ServerHandleEndIfEndSubPrivateSubCommand5_Click<>Setcncmd=NothingSetmydbconn=Nothingcn.CloseMsgBox"断开数据库成功",,"提示"Command5.Enabled=FalseCommand1.Enabled=TrueEndSubPrivateSubCommand6_Click<>数据赋值DimShuXingMing<4>AsStringDimShuXingZhi<4>AsVariantDimcont_nAsLongIfmydbconn.State=1Thencont_n=4ShuXingMing<1>="FUDIANSHU"ShuXingMing<2>="ZIFUCHUAN"ShuXingMing<3>="SHIJIAN"ShuXingMing<4>="ITEM"IfText1.Locked=TrueThenShuXingZhi<1>=Text5.TextShuXingZhi<2>=Text6.TextShuXingZhi<3>=Text7.TextShuXingZhi<4>=Text1.TextCallDBInsert<"CHARUBIAO",ShuXingMing<>,cont_n,ShuXingZhi<>>EndIfIfText2.Locked=TrueThenShuXingZhi<1>=Text8.TextShuXingZhi<2>=Text9.TextShuXingZhi<3>=Text10.TextShuXingZhi<4>=Text2.TextCallDBInsert<"CHARUBIAO",ShuXingMing<>,cont_n,ShuXingZhi<>>EndIfIfText3.Locked=TrueThenShuXingZhi<1>=Text11.TextShuXingZhi<2>=Text12.TextShuXingZhi<3>=Text13.TextShuXingZhi<4>=Text3.TextCallDBInsert<"CHARUBIAO",ShuXingMing<>,cont_n,ShuXingZhi<>>EndIfEndIfEndSubPrivateSubCommand7_Click<>EndSubPrivateSubForm_Load<>IfCombo1.ListIndexThenCommand2.Enabled=FalseCommand3.Enabled=FalseEndIfCommand5.Enabled=FalseText1.Enabled=FalseText2.Enabled=FalseText3.Enabled=FalseText4.Enabled=FalseEndSubPrivateSubLabel9_Click<>EndSubPrivateSubText1_LostFocus<>DimabItemIDsAsString'项标识符DimabClientHandlesAsLong'客户端句柄IfOPCServerObj.ServerState=1Thenitemcount=1abItemIDs=Text1.TextabClientHandles=1'

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论