跳转至

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 枚举 Subscription
Event
Alarm
Subscription 要注册的警报类型
Subscription- 至少一个节点更改值时发出通知
Event - 事件发生时发出通知
Alarm - 警报发生时发出通知
publishingInterval 整数 1000 订阅执行和报告任何已更改项目的速率(以毫秒为单位)
lifeTimeCount 整数 2400 如果客户端在短于(lifetimeCount * publishingInterval)的一段时间内无法与服务器通信,那么订阅在服务器中仍然可用。但是如果超过该时间,服务器便会删除该订阅。(以毫秒为单位)
maxKeepAliveCount 整数 10 如果服务器在(MaxKeepAliveCount * PublishingInterval)定义的一段时间内没有待处理的通知,服务器将向客户端发送一个keep alive消息
maxNotificationsPerPublish 整数 0 客户端希望在单个发布响应中接收的最大通知数
priority 整数 10 如果多个订阅需要向客户端发送通知,服务器将首先向优先级最高的订阅发送通知
serverNodeId 字符串 "" 当事件类型为EventAlarm时,必须提供代表整个服务器的节点才能进行注册。示例: "i=2253 [Server]"

EventProperty#

名称 类型 可能的值 默认值 描述
isTrigger 布尔值 true 当值更改时触发事件
samplingInterval 整数 1000 要创建的受监控项目的采样时间间隔(以毫秒为单位)
discardOldest 布尔值 true 队列已满时丢弃最早的项目
queueSize 整数 1 采样队列的大小

命令#

名称 类型 可能的值 默认值 描述
objectDeviceId 字符串 "" 方法所在对象(父级)的标识符(例如:ns=3;s=AirConditioner1)

驱动程序扩展#

此异常流程驱动程序提供了一组扩展,允许自定义执行独立于关联的驱动程序定义的操作。这意味着您可以使用自定义获取/设置节点值,而无需描述它们。

  • 这在访问共享的设备数据或者由于过于复杂而无法使用常规机制访问的设备数据时特别有用。在需要访问命名约定可能因设备而异的数据时也很有用。
  • 要使用这些扩展,您可以实施自己的任务,也可以使用提供的任务Send Notification to DriverSubscribe 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
  }
]

回复:

true

注册事件#

通知异常流程驱动程序在特定事件发生时引发该事件。

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)

示例#

{
   "event":{
      "name":"CustomEvent"
   }
}

发送命令#

将在未来的版本中实施。

备注/行为#

  • 当事件具有多个属性带isTrigger标志时:
    • 每次任何属性值更改时都会触发它。
    • 此时将请求其他属性的值。
    • 可能有多个触发器具有相同的设置值(因为它们未更改)。如果不希望出现这种行为,请将其分成多个事件,每个事件都有自己的触发器集。
  • 如果事件没有具有isTrigger标志的属性,则从不触发。
  • 使用Event类型的事件时,属性设备ID必须遵循格式<Namespace>:<name>(例如:2:Temperature)

服务器功能#

目前OPC-UA驱动程序的实现支持在客户端模式或服务器模式下使用。在功能上有一些变化:

  • 属性将像往常一样发挥作用
  • EventAlarm类型的事件将由工作流触发,以将事件的发生情况发送给连接的客户端(通常,这些事件是为了通知工作流,而此模式则是为了通知其他人)
  • 订阅事件的存在是为了通知工作流客户端更改了某些内容(正常行为)
  • 当要通知工作流客户端执行了命令时,可以使用这些命令