通过OPCUA协议连接设备

1.OPC规范

OPC 是一种技术标准,用于通过专门的驱动程序在硬件和软件之间交换信息。信息在可编程逻辑控制器 (PLC)、仪表和数据库等项目之间交换。OPC 由 OPC 基金会发布和维护,该 组织由数百家成员公司组成,致力于确保车间内外的互操作性。

最初的 OPC 规范使用 Microsoft分布式组件对象模型 ( DCOM ) 技术为工业应用程序提供统一的数据共享方式。有几个单独的规范提供了数据访问 (OPC-DA)、警报和事件 (A&E) 以及历史数据 (HDA) 等功能。

事实证明,DCOM 总是难以使用,到 2004 年,很明显需要更现代的解决方案。因此,开发了一种新规范,该规范使用通用网络原则(如 TCP/IP)而不是 DCOM,独立于平台,并将各种单独的规范合并为一个:开放流程连接统一架构 (OPC UA)。

2.OPC UA

OPC UA 是平台和供应商中立数据访问的领先工业标准。使用 OPC UA 可以轻松将任何 PLC 设备连接到 Ignition。对于那些具有 Ignition 设备驱动程序的设备,设备连接是通过以太网完成的。OPC UA 模块使 Ignition 充当 OPC UA 服务器,将其内置驱动程序收集的数据提供给其他 Ignition 模块以及第三方 OPC UA 客户端。

OPC UA 是 OPC 规范的最新版本,它提供平台和供应商中立的工业数据传输和使用。该规范在平台中起着至关重要的作用,并且是网关中使用的主要数据访问规范。

3.服务器和客户端

在讨论OPC时,通常会谈到 OPC服务器 和 OPC客户端。OPC 服务器是一种实现 OPC 接口并提供数据的软件。OPC 客户端是连接到OPC 服务器并使用规范来检索和处理数据的应用程序。

HiperMatrix平台提供 OPC UA 客户端功能。可以连接到任何兼容的 OPC UA 服务器并处理数据。目前不提供OPC服务器的功能。

OPC COM 模块可用于提供对旧的、基于 DCOM 的 OPC-DA 服务器的客户端访问。

4.与OPC UA连接

在与opcua 服务端建立连接时,需要根据服务端的相关配置进行匹配,才能够连接。

通过使用 kepServer 模拟Opcua 服务器 ,进行不同模式的连接测试。

​ 使用软件:kepware6.5

小Tips:使用 kepServer 模拟opcua服务器时,注意网段的一致性

此处使用了kepServer 作为模拟服务端,使用其他也可,建立连接的过程组成大体相似。

5.匿名连接

匿名访问属于安全性最低的连接方式,使用此种策略仅需根据 opcua服务端的 ip与端口 即可实现连接。

对于kepServer 的设置

​双击kepServer配置,右键项目打开属性。

image-20211018095912578

修改OPCUA客户端允许匿名访问为“是”。

image-20211018095936916

右键右下角kepware小图标,点击OPC UA配置。

image-20211018095955641

image-20210927131417339

右键kepware图标,重新初始化一下。

image-20211018100151205

使用网站充当客户端进行连接

(1)进入边缘连接服务-连接管理,点击新建连接。

image-20210908134850258

(2)选择通用协议-OPC UA。

(3)新建OPC UA连接所有参数项。

一般 内容
名称 输入设备连接的名称,必须以中文或英文字母开头,最多支持20个字符
描述 输入设备连接的描述
节点组 节点组指的是集群场景下该连接可以指定给某个边缘节点,属于该节点的设备均可使用此连接,不属于该节点的设备无法正常使用此连接
启用 默认创建是直接启用,如关闭勾选,列表中不会启用
连接性
主机名 输入主机IP 地址。比如192.168.13.32
端口 OPC UA连接时使用的端口。默认值为 105。
超时 请求超时时间,以毫秒为单位。默认值为 10,000。超出时间后不再请求
高级
用户名 输入用户名,需输入OPC UA服务端配置的用户名及密码
密码 输入密码
匿名访问 匿名访问,默认为true, 匿名访问时不需要配置用户名和密码
消息安全模式 选择对应的消息安全模式,三种模式 None, Sign, Sign&Encrypt
安全策略 配置OPC UA服务端设置的安全策略,如Basic256Sha256

(4)可以点击测试连接测试连接是否可以成功,如失败可以在连接日志中查看失败原因。

(5)点击提交,连接状态应显示为已连接。启动状态为启用。

images-20210903143957

5.1 使用用户名密码进行连接

对kepServer 服务端进行配置的更改

在kepServer上创建对应的用户

image-20211018101707508

用户名:opc_ua
密码:123456

双击kepServer配置,右键项目打开属性。

image-20211018095912578

修改OPCUA客户端允许匿名访问为“否”。

image-20211018100929574

右键kepware图标,重新初始化一下。

image-20211018100151205

使用网站充当客户端进行连接

修改连接

image-20211018101810766

配置一致即可连接成功

5.2 使用安全策略证书进行连接

对于证书通信的大致概括

此时就用到了 ssh 相关知识。

​ 在建立通讯的时候客户端可以用自签发的证书来链接服务端,在建立通讯过程会发生证书交换,也就是客户端会发送自己的证书到服务端,同时服务端也会发送自己的证书给客户端。

​ 然后服务端会把客户端证书放到不受信任的证书文件目录,因为我们的证书是自签发的所以服务器是不会信任的,然后我们需要把服务器的证书复制到服务器的受信任目录就可以了。

修改kepServer 对应配置

相关配置如下

image-20210927112706635

右键kepware图标,重新初始化一下。

image-20211018100151205

使用网站充当客户端进行连接

修改连接,将配置与服务端进行匹配。

image-20211018101443845

若不上传证书,则使用慧程默认的opcua证书进行连接服务端。

点击测试连接,此时项目将进行证书的交换以确保安全,在第一次交换之后,服务端与客户端分别拿到对方的证书,进行检查信任即可实现连接。

对应操作如下:

当点击测试连接之后,会出现连接失败情况,此时在kepServer 的opcua 设置中 可查看客户端证书的交换信息。

image-20211018102417287

双击查看对应的证书信息。

image-20211018102507544

确认无误,可允许连接,点击信任 再次进行连接,即可实现通信。

image-20211018102637820

6.如何从PLC中获取数据

将数据从PLC获取到HiperMatrix需要两步过程:

(1)添加设备:在设备管理中,点击添加设备, 创建设备详见 创建设备

(2)添加属性:在设备列表中点击编辑,可以进行属性列表的创建,输入相对应的标识符和数据地址。创建属性详见 创建设备属性

(3)OPC UA配置数据地址有两种方式,一种在数据地址栏输入OPC UA Tag名称(方法如下),另一种点击标签绑定,将OPC UA的标签和属性进行关联。

6.1 配置OPC UA数据地址

6.1.1 手动指定每个地址

(1)进入设备管理,进入已创建好的设备(关联创建好的OPCUA连接的连接),选择一个属性点击编辑。
(2)设置数据类型,如 32位浮点数。
(3)设置标识符,如 main_axle_speed。
(4)设置数据地址,如ns=2;s=PLC2.main_axle_speed。
(5)点击确定,那么在属性列表中将能看到对应的参数。

6.1.2 OPC UA格式定义

当设备自身协议就是OPC-UA或者与设备关联的PLC/网关也是使用OPC-UA协议时,origin按照OPC-UA规范中的变量声明的格式进行配置,定义格式如下:

ns={namespace-index};[s|i|g|b]={Identifier}

namespace-index: namespace 索引号

s:String类型的地址,如 ns=2;s=HelloWorld/ScalarTypes/Boolean

i:Numeric类型的地址,如 ns=1;i=1337

g:GUID类型的地址,如 ns=2;g=09087e75-8e5e-499b-954f-f2a8624db28a

b:Byte String类型的地址

Identifier:地址的标识

6.1.3 OPC UA配置举例

(1)对OPC UA的属性以及相应参数的测试结果。

| 名称    |标识符|类型|数据地址|数值|
| :--------------|:-----|-----------|------------|-------------------- |
| 报警       |alarm                      |bool   | ns=2;s=PLC2.alarm                      |    
| 湿度       |humidity                   |float  | ns=2;s=PLC2.humidity                   |
| 温度       |temperature                |float  | ns=2;s=PLC2.temperature                |
| 状态       |status                     |short  | ns=2;s=PLC2.status                     |
| 主轴倍速   |main_axle_speed            |short  | ns=2;s=PLC2.main_axle_speed            |
| 轴承温度   |axle_bearing_temperature   |float  | ns=2;s=PLC2.axle_bearing_temperature   |
| 主轴倍率   |main_axle_magnification    |float  | ns=2;s=PLC2.main_axle_magnification    |
| 主轴负载   |main_axle_load             |float  | ns=2;s=PLC2.main_axle_load             |
| 进给倍率   |feed_rate                  |float  | ns=2;s=PLC2.feed_rate                  |
| 空闲状态   |free_status                |bool   | ns=2;s=PLC2.free_status                |
| 运行状态   |running_status             |bool   | ns=2;s=PLC2.running_status             |
| 故障状态   |fault_status               |bool   | ns=2;s=PLC2.fault_status               |
| 加工件数   |production_number          |short  | ns=2;s=PLC2.production_number          |
|加工时间    |production_time            |int    | ns=2;s=PLC2.production_time            |
2024-08-29
0