Connect IoT - OPC UA驱动程序#
OPC统一架构(OPC UA)是由OPC Foundation开发的一种用于工业自动化的机器对机器通信协议。其有以下显著特征:
- 专注于与工业设备和系统通信以进行数据采集和控制
- 开放式 - 免费提供,可供实施且不受任何限制且不会产生任何费用
- 跨平台 - 不受限于某一种操作系统或编程语言
- 面向服务的架构(SOA)
- 强大的安全性
数据类型#
这些是受支持的特定数据类型:
| 名称 | 描述 |
|---|---|
| UInt8 | 无符号整数8位 |
| UInt16 | 无符号整数16位 |
| UInt32 | 无符号整数32位 |
| UInt64 | 无符号整数64位 |
| Int8 | 有符号整数8位 |
| Int16 | 有符号整数16位 |
| Int32 | 有符号整数32位 |
| Int64 | 有符号整数64位 |
| 布尔值 | 布尔值 |
| 浮点型 | 浮点数 |
| 双精度 | 浮点双精度数 |
| 字符串 | ASCII 值(文本字符串) |
| LocalizedText | 本地化的文本字符串 |
| 日期时间 | 日期和时间值 |
Table: OPC UA特定数据类型
异常流程参数#
异常流程支持以下参数:
| 名称 | 类型 | 可能的值 | 默认值 | 描述 |
|---|---|---|---|---|
| 地址 | 字符串 | "" | OPC UA服务器的地址 | |
| securityPolicy | 枚举 | 无 Basic128 Basic128Rsa15 Basic192 Basic192Rsa15 Basic256 Basic256Rsa15 Basic256Sha256 | 无 | 服务器安全性 |
| user | 字符串 | "" | 登录用户名 | |
| 密码 | 字符串 | "" | 登录密码 | |
| floatDecimalPlaces | 整数 | 0 | 与浮点型一起使用的小数位数,以帮助修复IEEE 754精度错误。请保留0不要进行舍入。 |
Table: OPC UA特定参数
扩展参数#
与其他异常流程驱动程序一样,还需要一些额外参数来对预期行为提供更多上下文。
事件#
| 名称 | 类型 | 可能的值 | 默认值 | 描述 |
|---|---|---|---|---|
| eventType | 枚举 | SubscriptionEventAlarm | Subscription | 要注册的警报类型Subscription- 至少一个节点更改值时发出通知Event - 事件发生时发出通知Alarm - 警报发生时发出通知 |
| publishingInterval | 整数 | 1000 | 订阅执行和报告任何已更改项目的速率(以毫秒为单位) | |
| lifeTimeCount | 整数 | 2400 | 如果客户端在短于(lifetimeCount * publishingInterval)的一段时间内无法与服务器通信,那么订阅在服务器中仍然可用。但是如果超过该时间,服务器便会删除该订阅。(以毫秒为单位) | |
| maxKeepAliveCount | 整数 | 10 | 如果服务器在(MaxKeepAliveCount * PublishingInterval)定义的一段时间内没有待处理的通知,服务器将向客户端发送一个keep alive消息 | |
| maxNotificationsPerPublish | 整数 | 0 | 客户端希望在单个发布响应中接收的最大通知数 | |
| priority | 整数 | 10 | 如果多个订阅需要向客户端发送通知,服务器将首先向优先级最高的订阅发送通知 | |
| serverNodeId | 字符串 | "" | 当事件类型为Event或Alarm时,必须提供代表整个服务器的节点才能进行注册。示例: "i=2253 [Server]" |
EventProperty#
| 名称 | 类型 | 可能的值 | 默认值 | 描述 |
|---|---|---|---|---|
| isTrigger | 布尔值 | true | 当值更改时触发事件 | |
| samplingInterval | 整数 | 1000 | 要创建的受监控项目的采样时间间隔(以毫秒为单位) | |
| discardOldest | 布尔值 | true | 队列已满时丢弃最早的项目 | |
| queueSize | 整数 | 1 | 采样队列的大小 |
命令#
| 名称 | 类型 | 可能的值 | 默认值 | 描述 |
|---|---|---|---|---|
| objectDeviceId | 字符串 | "" | 方法所在对象(父级)的标识符(例如:ns=3;s=AirConditioner1) |
驱动程序扩展#
此异常流程驱动程序提供了一组扩展,允许自定义执行独立于关联的驱动程序定义的操作。这意味着您可以使用自定义获取/设置节点值,而无需描述它们。
- 这在访问共享的设备数据或者由于过于复杂而无法使用常规机制访问的设备数据时特别有用。在需要访问命名约定可能因设备而异的数据时也很有用。
- 要使用这些扩展,您可以实施自己的任务,也可以使用提供的任务
Send Notification to Driver和Subscribe in Driver。
对象#
对象是作为参数传递或作为结果值返回的结构。
事件#
| 名称 | 类型 | 描述 |
|---|---|---|
| name | 字符串 | 事件的名称。将用作结果调用中的标识符。 |
| isEnabled | 布尔值 | 事件是否已启用并准备就绪可供使用?默认 false |
| properties | Property[] | 要与事件链接的属性列表 |
属性#
| 名称 | 类型 | 描述 |
|---|---|---|
| name | 字符串 | 属性的名称。将用作结果调用中的标识符。 |
| deviceId | 字符串 | OPC UA服务器中的唯一标识符(这是节点ID/标记名称)。 |
| deviceType | 字符串 | 服务器已知的属性的数据类型。必须使用此异常流程驱动程序支持的数据类型中的一种。 |
| dataType | 字符串 | MES/系统已知/使用的值的数据类型。 |
PropertyValue#
| 名称 | 类型 | 描述 |
|---|---|---|
| propertyName | 字符串 | 属性的名称。将与提供的property对象的name相匹配 |
| 值 | 任何 | 从服务器接收到的值,将转换为以下项的dataType Property |
| originalValue | 任何 | 从服务器接收到的值,未应用任何转换。 |
PropertyValuePair#
| 名称 | 类型 | 描述 |
|---|---|---|
| 属性 | property | 属性的完整描述 |
| 值 | 任何 | 与属性关联的值 |
RegisterHandler#
| 名称 | 类型 | 描述 |
|---|---|---|
| event | Event | 要注册的事件(完整信息) |
UnregisterHandler#
| 名称 | 类型 | 描述 |
|---|---|---|
| event | Event | 要注销的事件(至少必须提供name属性) |
方法#
获取属性值#
请求服务器提供一个或多个属性(节点/标记)的值
PropertyValue[] connect.iot.driver.opcua.getPropertiesValues(request Property[])
示例#
请求 connect.iot.driver.opcua.getPropertiesValues
[
{
"name": "stringValue",
"deviceId": "ns=2;s=Demo.Static.Scalar.String",
"originalValue": "String"
},
{
"name": "integerValue",
"deviceId": "ns=2;s=Demo.Static.Scalar.Int16",
"dataType": "Integer"
}
]
回复:
[
{
"propertyName": "stringValue",
"originalValue": {
"dataType": "String",
"arrayType": "Scalar",
"value": "Hello World",
},
"value": "Hello World",
},
{
"propertyName": "integerValue",
"originalValue": {
"dataType": "Int16",
"arrayType": "Scalar",
"value": 123,
},
"value": 123,
}
]
设置属性值#
请求服务器定义一个或多个属性(节点/标记)的值。
boolean connect.iot.driver.opcua.setPropertiesValues(request PropertyValuePair[])
示例#
请求 connect.iot.driver.opcua.setPropertiesValues
[
{
"property": {
"name": "stringValue",
"deviceId": "ns=2;s=Demo.Static.Scalar.String",
"deviceType": "String"
},
"value": "Hello World"
},
{
"property": {
"name": "integerValue",
"deviceId": "ns=2;s=Demo.Static.Scalar.Int16",
"deviceType": "Int16"
},
"value": 123
}
]
回复:
注册事件#
通知异常流程驱动程序在特定事件发生时引发该事件。
void connect.iot.driver.opcua.registerEvent(data: RegisterHandler)
Note
事件将发布到侦听器connect.iot.driver.opcua.event,并附加注册的事件的名称以及随机ID。例如: connect.iot.driver.opcua.event.TemperatureChanged
示例#
{
"event":{
"name":"CustomEvent",
"isEnabled":true,
"properties":[
{
"name":"humidity",
"deviceId":"ns=2;s=Demo.Static.Scalar.Double",
"dataType":"Decimal",
"deviceType":"Double",
"extendedData":{
"isTrigger":true
}
}
]
}
}
注销事件#
通知异常流程驱动程序在发生特定事件时停止引发事件。
void connect.iot.driver.opcua.unregisterEvent(data: UnregisterHandler)
示例#
发送命令#
将在未来的版本中实施。
备注/行为#
- 当事件具有多个属性带
isTrigger标志时:- 每次任何属性值更改时都会触发它。
- 此时将请求其他属性的值。
- 可能有多个触发器具有相同的设置值(因为它们未更改)。如果不希望出现这种行为,请将其分成多个事件,每个事件都有自己的触发器集。
- 如果事件没有具有
isTrigger标志的属性,则从不触发。 - 使用
Event类型的事件时,属性设备ID必须遵循格式<Namespace>:<name>(例如:2:Temperature)
服务器功能#
目前OPC-UA驱动程序的实现支持在客户端模式或服务器模式下使用。在功能上有一些变化:
- 属性将像往常一样发挥作用
Event和Alarm类型的事件将由工作流触发,以将事件的发生情况发送给连接的客户端(通常,这些事件是为了通知工作流,而此模式则是为了通知其他人)- 订阅事件的存在是为了通知工作流客户端更改了某些内容(正常行为)
- 当要通知工作流客户端执行了命令时,可以使用这些命令