Matlab:利用Matlab自带的OPC工具箱实现Matlab与PLC的通讯

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dashumak/article/details/81352237

1、OPC简介

OPC是Object Linking and Embedding (OLE for Process Control)的缩写,它是以微软公司COM和DCOM技术为基础,创建的一种应用于自动化领域的软件接口标准。OPC采用开放式的数据交互,能使不同公司的软硬件组成一个有机的整体,传输可靠,速度快,适于大批量数据交换,已经成为工控行业新的通信标准,广泛应用在工控行业的各个领域。

OPC采用客户/服务器体系,目标是在客户和服务器之间建立一种通信和数据交换的工业标准机制,只要遵循OPC标准,数据交互对两者来说都是透明的。各客户/服务器间形成即插即用的简单规范的链接关系,即不同的客户软件能够访问任意的数据源。OPC使用主要包括OPC 服务器与OPC客户两个部分,OPC服务器是数据的供应方,负责为OPC客户提供所需的数据;OPC客户是数据的使用方,使用OPC服务器提供的数据。OPC数据存取服务器主要由服务器对象(Server)、组对象(Group)和数据项对象(Item)3类对象组成。3类对象的层次关系图如下图所示。

OPC具体使用必须遵循下列步骤:

第一,OPC客户要能够连接到DA服务器上,并建立OPC组(Group)和OPC 数据项(Item)。

第二,OPC客户通过对其建立的Group和Item进行访问实现对过程数据的访问,客户可以选择设备或缓冲区作为其访问的数据源。客户的过程数据访问包括过程数据的读取、更新、订阅、写入等。

第三,完成通知,当服务器响应客户的过程数据访问请求,并处理完毕时通知客户。

2、MATLAB与PLC之间的通讯实现

首先要明白计算机与OPC通信的架构。一般的PLC不直接开放自己设备的OPC接口,而是通过PLC的上位与外界进行通讯(比如要与西门子PLC进行通讯,实际上是:PLC通过自己不开放的接口与Wincc进行数据交互,然后自己编写的OPC通讯程序作为客户端与Wincc(作为OPC服务器)进行通讯,因此一般来说,与硬件设备进行通讯采用OPC方式的实时性不太好)。

在MATLAB指令空间中输入“opctool”,打开OPC工具箱进行OPC的配置,在MATLAB的OPC工具箱中将MATLAB设为本地服务器,然后把“CoDeSys.OPC.02”添加为客户,然后点击“connect”,连上之后,在客户端添加一个组,重命名为“INPUT”,然后在这个组中添加一个对象,画面如下图所示,可以看到,在PLC配置中设置的两个变量都显示在添加对象的对话框的左边,选中“INPUT”变量,然后点击“add”,就可以看到,PLC的变量“INPUT”添加到了组“INPUT”中,用同样的方法添加一个“OUTPUT”组,然后将PLC的变量“OUTPUT”添加到组“OUTPUT”中,这时在PLC的模拟量输入端给一个5V的信号,就可以看到在PLC编程软件PLC配置中,模拟量输入有了一个整型值,而在MATLAB的OPC工具箱中,选中“INPUT”变量,也显示了一个整型值,就可以看到它的值和PLC配置中模拟量端口显示的整型值完全相等。

     

3、simulink与OPC

下面再看一下在MATLAB的simulink中对这个模拟量输入的实时监测,然后将这个模拟量再送给到模拟量输出端子。在MATLAB的simulink工作空间中加入“OPC Configuration”、“OPC Read”、“OPC Write”三个模块,做好相应的配置,“OPC Read”模块中加入变量“INPUT”作为对象,“OPC Write”模块中加入变量“OUTPUT”作为对象,添加完毕之后可以看到在simulink工作空间的“OPC Read”和“OPC Write”中,显示了PLC的两个变量名,这说明PLC的两个变量都已经导入到simulink的工作空间。然后,将“OPC Read”的端子V和“OPC Write”的端子相连,再在中间加入一个“scope”,来实时显示从PLC读过来的数据,配置好的simulink工作空间如下图所示。设置完毕,开始仿真,双击“scope”,可以看到随着时间的推移,数据也在实时的显示,通过调节模拟量输入端的电压值,可以看到显示数据也在随着调节而实时的变化,如下图所示

这时再来看PLC硬件配置中在线显示的数据,模拟量输入端口显示的数据和模拟量输出端口显示的数据完全相等,跟“scope”监测到的数据以及opctool中组“INPUT”和组“OUTPUT”中的两个变量的数据也完全一样,可以得出,模拟量输入的值通过MATLAB的simulink中OPC准确无误的传送到了模拟量输出端口。

猜你喜欢

转载自blog.csdn.net/dashumak/article/details/81352237