-
10月29日
-
以KEPServer为通讯服务软件,使用OPC通讯协议,用VS2005作为开发工具,以VB.NET为开发语言,开发客户端应用程序,实现了上位机与可编程控制器之间的数据交换,实现友好的人机界面和可靠的控制系统。
1. 配置KEPserver与PLC配置KEPServer是与PLC 通信的关键步骤,目的就是在KEPServer 中建立一个OPC Server,为OPC客户端和需要读写PLC地址位之间建立连接。
首先依据所要连接的PLC对设备进行授权,选择“Help - License a Plug-in”后在弹出的对话框中选择使用的PLC设备,输入注册码授权对该设备驱动的使用。依据对OPC服务器的了解,在KEPServer中建立OPC服务器,步骤如下:首先选择“Edit- New Channel”,然后根据所要连接的设备选择DeviceDriver 的类型,就可以建立一个New Channel了。第二步就是依据所用设备的型号以及所接的模块新建Device( 服务器对象),新建Group( 组对象),新建Tag( 项对象),方法与建立一个New Channel 类似。最终界面如图所示。
在 item 的创建过程中对应现场设备的的具体格式可以在新建Tag时的对话框中点击地址栏旁边的 Hints按钮,在 Hints 对话框中给出了对应地址的数据格式,同时,填写完毕后可以地址栏点击旁边的 Check Address 按钮,检测地址填写是否无误。需要说明的是一个 item 中可以指向多个地址(如上图中第一个 item),但需要在 KEPServer 中Tools->Options->OPC Compliance 对话框中勾选 Perform the following operations in agreement with the OPC-DA3.0,保证对该tem 能正常操作。
2 优化配置
组态软件与PLC 的通信是工业控制系统的关键部分,而通信速率则影响着系统的性能, 尤其是对于那些对实时性要求较高的系统。本文从软件编程的角度出发,提出几点提高通信速率的方法。
(1)减少PC 与PLC 之间的通讯变量
OPC 是一种使用变量进行通讯的方法。在具体的通信过程中,通信变量与通信变量之间地位是相等的,即一个布尔量与一个几十或上百字节的数组在读写时通讯时间基本相当。因此,提高PC 与PLC 之间的通讯速率可采取适当压缩通讯变量个数的方法。实际操作中,从PLC上传的布尔型变量应该依据类别和读取频率合并,以16进制读取后分解使用。
(2)减少PC 对PLC 的写入次数
PC 从PLC 读取数据比往PLC 写数据时间要短,通讯的主要时间消耗在PC 往PLC 写入数据的过程中。如果PC 的每个软件周期均有数据写入PLC,通讯速率显然难以提高。因此应该在满足通信要求的前提下尽量减少PC 往PLC 写入数据的次数, 对必须写入的数据采取变化时发送通讯请求然后刷新数据的方法,可比较明显地提高通讯速率。
3 VB .NET 下与 OPC 的通信
KEPServer 可以同时作为 DDE 和 OPC 服务器使用,作为DDE 服务器使用时,“linktopic”项设置为ddename|topicname,具体来说 ddename 在“Tools—Options”—“DDE”项中设置,topicname 通过“Edit”—“Alias Map”对话框中,“Alias一列为“topicname”,“Mapped To”一列为对应设备,“linkitem”为对应设备中具体的数据项。由于 VISUAL BAISC .NET 开发环境中 windows 不支持内置的 DDE,并且 OPC拥有的种种优点,与 KEPServer 的通信使用 OPC 技术。
在 VB.Net 新建项目后要在菜单项目->添加引用对话框COM 组件中添加 OPC DA Automation Wrapper 2.02,才能在VS2005.net 中使用 OPC。通过编写客户端程序来实对对服务器数据的操作。
3.1 声明相关变量
Dim WithEvents AnOPCServer As OPCAutomation.OPCServer
Dim WithEvents ConnectedOPCServer As OPCAutomation.OPCServer
Dim WithEvents ConnectedGroup As OPCAutomation.OPCGroup
Dim OPCItemIDs(NUMITEMS) As String '声明item名称
Dim ClientHandles(NUMITEMS) As Int32 '声明item句柄索引
Dim ItemServerHandles As System.Array ' item服务句柄
Dim OPCItemValue(NUMITEMS) As Object 'item的值
Dim OPCItemValueToWrite(NUMITEMS) As Object 'item写的值
Dim OPCItemIsArray(NUMITEMS) As Integer
3.2 连接需要的 OPC 服务器
ConnectedOPCServer = New OPCAutomation.OPCServer' 创建一个新的OPC服务器对象
ConnectedOPCServer.Connect("KEPware.KEPServerEx.V4", "") '连接对应的OPC,连接本机,后一项数据为空
3.3 创建 group
ConnectedOPCServer.OPCGroups.DefaultGroupIsActive =True‘设置连接的group激活状态默认为开
ConnectedGroup= ConnectedOPCServer.OPCGroups.Add(OPCGroupName) ‘OPCGroupName为添加的group的名称
ConnectedGroup.UpdateRate = Val(GroupUpdateRate)’ 设置group的更新时间为GroupUpdateRate毫秒
ConnectedGroup.IsSubscribed = True
3.4 添加 item
通常每个 group 中有多个 item 存在,在添加的时候输入每个 item 的名称,客户句柄等内容
For i As Short = 1 To NUMITEMS
OPCItemIDs(i) = "Channel1.Device1." + i.ToString ‘item的名称
OPCItemIsArray(i) = 0
ClientHandles(i) = i
Next i
在填写完item的信心后使用如下语句一次可以添加
ItemCount个item:
ConnectedGroup.OPCItems.AddItems(ItemCount, OPCItemIDs, ClientHandles,ItemServerHandles, AddItemServerErrors)
3.5 从 OPC 服务器中获取过程数据
为了避免由于频繁的查询而浪费大量的时间和资源,系统仅在过程数据发生变化时,通过响应DataChange 事件,来刷新OPC客户端程序中的数据项。
Private Sub ConnectedGroup_DataChange(ByValTransactionID As Integer, ByVal NumItems As Integer, ByRef ClientHandles As System.Array, ByRef ItemValues As System.Array, ByRef Qualities As System.Array, ByRef TimeStamps As System.Array) Handles
ConnectedGroup.DataChange
Dim OPCItemValue As String
Dim i As Short
For i = 1 To NumItems
If IsArray(ItemValues(i)) Then‘对应Item所连接存储器为多地址
Dim ItsAnArray As Array
Dim x As Integer
Dim Suffix As String
ItsAnArray = ItemValues(i)
OPCItemIsArray(ClientHandles(i)) =
ItsAnArray.GetUpperBound(0) + 1
OPCItemValue = ""
For x = ItsAnArray.GetLowerBound(0)
To ItsAnArray.GetUpperBound(0)
If x = ItsAnArray.GetUpperBound(0)
Then
Suffix = ""
Else
Suffix = ","
End If
OPCItemValue = OPCItemValue & ItsAnArray(x) & Suffix
Next x
OPCItemValue(ClientHandles(i))=
ItemValues(i)
Else ‘对应Item所连接存储器为单地址
OPCItemValue(ClientHandles(i))=ItemValues(i)
End If
End Sub
在DataChange 事件可以获取读取对应item值的质量戳和时间戳,读取多地址 item 后数值间以“,”隔开,当KEPServer 作为 DDE 客户端连接 DDE 服务器后,如果 item 指向的数据时多地址,读取该 item 数据仍为单地址,不能直接
赋予 Label。
3.6 向 OPC 服务器写入过程数据
KEPServer 对通过 OPC 写入的数据有专门的要求,对多地址的 item 和单地址的也需要不同的处理后再写入:
SyncItemValues(1) = Convert.To String(OPCItemValueToWrite(index)) 多地址:
Dim ItsAnArray As Array
ItsAnArray = Array.CreateInstance(GetType(String),
OPCItemIsArray(index))
SyncItemValues(1) = CObj(ItsAnArray) 写入对应的 item
ConnectedGroup.SyncWrite(ItemCount,SyncItemServerHandles,
SyncItemValues,SyncItemServerErrors)
3.7 注销连接
在退出 OPC 客户端时需要断开与 OPC 服务端的连接,释放与 OPC 服务器的连接,保证 OPC 服务器的正常运行。首先要断开 item,ConnectedGroup.OPCItems.Remove(ItemCount, RemoveItemServerHandles, _RemoveItemServerErrors) 然后再断开 group,并将其置为 nothing
ConnectedOPCServer.OPCGroups.Remove(OPCGroupName)
ConnectedGroup = Nothing
最后断开 server,也将其置为 nothing
ConnectedOPCServer.Disconnect()
ConnectedOPCServer = Nothing
除非注明,文章均为本站原创,转载请注明出处,谢谢。分类: kepware使用向导
关键词:kepwarekepserverPLCvb.netopc通信
本文地址:http://www.lianzhi.net.cn/kepwareshiyongxiangdao/40.html
当前位置:kepware主页 > kepware使用向导 >