加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

ABBAC900F学习笔记231:OPC通讯16

(2022-04-13 13:46:13)
标签:

abb

ac900f

freelance

opc

vba

分类: ABBDCS
资料正文学习结束了,现在根据附录做练习吧。

从 MS-Excel 和 MS-visual basic 访问 OPC 的示例
1.新建一个ABB Freelance项目文件,插入下面的结构
ABBAC900F学习笔记231:OPC通讯16

ABBAC900F学习笔记231:OPC通讯16
因为基于模拟器,所以
ABBAC900F学习笔记231:OPC通讯16
这里的默认网管资源号需要修改的和freelance setting里面设置值一致,后面会有介绍。
2. 在这个项目文件夹下新建一个excel文件,文件名字为OPC_freelance2019.xlsx,文件名字不是关键。
3. 启用excel文件的VBA二次开发功能。
打开刚才新建的excel文件,点击菜单文件-选项,弹出对话框,选中左边的“自定义功能区”,右边勾选“开发”复选框,然后点击确定关闭对话框。
ABBAC900F学习笔记231:OPC通讯16
excel文件界面的菜单会出现一个开发工具的菜单,点击这个菜单,会看到和开发有关的工具栏。
ABBAC900F学习笔记231:OPC通讯16

4.进入该excel文件VBA编辑界面,点击菜单工具-引用,打开对话框,勾选OPCDisp和OPCSRV
ABBAC900F学习笔记231:OPC通讯16

excel表格预先输入下面的信息
ABBAC900F学习笔记231:OPC通讯16

5. 双击sheet1,在右边“通用”-“声明”写入下面的代码

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 = 1 '如果想读取更多的项目,就修改这个数值
'更新那些数组的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"

'设置客户端句柄,激活项目状态
For i = 0 To NrOfItems - 1
        ClientHandles(i) = i + 1 '每个项目的客户端句柄不同
        ActiveStates(i) = True
Next

'添加项目到组
Group.AddItems NrOfItems, ItemIDs, ActiveStates, ClientHandles, ServerHandles, ItemsErrors, ItemObjects, AccessPaths, RequestedDataTypes
'没有按下Ctrl+Break,那么每2秒更新一次数据
Worksheets(1).Visible = True
While True
    ActualHour = Hour(Now())
    ActualMinute = Minute(Now())
    ActualSecond = Second(Now()) + 2
    WaitingTime = TimeSerial(ActualHour, ActualMinute, ActualSecond)
    Application.Wait WaitingTime
    For i = 0 To NrOfItems - 1
        Worksheets(1).Cells(1 + 2, i + 1) = "Server:"
        Worksheets(1).Cells(1 + 2, i + 2) = ServerName
        Worksheets(1).Cells(1 + 3, i + 1) = "Name:"
        Worksheets(1).Cells(1 + 3, i + 2) = ItemObjects(i).ItemID
        Worksheets(1).Cells(2 + 3, i + 1) = "Access Right:"
        Worksheets(1).Cells(2 + 3, i + 2) = ItemObjects(i).AccessRights
        Worksheets(1).Cells(3 + 3, i + 1) = "Value:"
        Worksheets(1).Cells(3 + 3, i + 2) = ItemObjects(i).Value
        Worksheets(1).Cells(4 + 3, i + 1) = "Quality:"
        Worksheets(1).Cells(4 + 3, i + 2) = ItemObjects(i).Quality
        Worksheets(1).Cells(5 + 3, i + 1) = "TimeStamp:"
        Worksheets(1).Cells(5 + 3, i + 2) = ItemObjects(i).Timestamp        
    Next
Wend
End Sub
保存一下,如果提示宏安全啥的
ABBAC900F学习笔记231:OPC通讯16
就另存为.xlsm类型的文件
运行VBA程序,会提示是否加载宏
ABBAC900F学习笔记231:OPC通讯16

点击运行按钮,回到excel主界面,如果在模拟器把freelance运行起来,加载OPC网关,把OPC server运行起来。修改LT1001数值,可以看到excel文件刷新后,数值也跟着变化了
ABBAC900F学习笔记231:OPC通讯16

要注意freelance中资源配置要和freelance setting里面一致,要从ABB程序组启动OPC服务器
ABBAC900F学习笔记231:OPC通讯16

ABBAC900F学习笔记231:OPC通讯16

ABBAC900F学习笔记231:OPC通讯16

这个是简单的读取freelance OPC服务器数据的例子,这是在同一台计算机上运行,读取一个数据,没有读取别的信息。是用血代码的方式工作量较大,维护起来也有要求。


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有