ABBAC900F学习笔记234:OPC通讯19
标签:
abbac900ffreelanceopc |
分类: ABBDCS |
前面实际练习了在同一台计算机上,使用excel的VBA读写ABB freelance OPC
server变量的方法,虽然有点阻碍,但还是顺利实现了。这一篇联系一下在同一台台计算机上,freelance作为OPC
server,读写取系统消息怎么实现。
ClientHandles(i) = i + 1 '每个项目的客户端句柄不同
ActiveStates(i) = True
ActualHour =
Hour(Now())
ActualMinute =
Minute(Now())
ActualSecond =
Second(Now()) + 2
WaitingTime =
TimeSerial(ActualHour, ActualMinute, ActualSecond)
Application.Wait
WaitingTime
Worksheets(1).Cells(3,
1) = "服务器名:"
Worksheets(1).Cells(3,
2) = ServerName
Worksheets(1).Cells(4,
1) = "标签名:"
Worksheets(1).Cells(4,
2) = ItemObjects(0).ItemID
Worksheets(1).Cells(4,
3) = "访问权限:"
Worksheets(1).Cells(4,
4) = ItemObjects(0).AccessRights
Worksheets(1).Cells(4,
5) = "输入数值:"
Worksheets(1).Cells(4,
6) = ItemObjects(0).Value
Worksheets(1).Cells(4,
7) = "质量:"
Worksheets(1).Cells(4,
8) = ItemObjects(0).Quality
Worksheets(1).Cells(4,
9) = "时间戳:"
Worksheets(1).Cells(4,
10) = ItemObjects(0).TimeStamp
Worksheets(1).Cells(5,
1) = "标签名:"
Worksheets(1).Cells(5,
2) = ItemObjects(1).ItemID
Worksheets(1).Cells(5,
3) = "访问权限:"
Worksheets(1).Cells(5,
4) = ItemObjects(1).AccessRights
Worksheets(1).Cells(5,
5) = "第一个限定数值:"
Worksheets(1).Cells(5,
6) = ItemObjects(1).Value
Worksheets(1).Cells(5,
7) = "质量:"
Worksheets(1).Cells(5,
8) = ItemObjects(1).Quality
Worksheets(1).Cells(5,
9) = "时间戳:"
Worksheets(1).Cells(5,
10) = ItemObjects(1).TimeStamp
Worksheets(1).Cells(6,
1) = "标签名:"
Worksheets(1).Cells(6,
2) = ItemObjects(2).ItemID
Worksheets(1).Cells(6,
3) = "访问权限:"
Worksheets(1).Cells(6,
4) = ItemObjects(2).AccessRights
Worksheets(1).Cells(6,
5) = "第二个限定数值:"
Worksheets(1).Cells(6,
6) = ItemObjects(2).Value
Worksheets(1).Cells(6,
7) = "质量:"
Worksheets(1).Cells(6,
8) = ItemObjects(2).Quality
Worksheets(1).Cells(6,
9) = "时间戳:"
Worksheets(1).Cells(6,
10) = ItemObjects(2).TimeStamp
Worksheets(1).Cells(7,
1) = "标签名:"
Worksheets(1).Cells(7,
2) = ItemObjects(3).ItemID
Worksheets(1).Cells(7,
3) = "访问权限:"
Worksheets(1).Cells(7,
4) = ItemObjects(3).AccessRights
Worksheets(1).Cells(7,
5) = "第一个报警输出:"
Worksheets(1).Cells(7,
6) = ItemObjects(3).Value
Worksheets(1).Cells(7,
7) = "质量:"
Worksheets(1).Cells(7,
8) = ItemObjects(3).Quality
Worksheets(1).Cells(7,
9) = "时间戳:"
Worksheets(1).Cells(7,
10) = ItemObjects(3).TimeStamp
Worksheets(1).Cells(8,
1) = "标签名:"
Worksheets(1).Cells(8,
2) = ItemObjects(4).ItemID
Worksheets(1).Cells(8,
3) = "访问权限:"
Worksheets(1).Cells(8,
4) = ItemObjects(4).AccessRights
Worksheets(1).Cells(8,
5) = "第二个报警输出:"
Worksheets(1).Cells(8,
6) = ItemObjects(4).Value
Worksheets(1).Cells(8,
7) = "质量:"
Worksheets(1).Cells(8,
8) = ItemObjects(4).Quality
Worksheets(1).Cells(8,
9) = "时间戳:"
Worksheets(1).Cells(8,
10) = ItemObjects(4).TimeStamp
Worksheets(1).Cells(9,
1) = "标签名:"
Worksheets(1).Cells(9,
2) = ItemObjects(5).ItemID
Worksheets(1).Cells(9,
3) = "访问权限:"
Worksheets(1).Cells(9,
4) = ItemObjects(5).AccessRights
Worksheets(1).Cells(9,
5) = "量程下限:"
Worksheets(1).Cells(9,
6) = ItemObjects(5).Value
Worksheets(1).Cells(9,
7) = "质量:"
Worksheets(1).Cells(9,
8) = ItemObjects(5).Quality
Worksheets(1).Cells(9,
9) = "时间戳:"
Worksheets(1).Cells(9,
10) = ItemObjects(5).TimeStamp
Worksheets(1).Cells(10,
1) = "标签名:"
Worksheets(1).Cells(10,
2) = ItemObjects(6).ItemID
Worksheets(1).Cells(10,
3) = "访问权限:"
Worksheets(1).Cells(10,
4) = ItemObjects(6).AccessRights
Worksheets(1).Cells(10,
5) = "量程上限:"
Worksheets(1).Cells(10,
6) = ItemObjects(6).Value
Worksheets(1).Cells(10,
7) = "质量:"
Worksheets(1).Cells(10,
8) = ItemObjects(6).Quality
Worksheets(1).Cells(10,
9) = "时间戳:"
Worksheets(1).Cells(10,
10) = ItemObjects(6).TimeStamp
昨天做的ABB项目上加入功能块,做模拟量报警功能
和昨天的练习一样,新建一个可以运行宏的excel文件,在开发工具VBA里面,先勾选
插入下面的代码:
Option Explicit
Dim Server As IOPCServerDisp '引用服务器对象
Dim ServerName As String '服务器名字
Dim Group As IOPCItemMgtDisp '引用组对象
Dim ServerUpdateRate As Long '更新速率
Dim ServerGroupHandle As Long '将包含服务器生成的组句柄
Dim NrOfItems As Long '本程序OPC项目的数量
Dim ItemIDs() As String 'OPC项名字数组
Dim ActiveStates() As Boolean 'OPC每个项的活动状态数组
Dim ClientHandles() As Long '每个项目的客户端句柄的数组
Dim AccessPaths() As String '每一个项目的访问路径的数组
Dim RequestedDataTypes() As Integer '每一个项目需求数据类型的数组
Dim ItemsErrors As Variant '每一个项目的错误代码
Dim ServerHandles As Variant '包含每一个项目的服务器句柄
Dim ItemObjects As Variant '将包含对每个项目的引用
Sub OPCExmpleMacro()
Dim i, ActualHour, ActualMinute, ActualSecond, WaitingTime
'本地变量
NrOfItems = 7 '如果想读取更多的项目,就修改这个数值
'更新那些数组的daxiao
ReDim ItemIDs(NrOfItems)
ReDim AccessPaths(NrOfItems)
ReDim ClientHandles(NrOfItems)
ReDim AccessPaths(NrOfItems)
ReDim RequestedDataTypes(NrOfItems)
ReDim ActiveStates(NrOfItems)
ReDim ItemObjects(NrOfItems)
'开始配置服务器
ServerName = "Freelance2000OPCServer.24.1"
Set Server = CreateObject(ServerName)
'添加一个组到服务器
Set Group = Server.AddGroup("Group 1", True, 1000, 1, 0,
&H409, ServerGroupHandle, ServerUpdateRate)
'设置项目名字
ItemIDs(0) = "LT1001_ANA/IN" '功能块输入数值
ItemIDs(1) = "LT1001_ANA/L1" '第1个限值设定值
ItemIDs(2) = "LT1001_ANA/L2" '第2个限值设定值
ItemIDs(3) = "LT1001_ANA/SL1" '第1个报警输出
ItemIDs(4) = "LT1001_ANA/SL2" '第2个报警输出
ItemIDs(5) = "LT1001_ANA/Mba" '量程上限
ItemIDs(6) = "LT1001_ANA/Mbe" '量程下限
'设置客户端句柄,激活项目状态
For i = 0 To NrOfItems - 1
Next
'添加项目到组
Group.AddItems NrOfItems, ItemIDs, ActiveStates,
ClientHandles, ServerHandles, ItemsErrors, ItemObjects,
AccessPaths, RequestedDataTypes
'没有按下Ctrl+Break,那么每2秒更新一次数据
Worksheets(1).Visible = True
While True
Wend
End Sub
执行这些代码,可以看到标签LT1001_ANA中的参数被读取过来了
仔细看上面的表格,可以发现时间戳比计算机时间,也就是北京时间差了8小时,这个是时区差距造成的。在上面的程序里面修改时间戳语句,小时那里+8/24就可以了,比如:
Worksheets(1).Cells(4, 10) = ItemObjects(0).TimeStamp + 8 /
24
这样一来,表格就是这样子了

加载中…