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配置,右键项目打开属性。
修改OPCUA客户端允许匿名访问为“是”。
右键右下角kepware小图标,点击OPC UA配置。
右键kepware图标,重新初始化一下。
使用网站充当客户端进行连接
(1)进入边缘连接服务-连接管理,点击新建连接。
(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)点击提交,连接状态应显示为已连接。启动状态为启用。
5.1 使用用户名密码进行连接
对kepServer 服务端进行配置的更改
在kepServer上创建对应的用户
用户名:opc_ua
密码:123456
双击kepServer配置,右键项目打开属性。
修改OPCUA客户端允许匿名访问为“否”。
右键kepware图标,重新初始化一下。
使用网站充当客户端进行连接
修改连接
配置一致即可连接成功
5.2 使用安全策略证书进行连接
对于证书通信的大致概括
此时就用到了 ssh 相关知识。
在建立通讯的时候客户端可以用自签发的证书来链接服务端,在建立通讯过程会发生证书交换,也就是客户端会发送自己的证书到服务端,同时服务端也会发送自己的证书给客户端。
然后服务端会把客户端证书放到不受信任的证书文件目录,因为我们的证书是自签发的所以服务器是不会信任的,然后我们需要把服务器的证书复制到服务器的受信任目录就可以了。
修改kepServer 对应配置
相关配置如下
右键kepware图标,重新初始化一下。
使用网站充当客户端进行连接
修改连接,将配置与服务端进行匹配。
若不上传证书,则使用慧程默认的opcua证书进行连接服务端。
点击测试连接,此时项目将进行证书的交换以确保安全,在第一次交换之后,服务端与客户端分别拿到对方的证书,进行检查信任即可实现连接。
对应操作如下:
当点击测试连接之后,会出现连接失败情况,此时在kepServer 的opcua 设置中 可查看客户端证书的交换信息。
双击查看对应的证书信息。
确认无误,可允许连接,点击信任 再次进行连接,即可实现通信。
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 |