FactoryTalk View Site Edition的VBA基本应用_第1页
FactoryTalk View Site Edition的VBA基本应用_第2页
FactoryTalk View Site Edition的VBA基本应用_第3页
FactoryTalk View Site Edition的VBA基本应用_第4页
FactoryTalk View Site Edition的VBA基本应用_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

FactoryTalk View Site Edition的VBA基本应用技术部 徐晟昕第一节 在VBA中标签的读取和写入本例要达到的目标是通过FactoryTalk View Site Edition(以下简称SE)的VBA来访问PLC中的下位标签,并实现标签的读写。1.准备工作打开SE,选择应用程序类型(本例是Site Edition Network),新建应用程序(本例取名:test),之后在test下新建area(本例取名:area1),在area下新建HMI Server(本例取名:HMI1),以下为完成之后截图:启动RSLogix Emulate 5000,并添加仿真CPU。启动RSLogix 5000编程软件,新建工程,与仿真PLC建立通讯(Topic名称为:TestTopic),并编写简单测试程序并下载到仿真PLC。在SE中新建OPC Data Server 新建一个画面(名为:TestDispaly),并画上一个圆形和一个普通按钮将圆形与下位Tag2标签关联,并设置颜色改变;右键点击按钮,点击Property Panel,出现属性框,将Name项改为TestBtn、ExposeToVBA项改为VBA Control如图: 2.编写代码并测试右键点击按钮,单击VBA Code(或按Alt+F11)弹出Visual Basic编辑器,如图添加如下代码:On Error Resume NextDim TgGObj As TagGroup 标签组对象Dim TagObj As Tag 标签对象Set TgGObj = CreateTagGroup(Me.AreaName) 创建标签组实例TgGObj.Add (TestTopicTag1) 向标签组中添加标签Set TagObj = TgGObj.Item(TestTopicTag1) 创建标签实例If TagObj.Value = 1 Then 读取标签的值如果标签的值为1 TagObj.Value = 0 则将0写入标签, Else 反之则将1写入标签 TagObj.Value = 1End IfSet TagObj = NothingSet TgGObj = Nothing标签组是一组标签的集合体。在SE的VBA中,我们要想引用标签,需要先创建标签组,然后将本地标签或远程标签加入标签组,之后通过集合访问的方式引用标签组中的标签。值得注意的是,SE中的标签类型并不是变量而是对象,也就是说我们需要用标签对象而不是普通变量去引用标签组中的单个标签。测试画面,可以看到每次点击按钮,圆形的填充颜色都会发生变化,同时在RSLogix 5000中也能观察到标签状态的变化。如图:在SE中:点击按钮后变为绿色,再次点击按钮变为红色在RSLogix 5000中:第二节 运用VBA来简单处理运行历史数据本例的操作过程是在SE中新建本地内存标签(标签名:TestTag),使其值随时间(秒)自增,之后每按下一次存储按钮,实时的标签值和对应时间戳都会被写入数据库,然后我们可以在数据库中查看结果。1.准备工作在SE中新建内存(memory)标签TestTag,类型为analog。在第上一节中的test应用程序中新建一个画面,并取名为TestSimpleData,并画出两个字符串显示控件和三个按钮。如图:属性对应关系:表2.1类型控件名是否暴露在VBA中所连标签标题按钮CreateTag是Create Tag Object按钮DropTag是Drop Tag Object按钮SaveData是Save字符串显示StringDisplay1是SystemDateAndTimeString字符串显示StringDisplay2否TestTag在MS SQL Server中新建test数据库,之后在test下新建simple表。其中各列属性如下:表2.2列名数据类型描述TimeChar(20)时间字符串ValueSmallint标签值2.对数据库连接与操作ADO是微软公司提供的一个用于存取数据源的COM组件。它提供了编程语言和统一数据访问方式OLE DB的一个中间层,允许开发人员编写访问数据的代码而不用关心数据库是如何实现的,而只用关心到数据库的连接。本例将使用ADO来实现数据库相关操作。在VBA编辑器中选择工具之后选择引用弹出如下对话框在左侧的列表中找到Microsoft ActiveX Data Objects *.*(其中*.*号代表版本号,选择最新版本即可)。这样我们就可以在之后的编程中引用ADO对象了。3.编写代码并测试在VBA编辑器中输入以下代码:Private OTag As TagPrivate OtagG As TagGroupPrivate Conn As New ADODB.Connection创建ADO的Connection实例Private Rs As New ADODB.Recordset创建ADO的Recordset实例Private Sub CreateTag_Released()Set OtagG = CreateTagGroup(Me.AreaName)OtagG.Add (TestTag)Set OTag = OtagG.Item(1)Conn.ConnectionString = provider=sqloledb; & _Data Source=127.0.0.1;Initial Catalog=test; & _指定数据库主机地址、数据库名User Id=sa;Password=0;指定用户名、密码Conn.Open连接数据库Rs.CursorLocation = adUseServerRs.CursorType = adOpenStaticRs.LockType = adLockOptimisticRs.Open select * from simple, Conn从数据库返回数据集End SubPrivate Sub SaveData_Released()Rs.AddNew在集中插入一条记录Rs.Fields.Item(0).Value = Date$ & & Time$Rs.Fields.Item(1).Value = OTag.ValueRs.Update将数据写入数据库End SubPrivate Sub StringDisplay1_Change()On Error Resume NextIf Not OtagG Is Nothing Then _OTag.Value = OTag.Value + 1当StringDisplay1发生改变时TestTag自增1End SubPrivate Sub DropTag_Released()Rs.CloseConn.CloseOTag.Value = 0Set OtagG = NothingEnd Sub测试运行。先按下Create Tag Object按钮创建对象为接下来的操作做准备,然后随机几次按下Save按钮将不同时刻的TestTag值连同时间写入数据库,之后按Drop Tag Object按钮关闭各对象释放连接和内存空间。下图为程序运行截图:下图为在数据库中simple表中的结果。可以看到运行数据已经成功写入数据表。第三节 具有普遍性的历史数据处理方式本例在RSLogix 5000中编写了一个简单交通灯演示程序。我们要达到的目的是将交通灯在工作过程中各个灯的亮灭情况记录下来,存入MS SQL Server中,并通过Excel提取存储在MS SQL Server中的数据。1.准备工作在RSLinx中建立Topic,名称为“TL”,使其指向仿真PLC。本下位程序中提供的标签及相关描述:表3.1标签名(布尔型)描述GreenLight1Range南北向交通灯绿灯长亮范围GreenLight2Range东西向交通灯绿灯长亮范围GreenLight1FlashRange南北向交通灯绿灯闪烁范围GreenLight2FlashRange东西向交通灯绿灯闪烁范围GreenLight南北向交通灯绿灯长亮状态,与上位图形关联GreenLight2东西向交通灯绿灯长亮状态,与上位图形关联YellowLight南北向交通灯黄灯长亮状态,与上位图形关联YellowLight2东西向交通灯黄灯长亮状态,与上位图形关联RedLight南北向交通灯红灯长亮状态,与上位图形关联RedLight2东西向交通灯红灯长亮状态,与上位图形关联DataUpdate数据写入触发注:DataUpdate标签的作用:为了减轻上位以太网的网络负载压力,本程序设计为实时采集数据,但每隔较长周期,向数据库中批量写入数据而不是实时写入。在MS SQL Server中的test数据库中新建数据表tutorial,其中各列属性如下:表3.2列名数据类型描述IDSmallInt自增列TimeDateTime时间戳GreenLight1CharGreenLight2CharYellowLight1CharYellowLight2CharRedLight1CharRedLight2Char在第一节中的test应用程序中新建一个画面,并取名为TestDatabase。依照下图画出各图形:参照表一,将各代表交通灯的圆形与相应下位标签对应。在Property Panel中将Start Scan按钮的Name改为StartScBtn,ExposeToVBA改为VBA Control;将Stop Scan按钮的Name改为StopScBtn,ExposeToVBA改为VBA Control。由于运行时下位标签每秒钟变化一次,为了使上位画面的显示正常,我们需要将上位画面的刷新率(默认为1秒)加快。右键点击画面空白处,在弹出的下拉菜单上选择Display Settings,然后将Maximum Tag Update Rate改为小于1的值,例如0.25。2.事件驱动我们知道Visual Basic是事件驱动的编程机制,其中的控件都是通过事件触发而运行事件代码的。在SE的VBA中,提供了对标签对象和标签组对象的事件支持。我们先来做一个简单的实验。新建一个画面,取名为VBA_Event。画出两个按钮和一个文本控件(text)并将他们的ExposeToVBA属性设为VBA Control。如图:之后打开VBA编辑器,将下面的代码加入Private WithEvents OTagG As TagGroup声明标签组对象,并使能对象的事件Private OTag As TagPrivate Sub Button1_Released()Set OTagG = CreateTagGroup(Me.AreaName)OTagG.Add (systemDateAndTimeString)Set OTag = OTagG.Item(systemDateAndTimeString)OTagG.Active = True开启对标签组对象的事件监视End SubPrivate Sub OTagG_Change(ByVal TagNames As IGOMStringList)Text1.Caption = OTag.Value标签组中标签的值发生改变时将调用该过程End SubPrivate Sub Button2_Released()OTagG.Active = FalseSet OTagG = NothingEnd Sub测试运行,可以看到当点击On Scan按钮后,Text控件将显示当前的日期时间,并且它是动态变化的。这是因为时间日期的变化会触发标签组对象的Change事件并调用相应过程来更新Text控件的显示值,从而我们观察到Text控件实时地显示日期时间。3.编写代码并测试在RSLogix 5000中编写下位程序,之后将程序下载到仿真PLC中。在SE中的打开VBA编辑器,引用Microsoft ActiveX Data Objects,之后添加如下代码:Private WithEvents TgG As TagGroupPrivate WithEvents TgG2 As TagGroupPrivate Conn As New ADODB.ConnectionPrivate Rs As New ADODB.RecordsetPrivate TempStr(6) As StringPrivate Sub StartScBtn_Released()Conn.ConnectionString = provider=sqloledb; & _Data Source=127.0.0.1;Initial Catalog=test; & _User Id=sa;Password=0;Conn.OpenRs.CursorLocation = adUseServerRs.CursorType = adOpenStaticRs.LockType = adLockBatchOptimisticRs.Open Source:=tutorial, ActiveConnection:=Conn, options:=adCmdTableSet TgG = CreateTagGroup(Me.AreaName)Set TgG2 = CreateTagGroup(Me.AreaName)TgG.Add (TLGreenLight1Range)TgG.Add (TLGreenLight2Range)TgG.Add (TLGreenLight1FlashRange)TgG.Add (TLGreenLight2FlashRange)TgG.Add (TLYellowLight)TgG.Add (TLYellowLight2)TgG.Add (TLRedLight)TgG.Add (TLRedLight2)TgG2.Add (TLDataUpdate)TgG.Active = TrueTgG2.Active = TrueEnd SubPrivate Sub StopScBtn_Released()Set TgG = NothingSet TgG2 = NothingRs.CloseConn.CloseEnd SubPrivate Sub TgG_Change(ByVal TagNames As IGOMStringList)On Error Resume NextTempStr(0) = Date$ & & Time$If TgG.Item(1).Value = 1 Then TempStr(1) = OnElseIf TgG.Item(3).Value = 1 Then TempStr(1) = FlashElseIf TgG.Item(1).Value = 0 And TgG.Item(3).Value = 0 Then TempStr(1) = OffEnd IfIf TgG.Item(2).Value = 1 Then TempStr(2) = OnElseIf TgG.Item(4).Value = 1 Then TempStr(2) = FlashElseIf TgG.Item(2).Value = 0 And TgG.Item(4).Value = 0 Then TempStr(2) = OffEnd IfDim i As IntegerFor i = 5 To TgG.Count If TgG.Item(i).Value = 1 Then TempStr(i - 2) = On Else TempStr(i - 2) = Off End IfNextRs.AddNewFor i = 0 To 6 Rs.Fields(i + 1).Value = TempStr(i)NextEnd SubPrivate Sub TgG2_Change(ByVal TagNames As IGOMStringList)Rs.UpdateBatchEnd Sub说明:TgG2集合中只引用了一个标签TLDataUpdate,此标签组发生变化(也就是TLDataUpdate发生变化)会导致运行数据批量写入数据库的动作发生。在下位中该标签被设计为每隔30秒发生一次翻转。也就是说以30秒为周期,在这30秒中发生的灯的变化情况都会被临时地记录在本地,当一个周期结束时,这些临时的记录会被统一发送回数据库,更新数据表,完成真正的写入动作。运行中点击Start Scan按钮,实时数据就会被采集下来并写入数据库。当点击St

温馨提示

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

评论

0/150

提交评论