通过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。

![image-20210908135010611](https://saas.bk-cdn.com/t/83b76f6c-754b-4a66-ad52-8e2c872ea8b0/u/c2102d94-92e8-463f-ad6e-b3e0b348e4dc/1693902320047/opcua%E8%AF%A6%E6%83%85.png)

(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            |
2023-09-22
0