'写入单个变量数据
Public Function WriteData(ItemName As String, ItemWriteData As Variant)
Trace ">WriteData to Wincc start..."
Trace ">ItemName: " & ItemName & " Value: " & ItemWriteData
If Dll_is_Initial = False Then
Trace "<WriteData Cancelled,Because Dll_Initial has not been called"
Exit Function
End If
If ServerConnected = False Then
Trace "<WriteData Cancelled,Because ConnectServer has not been called"
Exit Function
End If
If Configuration_is_Set = False Then
Trace "<WriteData Cancelled,Because configuration has not been set"
Exit Function
End If
On Error GoTo ErrorHandler
Set GroupObj = GroupCollection.GetOPCGroup(AllItemsInfo.GetItem_Group(ItemName))
Set ItemObj = GroupObj.OPCItems.GetOPCItem(AllItemsInfo.GetItem_ServerHandle(ItemName))
ItemObj.Write ItemWriteData
Trace "<WriteData to Wincc OK"
Set GroupObj = Nothing
Set ItemObj = Nothing
Exit Function
ErrorHandler:
Trace "<Write Data to Wincc Error,Please make sure Item's Name and Write-data is correct"
Set GroupObj = Nothing
Set ItemObj = Nothing
End Function
'列举某个变量的属性
Private Function GetItemProperty(ItemID As String)
Dim Count As Long, i As Long
Dim PropertyIDs() As Long
Dim DeSCRJPTions() As String
Dim DataTypes() As Integer
Dim PropertyValues() As Variant
Dim Errors() As Long
ServerObj.QueryAvailableProperties ItemID, Count, PropertyIDs, DeSCRJPTions, DataTypes
ServerObj.GetItemProperties ItemID, Count, PropertyIDs, PropertyValues, Errors
Trace "=====Get ItemID Property Start======"
For i = 1 To Count
Trace "=" & PropertyIDs(i) & " " & DeSCRJPTions(i) & " " & PropertyValues(i)
Next
Trace "=====Get ItemID Property End======"
End Function
'获取某个变量的数据类型
Private Function GetItemDataType(ItemID As String) As Long
Dim Count As Long
Dim PropertyIDs(1) As Long
Dim PropertyValues() As Variant
Dim Errors() As Long
Count = 1
PropertyIDs(1) = 1
ServerObj.GetItemProperties ItemID, Count, PropertyIDs, PropertyValues, Errors
GetItemDataType = PropertyValues(1)
End Function
'服务器关闭
Private Sub ServerObj_ServerShutDown(ByVal Reason As String)
Trace "! Dll is shutdown,Following is the Reason:"
Trace "! " & Reason
ServerObj.Disconnect
Configuration_is_Set = False
Dll_is_Initial = False
ServerConnected = False
End Sub
'获取服务器连接状态
Public Property Get Server_Connected() As Boolean
Server_Connected = Configuration_is_Set
End Property
ItemInfo:
Option Explicit
Public ItemName As String
Public GroupName As String
Public ItemServerHandle As Long
Public ItemClientHandle As Long
ItemsInfo:
Option Explicit
Dim Collection_ItemsInfo As New Collection ' 定义OPCItem 信息
Public Function ItemInfo_Add(Name As String, Group As String, ClientHandle As Long, ServerHandle As Long)
Dim Info As New ItemInfo
With Info
.ItemName = Name
.GroupName = Group
.ItemClientHandle = ClientHandle
.ItemServerHandle = ServerHandle
End With
Collection_ItemsInfo.Add Info
End Function
'获取Item属于的组名
Public Function GetItem_Group(ItemID As String) As String
Dim Info As ItemInfo
For Each Info In Collection_ItemsInfo
If Info.ItemName = ItemID Then
GetItem_Group = Info.GroupName
Exit Function
End If
Next
End Function
'获取Item的ServerHandle
Public Function GetItem_ServerHandle(ItemID As String) As Long
Dim Info As ItemInfo
For Each Info In Collection_ItemsInfo
If Info.ItemName = ItemID Then
GetItem_ServerHandle = Info.ItemServerHandle
Exit Function
End If
Next
End Function
'获取Item的ClientHandle
Public Function GetItem_ClientHandle(ItemID As String)
Dim Info As ItemInfo
For Each Info In Collection_ItemsInfo
If Info.ItemName = ItemID Then
GetItem_ClientHandle = Info.ItemClientHandle
Exit Function
End If
Next
End Function
'获取Item的名称
Public Function GetItem_Name(ItemClientHandle As Long)
Dim Info As ItemInfo
For Each Info In Collection_ItemsInfo
If Info.ItemClientHandle = ItemClientHandle Then
GetItem_Name = Info.ItemName
Exit Function
End If
Next
End Function
将以上代码输入VB并编译生成OPC_DLL.dll文件,完成后注册。OPC调用函数请参阅opcdataaccessautov2-02_76文件。
四、应用介绍
1、 新建ini配置文件(保存于系统目录下),如wincc.ini。注意组中定义的变量名称必须存在于OPCServer中!右边//后的内容仅为注释,不应在文件中存在!内容如下:
[TRACE]
TraceOn=1 //=1:打开调试开关
TraceFile="D:\OPCTrace.log" //输出的调试文件
上一篇:智能化小区与信息化小区