1、准备使用OPC工具箱软件
1)安装OPC基金会核心组件
OPC基金会提供了一组工具浏览其他OPC服务器的计算机网络,并与OPC服务器进行通信。这些工具被称为OPC基金会的核心组件,并附带OPC软件工具箱。
安装OPC基金会的核心组件,将使用opcregister函数。还可以使用opcregister函数来删除(’remove’)或修复(’repair’)OPC基金会的核心安装组件。
opcregister('install')
2)安装Matrikon OPC仿真服务器:
MatrikonOPCServe软件下载链接:
https://download.csdn.net/download/dashumak/10585394
MatrikonOPCServe软件安装说明:
https://blog.csdn.net/dashumak/article/details/81448764
3)配置DCOM:
DCOM(分布式组件对象模型,分布式组件对象模式)是一系列微软的概念和程序接口,利用这个接口,客户端程序对象能够请求来自网络中另一台计算机上的服务器程序对象。DCOM基于组件对象模型(COM),COM提供了一套允许同一台计算机上的客户端和服务器之间进行通信的接口(运行在Windows95或者其后的版本上)。
DCOM配置说明和Matrikon OPC仿真服务器使用说明:
https://blog.csdn.net/zhougynui/article/details/51509232
2、探索可用的OPC服务器
1)前提条件
- 计算机的hostname的OPC服务器已经安装。一般情况下,主机名是一个描述性术语,或一个IP地址。
- 主机上想要访问服务器的server ID。因为一台计算机可以做多个OPC服务器的主机,每个OPC服务器上安装电脑在安装过程中提供一个惟一的ID。
你的网络管理员将为所有以你的网络为条件的OPC服务器的电脑规定主机名称。
2)确定服务器主机id
当一个OPC服务器被安装,一个独特的服务器ID必须分配到OPC服务器。服务器ID为特定主机上的OPC服务器的实例提供了一个独特的名称,即使多个相同的服务器软件安装在同一台机器上。
为了确定安装在主机上的OPC服务器的服务器id,可以调用opcserverinfo函数,指定主机名作为唯一的参数。当调用这个语句时,函数将返回一个包含主机上所有OPC服务器信息的结构。
info = opcserverinfo('localhost')
3)opcserverinfo返回的服务器信息:
Host:文本字符串来标识主机的名称。注意没有执行IP地址的名称转换。
ServerID:单元阵列包含所有访问主机的OPC服务器的服务器id。
ServerDescription:单元阵列包含为每个服务器的描述性文本。
OPCSpecification:单元阵列包含服务器提供的OPC规范。目前,OPC工具箱软件只支持’DA2’规范。
ObjectConstructor:单元阵列包含你可以用于创建于服务器相关的OPC数据存取的客服端对象的默认语法。查看Creating a Client Object获取更多信息。
3、连接到OPC服务器
1)创建一个客户端对象
创建一个opcda对象,调用opcda函数制定主机名和服务器ID。使用opcserverinfo函数检索此信息。
这个示例创建了一个opcda对象来表示Matrikon OPC模拟服务器的连接。
da = opcda('localhost', 'Matrikon.OPC.Simulation.1');
2)查看客户端对象的概要
在命令行输入为对象定义的变量名,查看创建的opcda对象的特征概要。例如,这是对象da的概要。
da
1.概要的标题包含了opcda客户端对象的名称。客户端对象的默认名称由'host/serverID'组成。可以使用set函数改变客户端对象的名称,详见Configuring OPC Toolbox Object Properties。
2. Server Parameters提供与OPC服务器相关联的客户端信息。这部分提供了主机名、服务器ID及连接状态。可以通过connect函数连接OPC服务器,详见Connecting a Client to the Server。
3. Object Parameters部分包含客户端上OPC数据存取组(dagroup)对象的配置状态信息。使用组对象来存放收集的项目。创建组对象详见Creating Data Access Group Objects。
3)将客户端连接到服务器
使用connect函数连接到服务器。
connect(da);
一旦连接到服务器,客户端概要中的状态信息显示将由disconnected变为connected。
如果由于某些原因客户端不能连接到服务器(例如,OPC服务器关机)将产生一条错误信息。排除连接OPC服务器故障的方法,见Troubleshooting。
当客户端连接到服务器,可以执行以下任务:
1.获取OPC服务器的诊断信息,如服务器状态、最后更新时间以及支持的接口。使用opcserverinfo函数获取这些信息。
2. 浏览可用的OPC服务器命名空间信息服务器项目。
3.创建用于OPC服务器数据交互的组和项目。
4)浏览OPC服务器命名空间
已连接的客户端对象允许与OPC服务器获取该服务器的命名空间的信息。服务器命名空间允许OPC服务器提供的所有数据点访问命名的每个数据点与服务器项目,然后将这些服务器项目编入命名空间为每个服务器条目提供的特定的标识符中。
5)获取服务器的命名空间
使用getnamespace函数来检索一个OPC服务器的命名空间。必须指定客户端对象连接到你感兴趣的服务器。命名空间返回的是一个包含命名空间中所有节点信息的结构数组。
下例是检索安装在本地主机上的Matrikon OPC仿真服务器的命名空间。
da = opcda('localhost','Matrikon.OPC.Simulation.1');
connect(da);
ns = getnamespace(da)
6)结构的字段如下表中所描述的:
Name:节点的名称,作为一个字符串。
FullyQualifiedID:节点的完全限定项ID,一个字符串。完全限定项ID是由节点的路径组成,用字符'.'连接。创建一个与该节点相关联的项目对象时使用完全限定项ID。
NodeType:节点的类型。节点的类型可以是'branch'(包含其他节点)或者'leaf'(不包含其他分支)。
Nodes:子节点。子节点是与ns同一个字段的数据结构,表示这个命名空间分支中包含的子节点。
对于上一个例子,检索命名空间显示:
ns(1)
ans =
Name: 'Simulation Items'
FullyQualifiedID: 'Simulation Items'
NodeType: 'branch'
Nodes: [8x1 struct]
ns(3)
ans =
Name: 'Clients'
FullyQualifiedID: 'Clients'
NodeType: 'leaf'
Nodes: []
从上面的信息,第一个节点是一个分支节点'Simulation Items'。由于它是分支节点,很可能不是一个有效的服务器项目。第三个节点是一个完全限定ID 'Clients'的叶节点(不包含其它子节点)。由于它是叶节点,这是最有可能通过创建项目对象来监控的服务器项目。
进一步查看节点的分支,需要引用分支节点的节点字段。例如,第一个节点'Simulation Items'中包含的获得如下:
ns(1).Nodes(1)
ans =
Name: 'Bucket Brigade'
FullyQualifiedID: 'Bucket Brigade.'
NodeType: 'branch'
Nodes: [14x1 struct]
返回的结果显示,第一个节点'Simulation Items'的分支节点名为'Bucket Brigade',并且包含14个子节点。
ns(1).Nodes(1).Nodes(9)
ans =
Name: 'Real8'
FullyQualifiedID: 'Bucket Brigade.Real8'
NodeType: 'leaf'
Nodes: []
'Bucket Brigade'中第九个子节点名为'Real8'并且有一个完全限定的ID 'Bucket Brigade.Real8'。在使用OPC软件创建项目时,可以使用完全限定ID访问服务器命名空间中的特定的节点。
您可以使用flatnamespace函数平面化层次命名空间。
7)获得特定服务器项目的信息
除了向所有客户端发布命名空间,OPC服务器还向命名空间中所有服务器项目提供属性信息。这些属性提供存储服务器项目值的服务器的数据格式的信息,服务项目描述,以及创建服务器项目时附加的属性配置。附加属性可能包括服务器项目范围内的信息,最高等级的服务器可以更新服务器项目值。
通过定义的一组property ID来访问属性。属性ID是一个定义服务器项目特定属性的简单数字。属性ID被分为以下三类:
- 每个OPC服务器都必须提供OPC特定属性(1-99)。OPC特定属性包括服务器项目的值,性能和时间戳。
- OPC推荐属性(100-4999)OPC服务器可以提供。这些属性包括最大最小值,服务器项目描述,及其他通用的属性。
- 供应商特定属性(5000+)OPC服务器可以定义及使用。这些属性可能对于每个OPC服务器都不一样,并为OPC服务器制造商定义他们自己的属性提供空间。
查询服务器项目的属性用serveritemprops函数,指定客服端对象,想要的服务器项目的完全限定项目的ID,及一个想要检索的可选属性ID矢量。如果没有指定属性ID,将返回服务器项目所有的定义的属性。
注意:通过使用getnamespace函数和serveritems函数获取的服务器完全限定项目ID,只将所有的完全限定ID返回到一个单元数组字符串中。
下例中查询服务器项目'Bucket Brigade.ArrayOfReal8'的项目描述属性(ID 101):
p = serveritemprops(da, 'Bucket Brigade.ArrayOfReal8', 101)
p =
PropID: 101
PropDescription: 'Item Description'
PropValue: 'Bucket brigade item.'
4、故障排除
1)未发现OPC服务器
首先,检测客户端是否能与主机通信。你可以在主机上尝试运行命令行并使用’ping’命令。或者,尝试使用网上邻居来浏览主机。
如果可以与主机通信,但是主机上找不到OPC服务器(使用opcserverinfo命令),然后可能需要在工作站上重装OPC基本核心组件。可以运行opcregister函数来修复OPC基本核心组件安装。
2)"Class not registered"错误
如果在尝试使用opcserverinfo查询服务器,或者尝试在OPC tool GUI中添加一个主机,OPC基本核心组件未正确安装时出现这种错误。请按照正确的描述安装OPC基本核心组件。
3)不能查询服务器
如果不能使用opcserverinfo查询服务器,最常见的原因是本地DCOM安全设置配置错误。
4)不能连接服务器
没有连接OPC服务器能力通常表明服务器上的安全模块不允许进行初始连接。
5)不能创建组
如果可以连接服务器但是不能创建组,最常见的原因是本地DCOM安全设置配置错误。
6)查询界面出错
如果在尝试添加组到一个已连接的客户端对象时出现这种错误:
Error occurred while querying interface: IID_IOPCDataCallback
本地DCOM安全设置不允许OPC服务器连接本地机器上的OPC工具箱软件客户端。