吴超
中国石化润滑油有限公司西南分公司 四川 成都 610000
摘要:本文介绍了OPC的层次结构。实现了在Visual Basic环境下引用西门子OPC控件DAAutomation远程读取PLC数据,用ADO控件把读取到的数据记录到SQL Server。
关键词:OPC;数据库;工业通信;西门子;
工业生产中记录温度、压力等参数在稳定产品质量、追溯生产过程、数据科研分析等方面着重要意义。在数字技术的运用日益广泛的今天,仅仅靠现场记录参数的方式远远不能满足产品生产经营活动对数据的需求。通过计算机通信技术把生产参数传递到远程的计算机上,能够极大提高数据存取、利用的效率。
OPC(OLE for Process Control, 用于过程控制的OLE)是一种工业通信协议。为不同生产商的智能设备通信规定了统一的规范,当编程者访问不同的硬件设备时,不用开发不同的硬件驱动程序,极大的减少了工作量。目前主流的工业控制系统都支持OPC接口。
OPC逻辑对象模型包括6类对象:OPC server对象、OPC groups集合、OPC group对象、OPC item集合、OPC item对象。OPC server对象可以看作执行OPC操作的上位机。OPC item对象可以看作基本的数据单元,通常应对某一个变量地址。OPC group对象和集合可以看作是管理OPC items集合的分组。结构如图1:
.png)
图1:OPC对象结构
下面举个例子用Visual basic作为开发语言,访问OPC的这三类对象获取参数。
一、OPC通信程序。
假设某一生产装置有一台西门子S7-200SMART PLC , IP地址是10.168.131.183。该PLC VD10、VD14、VD18三个存储地址里实时记录了装置上三个点位的温度值。现在需要一台计算机远程读取这三个温度数值并记录到数据库中。
首先在计算机上用西门子官方的OPC SERVER软件PC Access和PLC连接设置好PLC的IP地址和TSAP值。然后在VB编辑器中引用西门子的OPC动态链接库Siemens OPC DAAutomation 2.0。新建三个浮点数类型变量X1、X2、X3。新建一个OPC连接包含三个OPC item对象,分别指向PLC的VD10、VD14、VD18三个地址。执行西门子OPC的读操作函数读取三个PLC地址中的数值存储在X1、X2、X3中。代码如下:
Dim WithEvents MyOPCServer As OPCServer ' 声明OPC server对象
Dim MyGroups As OPCGroups ‘声明组集合OPC Groups
Dim WithEvents MyGroup As OPCGroup ‘声明组OPC Group
Dim MyItems As OPCItems ‘声明项集合OPC items
Dim OneOPCItem As OPCItem ‘声明项OPC item
Dim X1 as single,X2 as single X3 as single ‘声明三个浮点数据类型用于存储温度值
Sub 建立OPC连接的过程()
Set MyOPCServer = New OPCServer ' 创建OPC server对象
Call MyOPCServer.connect("S7200SMART.OPCServer") ' OPC server连接S7200SMART PLC
Set MyGroups = MyOPCServer.OPCGroups ' 创建OPC Groups
Set MyGroup = MyGroups.Add("group1") ' 给Groups新增一个OPC group
Set MyItems = MyGroup.OPCItems ' 给”group1”新增一个OPC items
Dim ItemIDs(3) as string ‘声明新增变量需要的参数
Dim ItemClientHandles(3) as long
Dim MyItemServerHandles () As Long, Errors() as long
ItemIDs(1) = "2:10.168.131.183:0201:0201,VD10,REAL,R" ' 指定item的ID
ItemIDs(2) = "2:10.168.131.183:0201:0201,VD14,REAL,R" ' 指定item的ID
ItemIDs(3) = "2:10.168.131.183:0201:0201,VD18,REAL,R" ' 指定item的ID
‘ID值的语法解释:
‘2:是PLC的从站地址; 10.168.131.183:PLC的IP地址; 0201:0201是PLC的TSAP号,由PC access设置; VD10:PLC的寄存器地址;REAL表示读取的数据类型是浮点数;R表示执行读操作。
ItemClientHandles(1) = 1 ' 指定变量句柄
ItemClientHandles(2) = 2 ' 指定变量句柄
ItemClientHandles(3) = 3 ' 指定变量句柄
Call MyItems.AddItems(3, ItemIDs, ItemClientHandles, MyItemServerHandles, Errors)’添加变量
End sub
‘读取PLC寄存器
Sub 读操作的过程()
Dim ItemValues () As Variant ‘声明数组用于存放读出的数值
Dim MyItemServerHandles (3) As Long ‘声明句柄数组
Dim Errors() As Long
MyItemServerHandles (1) =1 ‘设置3个item对应句柄
MyItemServerHandles (2) =2
MyItemServerHandles (3) =3
Call MyGroup.SyncRead(OPCDevice, 3, MyItemServerHandles, ItemValues, Errors, Qualities, TimeStamps) ‘执行读取PLC寄存器函数
If Errors(1) = 0 Then
X1= ItemValues(1) ‘读取的数值存入VB变量X1
X2 = ItemValues(2) ‘读取的数值存入VB变量X2
X3 = ItemValues(3) ‘读取的数值存入VB变量X3
Else
End if
End sub
其它各种OPC的编程略有不同,总体相似。温度值存储到VB变量中相当于把数值存在计算机的内存里,实现数据长期保存还须要把数值传递到数据库中。
二、远程连接数据库
SQL Server数据库是Microsoft开发设计的支持远程连接的数据库智能管理系统,能够通过图形界面的管理工具SQL Server Management Studio操作,简单易用。
在图形操作界面SQL Server Management Studio中设置SQL Server的远程连接参数和身份验证。开启SQL Server 远程服务。在VB引用microsoft activeX Data objects 2.6 library库,添加组件ADO Date Control。
VB操作ADODB连接SQL Sever常用两种控件:ADODB.Connection和ADODB.Recordset。ADODB.Connection对象代表数据库,ADODB.Recordset记录集对象代表查询结果的游标。VB通过Recordset的方法增加、删除和更新SQL Sever。以下是实现数据传递至数据库的代码:
Sub 存进数据库()
Dim conn as object,rs as object,str as string ‘声明对象
Set conn = CreateObject("adodb.connection") ‘建立连接对象
Set str = "driver=SQL Server;server=服务器IP,端口号;uid=sa;pwd=数据库密码;database=数据库名" ‘链接字符串 标识数据库连接地址
With conn ‘连接数据库
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionTimeout = 1000
.Open str
End With
Set rs = CreateObject("adodb.recordset") ‘建立记录集对象
rs.Open "数据表", conn, adOpenDynamic, adLockOptimistic, -1 ‘打开记录集
rs.AddNew ‘新增记录
rs.Fields(0).Value = X1 ‘把X1的数值存入记录集
rs.Update 更新记录集
End sub
str
通过以上OPC通信、数据库远程传递两个步骤,实现了远程查询生产现场温度的功能。如果需要在更远的电脑上查看温度,距离超过局域网的范围。可以租用云服务器,安装MYSQL于云服务器上,建立数据库远程连接时把连接字内IP地址设成云服务器的公网IP。查询客户端的电脑通过访问云服务器获取数据。
参考文献
[2]王绪彪,张望,江丹玲. 基于VB的OPC客户端软件的设计与实现[J].自动化与仪器仪表,2011(02) :46-49.
[1]何海江.使用VB连接OPC数据存取服务器 [J]. 工业控制计算机,2003(06):31-33.
作者简介:
吴超(1985-)男,汉族,过程装备与控制专业 主要从事工业控制和自动化装置设计。