参考文献
[1] The MathWorks. OPC Toolbox 产品信息[EB/OL]. [2021-9-21]. https://ww2.mathworks.cn/products/opc.html#analyze.
[2] The MathWorks. Access Data with OPC Data Access Explorer[EB/OL]. [2021-9-21]. https://ww2.mathworks.cn/help/opc/ug/access-data-with-opc-data-access-explorer.html.
前言
最近的项目涉及到了数据分析,自然而然的就想到了Matlab。PLC可以以OPC方式同WinCC建立通信,那么这种方法是否同样适用于Matlab?显然是可以的,使用OPC Toolbox,即可从 OPC 服务器中读取和写入数据。
我对OPC Toolbox的使用方法不熟悉,实际上对Matlab本身也不太熟悉,为此特意学习一番,汇总成文章。
1 OPC组成
回顾一下OPC DA服务器的一些知识点:
OPC DA服务器采用一种层次结构来组织数据源,共有3类COM对象,分别为OPCServer(服务器)对象、OPCGroup(组)对象和OPCItem(项)对象。前两者必须实现。
服务器对象包含服务器信息并作为组对象的容器,组对象包含自身信息和项对象。
- OPCServer对象负责OPA DA服务器级的信息管理和获取服务器的状态信息;
- OPCGroup对象负责OPA DA客户信息的设定与数据访问;
- OPCItem对象用于管理与过程数据源的连接。
在使用OPC DA Explorer组态客户端时,需要按由上至下的顺序建立各个对象。
2 OPC Server上位机测试软件
OPC技术由两部分组成:OPC服务器和OPC客户端。Matlab通常是作为OPC 客户端使用的,为了建立数据交互,我们还需要一台设备作为OPC 服务器,在这个项目中使用的是PLC。遗憾的是,我的手头只有一台PC,没有PLC,即便如此,我们同样能实现针对Matlab的OPC测试。正如在进行modbus通信测试时,可以使用modbus Poll和modbus Slave作为主站和从站一样,这里使用OPC SERVER SIMULATOR作为OPC Server上位机测试软件。
OPC SERVER SIMULATOR相当简单易用,安装好并进入软件界面后,实际上就无需任何其它操作了。可以看到程序已经预先创建各种数据类型的item,为此本文就不再创建新的item。软件默认以1000ms为一个周期,对列表中所有item进行更新。
3使用OPC DA Explorer访问数据
3.1 OPC通讯建立
面板介绍
在Matlab命令行中敲入"opctool"即可唤出OPC DA Explorer。
添加本地主机
在“Hosts and OPC Servers"中,右击”OPC Network“,在菜单中选择”Add host“,并为其命名,完成后可发现列表已更新,列表中的”opcserversim.Instance.1“即为在同一台PC中运行的OPC服务器上位机软件。
创建和连接OPC DA服务器对象
右击”opcserversim.Instance.1“,选择"Creat Client",可看到该OPC服务器对象被”MATLAB OPC DA Clients“下方:
在属性界面中,选择连接该服务器对象:
添加OPC Group和OPC Item对象
右击”localhost/opcserversim.Instance.1“,选择”Add Group“:
右击新创建的组对象”Group0“,选择”Add Item“:
由于OPC服务器对象在线的缘故,我们可以直接选择需要添加的项对象:
仍旧选中”Group0“,在”Read/Write“选项卡中,我们可以直接通过项数据列表实现对项对象的读和写。
使用PLOT绘制二维线图
记录属性配置
记录属性面板如下图所示:
Rate and records
在此可进行更新速率和记录条数的配置,记录时长即为rate*records,默认0.5s更新一次,共记录120次,即60s。
Log destination
可以选择将记录存放至内存或硬盘中。
Logging task
可以进行数据记录任务的创建,参见下一小节。
记录的开始、结束与线图的绘制
在“Logging task”中,点击“Start”按钮即开始进行数据记录,进度条用于显示记录进度,同时在进度条下方的“ records available”中会显示有效记录条数。点击“Stop”可中止记录,点击“Flush”,可以清除已存储的记录。
注意,如果在组对象中,没有任何一个项对象值发生更新,则记录将不会更新。
记录结束后,在“record usage”中选择“plot”,使用所有已记录的可用数据来绘制二维线图。
二维线图的绘制效果如下图所示,这里我只记录了一个项对象。
我们可以注意到一个问题,使用这种方法无法绘制实时曲线,这会给我们的调试工作造成麻烦,这也是为什么在很多教程中最后使用了simulink中的示波器进行数据监视。但这并不是说非要使用simulink,也可以使用命令行,有空再写吧。