vb开发的opc客户端应用程序与西门子PLC通讯 点击:0 | 回复:3



水中鱼

    
  • 精华:66帖
  • 求助:4帖
  • 帖子:1099帖 | 3802回
  • 年度积分:0
  • 历史总积分:15066
  • 注册:2011年11月10日
发表于:2012-01-19 14:06:14
楼主

利用visual basic所开发的opc客户端应用程序主要采用自动化通信接口和opc服务器程序实施通信。而opc基金会提供的opc自动化接口 opcdaauto.dll动态链接库集成了所有用于对opc服务器进行访问的对象、属性和方法,为利用visual basic开发opc客户端应用程序提供了极大方便。程序设计时,opc客户程序应当首先生成opc服务器支持的opc对象,然后再使用opc对象支持的属性和方法,实现对opc服务器的操作和访问。
      opc
数据访问对象主要包括opc服务器(opcserver)、opc组集合(opcgroups)、opc组(opcgroup)、opc标签集合(opcitems)、opc标签(opcitem)、opc浏览器(opcbrowser)等几个部分。程序设计时,要首先在visual basic环境下选择对opc automation 2.0接口的引用,此时,opc对象会被自动添加到正在开发的工程项目中,然后,再根据需要建立这些对象的实例并利用其属性和方法来实现对opc服务器的访问。对opc服务器的访问主要包括声明opc对象实例、连接opc server、添加标签变量、读写opc服务器(同步/异步)、断开连接等几个步骤。
      opc
对象实例的声明主要包括对opc服务器、opc组集合、opc组、opc标签集合、opc服务器句柄的声明及程序所需要的其它实例的声明。opc客户端和opc server的连接主要靠调用opc服务器对象实例的connect方法函数来完成,例如,连接本地计算机dassidirectrslinx opc server 的代码分别为connect"archestra.dassidirect.1")和connect"rslinx opc server"
      
连接网络远程计算机(ip地址为10.144.45.45)上dassidirectrslinx opc server 的代码分别为connect"archestra.dassidirect.1", "\10.144.45.45")和connect"rslinx opc server", "\10.144.45.45"
      
需要说明的是当进行远程opc连接时,必须在远程计算机上运行dcomcnfg程序,并启动该计算机opc服务器的dcom服务。
      
标签变量的添加主要由opc标签集合的additems方法函数实现,该函数定义了添加的标签数量、标签变量名(数组)、应用程序句柄(数组)、opc服务器句柄(数组)、错误代码(数组)等方面的信息。例如,为dassidirectrslinx opc服务器添加标签变量的代码为tagnms1=”portcps7.jsbf.db2,x48.0”或者tagnms1=”linxlogixtag”
my_items.additems itmnum, tagnms, clienthdls, svrhandles, err 
      
其中,my_itemsopc标签集合的一个实例。标签变量添加完成后,可通过syncreadsyncwriteasyncreadasyncwrite四个函数实现对opc服务器中相应数据的读写操作。在读写操作完成后,程序将会自动执行syncreadcompletesyncwritecompleteasyncread-completeasyncwritecomple-te等过程,opc客户端应用程序的数据显示、故障诊断等功能可在该段程序代码中实现。

      
此外,在对opc服务器完成读写后,可以调用opc服务器的disconnect方法来断开与相应opc服务器的连接。不过,为了节省系统开支,增加程序稳定性,通常要在断开和opc服务器连接前先移除opc服务器中的opc标签和opc组,并将opc集合对象都置为nothing,然后再执行disconnect操作并将opc server对象实例置为nothing

PC上装SIMATIC NET软件,先将PCS7-300/400PLC建立起连接,VB通过OPC方式访问SIMATIC NET OPC即可。
http://www.ad.siemens.com.cn/service/search/?pno=4&qu=OPC&pa=dc     A0030 
通过ETHERNET建立SIMATIC NET OPC 服务器与PLC S7连接(更新版)
一、通过STEP7软件建立一个新项目OPC,在项目中添加SIMATIC 300站和一个PC 站,其中PLC站中第四个槽安装的CP343模块。PC站的第一个槽 OPC SERVER ,第三个槽为 IE GENERAL,然后在NETPRO下配置PLCPC站的网络连接:(注意:是在PC站上新建的网络连接,连接类型选的S7连接)

二、通过station configurator软件 配置本机的PC站(要和STEP7中配置的相同),然后把PLCPC站都下载下去(注意:下载PC站的时候要把S7ONLINE STEP7)--->PC internal(local))。

三、打开OPC Scout,Start>SIMATIC>SIMATICNet>OPC Scout), 双击&ldquoOPC 

SimaticNet”在随之弹出的&ldquoADD Group”对话框中输入组名,本例命名为&ldquoOPC”。 

点击OK 确认 

 ;双击已添加的连接组(OPC),即弹出&ldquoOPC Navigator”对话框,此窗口中显示 

所有的连接协议。双击&ldquoS7”,在PC Station 组态NetPro 中所建的连接名会被显示(S7 

connection_1)。双击此连接,即可出现有可能被访问的对象树(objects tree),在PLC 

CPU 中已存在的DB 块也会出现 

以上完成的OPC SERVER部分的配置。

 

四、用VB编写了OPC客户端应用程序。主要程序代码如下

VB中引在VB中还要引用 siemens opc daautomation 2.0

(1) 连接OPC服务器 

Dim WithEvents MyOPCServer As OPCServer ‘定义服务器对象变量MyOPCServer 

Dim WithEvents MyOPCGroup As OPCGroup ‘定义OPC组对象变量MyOPCGroup 

Set MyOPCServer = New OPCServer 

MyOPCServer.Connect " OPC.SimaticNET" ‘连接SIMATICNET OPC服务器 

(2) 添加OPC组对象 

Set MyOPCGroup=MyOPCServer.OPCGroups.Add("Group1") 

添加OPC组对象 

MyOPCGroup.IsSubscribed= True 

设置该组数据为后台刷新 

MyOPCGroup.IsActive = True 

设置该组为激活状态 

MyOPCGroup.UpdateRate=1000 

设置数据刷新时间为1000 

(3) 添加数据项 

Dim abItemIDs() As String 

项标识符 

Dim abClientHandles() As Long 

客户端句柄 

Dim abServerHandles() As Long 

服务器端句柄 

Dim abErrors() As Long 

Dim i As Long 

ItemCount=3 

abItemIDs(1) = " S7:【S7 connection_1】IB1" 

abItemIDs(2) = " S7:【S7 connection_1】MB1" 

abItemIDs(3) = " S7:【S7 connection_1】QB1" 

for i=1 to 3 

abClientHandles(i) = i 

给客户端句柄赋值 

Next 

MyOPCGroup.OPCItems.AddItems ItemCount, abItemIDs, abClientHandles, abServerHandles, abErrors 

添加数据项操作 

(4) 同步数据读写 

OPC数据存取有同步方式和异步方式两种。异步读写数据复杂,需要与事件结合使用,与同步相比速度慢但准确性高。同步读写数据简单,直接使用OPCItem的方法即可。 

Dim One As OPCItem 

Dim Index As Long 

‘Index为标签顺序号 

Dim OneRead As String 

Dim Xie As String 

Set One = MyOPCGroup.OPCItems(Index) 

One.Read OPCCache 

OneRead = One.Value 

读数据 

MyOPCGroup.SyncWrite ItemCount, ServerHandles, valuess, Errors 

同步写数据 

MyOPCGroup.SyncRead OPCCache, ItemCount, ServerHandles, ReadValue, Errors 

同步读数据 

One.Write (Xie) 

写数据 

若只读取数据,可以使用DataChange事件,当控制器中所要访问的数据一旦发生改变时将会触发该事件,并将该数据自动读到TxtValue文本框。 

Private Sub MyOPCGroup_DataChange(ByVal TransactionID As Long, ByVal NumItems As Long, ClientHandles() As Long, ItemValues() As Variant, Qualities() As Long, TimeStamps() As Date) 

自动刷新数据 

Dim i As Long 

For i = 1 To NumItems 

txtValue(ClientHandles(i)) = ItemValues(i) 

获取项的值 

txtTime(ClientHandles(i)) = TimeStamps(i) 

获取项的时间戳 

txtQuantity(ClientHandles(i))=GetQualityString(Qualities(i)) 

获取项的品质 

Next i 

End Sub 

(5) 断开OPC服务器 

MyOPCServer.OPCGroups.RemoveAll 

移除所有OPC Group,空出资源 

Set MyOPCGroup = Nothing 

MyOPCServer.Disconnect 

断开连接




hellozxb

  • 精华:0帖
  • 求助:1帖
  • 帖子:1帖 | 1回
  • 年度积分:0
  • 历史总积分:0
  • 注册:2012年5月25日
发表于:2012-07-09 21:58:19
1楼
是懂非懂,有点意思。

chenzhifeng72

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 1回
  • 年度积分:0
  • 历史总积分:4
  • 注册:2010年12月25日
发表于:2013-11-08 11:06:50
2楼

谢谢,最好有OPCserver的属性等用法说明

 

 

Mr袁--王者之师

  • 精华:0帖
  • 求助:3帖
  • 帖子:32帖 | 1147回
  • 年度积分:0
  • 历史总积分:3882
  • 注册:2011年10月26日
发表于:2013-11-08 11:11:58
3楼

好东西啊                


相关主题

官方公众号

智造工程师