APP下载

基于VB的OPC客户端在磨机负荷控制系统中的应用

2014-03-22李艳姣王建民

仪表技术与传感器 2014年8期
关键词:磨机组态客户端

李艳姣,王建民,张 杰

(河北联合大学电气工程学院,河北唐山 063009)

0 引言

Visual Basic是一种可视化编程方法,是应用广泛的编程语言[1]。在用VB进行智能控制算法的软件设计时,存在WINCC组态软件与VB之间的数据交换问题。WINCC组态软件支持OPC技术,而且OPC具有高速的数据传送性能、开发成本低,具有很强的优越性。

选矿厂的磨矿过程具有机理复杂、过程影响因素多,非线性、大滞后和时变性的特性,常规的PID控制难以取得很好的控制效果[2]。集散控制主要提供了梯形图、功能块图的编程方式,如果要完成智能控制(例如模糊控制),需编制相应的程序模块。SIMATIC WINCC提供OPC技术,采用VB编写了相应的智能控制程序,并用OPC技术实现与WINCC的数据交换。

1 磨机负荷DCS系统

采用S7-300PLC和工控机构成DCS系统,其监控系统结构图如图1所示。

图1 系统结构图

(1)生产管理层主要是面向该厂的领导层,通过以太网,董事长、总经理和矿长等在办公室对现场的情况进行了解。

(2)监控操作层主要包括作为服务器的工业控制计算机和中控室,操作人员在中控室可以监控生产现场各个信号的变化并进行相应的操作,服务器负责层与层之间的通讯,同时该层所记录的数据也为日后的数据分析和系统故障分析带来了方便。中控室中的集中监控站软件采用WINCC V6.0。SIMATIC WINCC全面支持OPC技术,WINCC中的OPC符合OPC基金会的OPC规范,因此,将WINCC作为OPC服务器[3]。

(3)过程控制层由2个S7-300PLC和6个ET200远程分站组成,与中控室进行通讯,还与现场设备相连接。

有些组态软件的数据库是经过加密封装的,用户无法从外部直接访问其中的数据,虽然WINCC软件的数据库未加密,但是数据库中的表名、表的结构等都是保密的,这样给数据共享带来的困难。需要从监控站上实时获取相关的生产数据来控制磨机负荷的给定控制。因此,采用运算能力较强的VB编程语言实现,VB程序通过OPC接口实现与WINCC的数据交换。

2 OPC技术

OPC(OLE for Processing Control,用于过程控制的OLE技术)是为了保证不同软件产品、硬件设备及现场的数据能进行交换而由OPC基金会制定的。OPC服务器有3种对象:服务器(Server)、组(Group)、数据项(Item)[4]。OPC服务器作为数据源程序,收集现场的数据信息,通过OPC接口传送给OPC客户端;OPC客户端作为数据接收程序[5]。该系统的OPC体系接口如图2所示。

图2 OPC的体系结构

WINCC组态软件按服务器提供OPC接口,VB中的OPC自动化接口为OPC客户端模式编写OPC接口软件。VB开发的OPC客户端能够实现与OPC服务器之间的连接、断开和读取数据的功能。

3 WINCC与VB客户端的OPC通信

3.1WINCCOPC服务器的设置

由于WINCC OPC服务器与客户端程序运行在网络不同的计算机上,要进行数据交互,则需对OPC服务器进行相应的DCOM的设置。Windows XP下的dcomcnfg.exe是专门对远程访问DCOM进行设置的工具。在计算机的“开始”菜单选择“运行”,并在输入框中输入dcomcnfg.exe,打开“分布式DCOM组态属性”对话框,选择“应用程序”标签,从应用程序的显示列表中选择“OPCServer.Wincc”条目。单击“属性”按钮,进行“OPCServer.Wincc”属性的设置,完成DCOM的组态[6]。

在WINCC中要建立通过OPC通讯的变量。 值得注意的是,WINCC OPC 服务器必须与客户机位于相同的网络上[7]。

3.2OPC客户应用程序的编写

服务器与客户端之间的数据交互主要包括创建与连接服务器对象;添加组、项;进行数据的读写[8]。VB开发的OPC客户端流程如图3所示。

图3 客户端程序流程图

VB开发OPC客户端的设计步骤为:在VB中新建1个工程,在VB工具栏中利用“工程-引用”将Siemens OPC DAAutomation 2.0控件加入,然后编写VB客户端程序。

3.2.1变量声明

先对OPC对象的变量进行声明,变量的数据类型应该指定为对象型。这些变量在窗体代码的通用部分进行声明。这样,就可以在窗体的任何位置代码内引用。在模块代码的开始部分,加上“Option Explicit”语句,表示模块里所有变量需要显式的声明。OPC自动化接口数组的索引要求必须从1开始[9]。

Dim WithEvents MyobjServer As OPCServer ‘定义OPC服务器

Dim MyobjGroups As OPCGroups ‘定义OPC标签组

Dim MyobjGroup As OPCGroup ‘定义OPC组

Dim MyobjItems As OPCItems ‘OPC项对象

Dim lServerHandles() As Long ‘句柄

Dim ClientHandles() As Long

Dim errors() As Long

3.2.2OPC的连接

所有变量定义后,进行OPC连接的编程。考虑到代码的重复利用,采用子程序的方法进行编程。然后调用该子程序实现和OPC服务器连接。

Sub Connect()

If MyobjServer Is Nothing Then

‘创建1个OPC服务器对象

Set MyobjServer = New OPCServer

End If

If MyobjServer.ServerState = OPCDisconnected Then

‘连接OPC服务器

MyobjServer.Connect strProgID,strNode

End If

If MyobjGroups Is Nothing Then

‘建立1个OPC组集合

Set MyobjGroups = MyobjServer.OPCGroups

End If

If MyobjTestGrp Is Notbing Then

‘添加1个OPC组

Set MyobjtTestGrp = MyobjGroups.Add("TestGrp")

End If

End Sub

3.2.3添加OPC标签

对OPC服务器访问前,应先在OPC组里添加要访问的OPC标签。添加OPC标签的子程序为:

Sub AddItem()

Dim strItemIDs(10) As String

Dim lClientHandles(10) As Long

Dim lErrors() As Long

Dim I As Integer

If MyobjTestGrp Is Nothing Then

Exit Sub

End If

If Not MyobjItems Is Nothing Then

If MyobjItems.Count > 0 Then

Exit Sub

End If

End If

‘设置组活动状态

MyobjTestGrp.IsActive = True

‘取消组异步通知

Set MyobjItems = MyobjTestGrp.OPCItems

‘生成从TAG1到TAG8的项标识符

For I = 1 To 8

strItemIDs(I) = "TAG" & I

lClientHandles(I) = I

Next

‘添加OPC标签

Call MyobjItems.AddItems(10,strItemIDs,lClientHandles,lErrors)

End Sub

3.2.4OPC变量的读写

在读取前,为了避免错误发生,对OPC组和OPC标签数进行检查。读写的子程序为:

Sub SyncRead(nSource As Integer,ByRef vtItemValues() As Variant,ByRef lErrors() As Long)

If MyobjTestGrp Is Nothing Then

Exit Sub

End If

If MyobjTestGrp.OPCItems.Count>0 Then

‘同步读取

MyobjTestGrp.SyncRead nSource,8,lServerHandles,vtItemValues,lErrors

End If

End Sub

Sub SyncWrite(nIndex As Integer,ByRef vtItemValues() As Variant,ByRef lErrors() As Long)

Dim lHandle(1) As Long

If MyobjTestGrp Is Nothing Then

Exit Sub

End If

If MyobjTestGrp.OPCItems.Count>0 Then

lHandle(1)=lServerHandles(nIndex)

‘同步写入

MyobjTestGrp.SyncWrite 1,lHandle(),vtItemValues,lErrors

End If

End Sub

3.2.5OPC断开

连接着OPC服务器的OPC应用程序,在退出前应断开与OPC服务器的连接。如果不断开连接,OPC服务器使用的计算机资源将不断被释放,如果长期反复发生,连接运转的控制系统可能会使计算机的资源慢慢枯竭,从而发生严重的问题[10]。

Sub Disconnect()

Dim lError() As Long

If Not MyobjItems Is Nothing Then

If MyobjItems.Count > 0 Then

‘清除OPC标签

MyobjItems.Remove8 ,lServerHandles,lErrors

End If

Set MyobjItems = Nothing

End If

If Not MyobjTestGrp Is Nothing Then

‘清除OPC组

MyobjGrounps.Remove "TestGrp"

Set MyobjTestGrp = Nothing

End If

If Not MyobjGroups Is Nothing Then

Set MyobjGroups = Nothing

End If

If Not MyobjServer Is Nothing Then

If MyobjServer.ServerState < > OPCDisconnected Then

‘断开OPC服务器

MyobjServer.Disconnect

End If

Set MyobjServer = Nothing

End If

End Sub

4 应用效果

在某大型选矿厂,为实现磨机负荷的最优控制,在外环功率控制回路中,采用VB编程语言开发来控制磨机负荷,必须保证WINCC组态软件与VB上位机之间的数据交互。采用OPC技术很好地实现了监控系统之间的数据交互,满足了选矿厂的要求,效果良好。图4为WINCC实时监控界面,图5为VB开发的磨机负荷控制界面。在实际的应用中,能够顺利地进行数据交换。

图4 WINCC实时数据界面

5 结束语

文中介绍了磨机负荷控制系统中利用WINCC作为OPC服务器,VB开发OPC客户端的方法,重点阐述了VB开发客户端程序的设计过程,实现了WINCC与监控软件之间的数据交换操作。在线调试和试运行后,实现了控制系统之间的无缝连接和数据实时共享。

图5 开发的磨机负荷控制界面

参考文献:

[1]赵艳秋,王建民.采用OPC技术实现竖炉烧结DCS系统与VB软件的接口.计算机与数字工程,2006,34(1):114-117.

[2]邹金慧,黄宋魏,许江淳.基于PLC的磨矿分级智能控制系统.自动化仪表,2007,28(11):43-45.

[3]吴晓蕾,李逸,胡国军,等.通过OPC实现VB访问WINCC数据.电气传动,2009,39(12):63-66.

[4]尹静涛,刘利平.OPC技术在高炉生产测控系统中的应用.制造业自动化,2012,34(1):139-140.

[5]徐思成,李增权,郭国选.基于OPC技术和以太网的异构网络集成.仪表技术与传感器,2011(1):109-110.

[6]高德欣,张文武,杨清.利用OPC实现WINCC与监控系统的动态数据交换.中国海洋大学学报,2006,36(4):677-680.

[7]童立均,江智军,何小斌.OPC技术在水厂生产过程控制系统的应用研究.自动化仪表,2008,29(6):37-41.

[8]匡芬芳.OPC技术在液位控制中的应用.自动化仪表,2011,32(6):46-49.

[9]叶海涛,苏建元.VB中利用OPC访问WinCC实现下位机实时报警.测控技术,2005,24(11):50-52.

[10]郭春芬,庄立臣.基于OPC技术的粉尘浓度监控系统研究.煤矿机械,2011,32(1):83-85.

猜你喜欢

磨机组态客户端
高海拔矿山磨机用同步电动机设计
立磨机刮板结构的改进
基于PLC及组态技术的恒温控制系统开发探讨
磨机端盖铸造缺陷研究与工艺研发
水泥厂风扫煤磨机的永磁直驱改造
如何看待传统媒体新闻客户端的“断舍离”?
县级台在突发事件报道中如何应用手机客户端
孵化垂直频道:新闻客户端新策略
大枢纽 云平台 客户端——中央人民广播电台的探索之路
基于PLC和组态的智能电动拧紧系统