PTC Kepware 和 InfluxDB:收集和存储您的自动化数据

导航至

kepware-and-InfluxData-logos

如果您在自动化领域工作了一段时间,很可能您已经接触过甚至听说过 PTC Kepware。他们为自动化设备(如 PLC)提供最大的连接套件之一,从而简化了 OT(操作技术)和 IT(信息技术)世界之间的桥梁。

最棒的是什么?您可以使用 InfluxDB 存储、转换和可视化这些数据。这篇博文将带您了解将 Kepware 实例连接到 InfluxDB 的不同方法。

Kepware Edge

本教程的小声明:我使用了 ThingWorx Kepware Edge。它是 KEPServerEX 的精简版。请记住以下几点

  1. 它是无头的(没有用户 GUI,交互通过 REST API 进行)
  2. 运行在 Ubuntu 18.04 上
  3. 驱动程序集比 KEPServerEX 小(Modbus 以太网、Allen-Bradley、ControlLogix 以太网、西门子 TCP/IP 以太网,并且随着时间的推移会添加更多驱动程序)
  4. 支持 OPC UA 服务器接口、发布 MQTT 消息以及 ThingWorx AlwaysOn 协议,以便与 ThingWorx 进行原生连接。
  5. 虽然该实例直接安装到 Linux 操作系统,但它也可用作 Microsoft Azure IoT Edge 运行时模块和通用 Docker 容器

由于 KEPServerEX 和 Edge 在底层共享类似的内核架构,因此本教程适用于两者(如果需要,我将突出显示任何关键差异)。

设置

注意:本教程将使用 Kepware Edge 的默认加载示例项目。要连接您自己的设备,请查阅 Kepware 官方文档。

Using Telegraf to stream data from Kepware to InfluxDB

我们将使用 Telegraf 将数据从 Kepware 流式传输到 InfluxDB。我们可以使用两种协议来配置此连接

  1. OPC UA
  2. MQTT

Telegraf 具有支持这两种协议的插件——无需编码。

在我们开始之前,您需要安装 Telegraf。安装说明可以在这里找到。

选项 1 - OPC UA

OPC UA(统一架构)是一种机器对机器的工业协议,近年来在自动化领域变得非常流行。这主要是由 OPC UA 基金会推动的,该基金会将开放连接、互操作性和集成安全性作为标准的一部分进行推广。在早期,OPC UA 主要用于将 PLC 等设备连接到 SCADA(监控和数据采集)系统。

在底层,Kepware 构建在 OPC UA 服务器之上。这意味着我们可以使用 Telegraf 客户端直接与 Kepware 接口。以下是概要

1. 首先,我们需要生成 Telegraf 配置文件。为此,我们将使用 OPC UA 客户端输入插件。这是我们的配置(您可以在这里找到完整的配置,以使用 InfluxDB 输出插件将数据发送到 InfluxDB)

[[inputs.opcua]]
  name = "opcua"
  endpoint = "opc.tcp://localhost:49330"

   security_policy = "auto"
   security_mode = "auto"

   certificate = ""
   private_key = ""

auth_method = "UserName"
   username = "########"
   password = "########"

   nodes = [
    {name="Tag1", namespace="2", identifier_type="s", identifier="Channel1.Device1.Tag1"},
    {name="Tag2", namespace="2", identifier_type="s", identifier="Channel1.Device1.Tag2"},
  ]

分解

  • 首先,我们指定一个名称和一个端点。名称是任意的,因为它将充当我们的测量名称。端点需要指向您的 Kepware 服务器。请注意,Kepware 的默认 OPC UA 端点端口是 49330。
  • 接下来,我们建立安全策略和模式。我们的客户端和 Kepware 服务器足够智能,可以相互沟通他们的要求,因此我们可以将这些设置为自动(请注意,您的 Kepware 实例可能限制了发现,这可能需要手动选择安全策略)。
  • 由于我们正在建立安全策略,在大多数情况下是 Basic256Sha256,已签名和加密,因此我们需要证书和私钥。对于我们的用例,我们可以将路径留空。客户端将生成自签名证书。
  • 最后一层安全要求身份验证方法。这可以通过用户、证书或匿名(不建议用于生产)来完成。在我们的用例中,我们将使用用户名和密码安全地连接到 Kepware。我建议查看 Kepware 官方文档中的用户管理。
  • 最后,我们标识我们的标签。不要与 InfluxDB 的标签表示法混淆。Kepware 使用标签来表示数据变量(在 InfluxDB 术语中可以与字段密切相关)。由于我们使用的是默认项目,因此我们只有两个标签要收集(Tag1 和 Tag2)。

2. 现在我们可以启动 Telegraf 服务,指向我们的 OPC-UA 配置

telegraf --config ./telegraf-opcua.conf

请注意我们当前收到此错误

2021-11-16T11:57:48Z E! [inputs.opcua] Error in plugin: error in Client Connection: EOF
2021-11-16T11:57:50Z E! [inputs.opcua] Error in plugin: error in Client Connection: EOF

我知道这不是一个很好的错误消息!本质上,这里发生的事情是我们的客户端正在生成证书并将其发送到 Kepware。然后,Kepware 将证书放置在其信任存储区中,默认情况下该证书会被拒绝。 出于安全原因,我们需要手动批准此连接。

3. 要接受我们的自签名证书,您需要在运行 Kepare Edge 服务器的系统上运行以下命令

sudo /opt/tkedge/v1/edge_admin manage-truststore uaserver --list

这将向您显示 Kepware 中当前存储的证书列表

Thumbprint                                  Status       Common Name
5a5d2c63283b6ad8cd1bd0ad4137f4fd93706124    Trusted      UaBrowser
9ccd3ed34655e0dce281e1e52b971b2c3391475b    Rejected     Telegraf OPC UA client

正如您所看到的,正如预测的那样,我们的客户端被拒绝了。要批准我们的客户端,我们运行以下命令

sudo /opt/tkedge/v1/edge_admin   manage-truststore uaserver --force --trust  9ccd3ed34655e0dce281e1e52b971b2c3391475b

注意:由于我们正在使用 Telegraf 生成的自签名证书,请注意这些警告

  • 您必须使用 force 标志来接受自签名证书,因为它被认为是不安全的连接方法。
  • 由于 Telegraf 在启动时自动生成我们的证书,因此在重新启动 Telegraf 时,您将需要接受新证书。强烈建议使用您自己的证书。

可以通过 KEPServerEX 的 OPC UA 配置管理器批准证书。

4. Telegraf 现在将开始将数据写入您的 InfluxDB 实例。

选项 2 - MQTT

MQTT 是一种开源轻量级发布/订阅协议,广泛应用于基于物联网的应用程序中。值得注意的是,虽然 MQTT 很流行,但它不被认为是像 Modbus、OPC UA 或 CAN 这样的 OT 协议。幸运的是,Kepware 提供了一个名为 IoT Gateway 的桥梁,它可以自动将 Kepware 服务器的数据转换为 JSON,并将数据发送到您选择的 MQTT 代理。

我们将使用 Telegraf 的内置 MQTT 客户端从代理中提取此数据,并自动将其存储在 InfluxDB 中

1. 首先,我们需要生成 Telegraf 配置文件。为此,我们将使用 MQTT Consumer 输入插件。这是我们的配置(您可以在这里找到完整的配置,以使用 InfluxDB 输出插件将数据发送到 InfluxDB)

[[inputs.mqtt_consumer]]

  servers = ["tcp://192.168.1.220:1883"]
  topics = [
    "iotgateway",
  ]
  data_format = "json_v2"

 [[inputs.mqtt_consumer.json_v2]]
     measurement_name = "kepware_edge5"
       [[inputs.mqtt_consumer.json_v2.object]]
        path = "@this"
        disable_prepend_keys = true
        timestamp_path = "timestamp"
        timestamp_format = "unix"
        excluded_keys = ["timestamp"]

[[processors.starlark]]
  source = '''
def apply(metric):
    v = metric.fields.get('id')

    if v == None:
      return metric

    metric.tags['id'] = v
    return metric
'''

分解

  • 首先,我们指定一个服务器。服务器需要指向您的 MQTT 代理。请注意,我正在与我的 Kepware 服务器在同一台机器上运行 Mosquitto 服务器,使用默认端口 1883。
  • 接下来,我们建立我们希望订阅的主题。默认情况下,Kepware IoT 网关将在以下主题上发布其数据:iotgateway。
  • 最后,由于 IoT 网关发送的数据是 JSON 格式,因此我们使用 json_v2 解析器相应地设置我们自己的数据格式。
  • 由于我们的数据以对象数组的形式进入,因此我们必须稍微聪明一点。首先,我们禁用 disable_prepend_key 以获取确切的键名。然后,我们使用 timestamp_path 将 Kepware 时间戳分配为我们的指标时间戳。最后,我们使用 exclude_key 删除时间戳作为字段。
  • 一个小问题,由于每个对象都是同一数组的一部分,并且我们禁用了 prepend keys——指标实际上是相互覆盖的。为了解决这个问题,我使用一个名为 Starlark 的处理器插件将 id 字段更改为标签,从而分隔我们的数据。

2. 如果您尚未安装,请确保您的 MQTT 代理已安装并正在运行。我正在使用 Mosquitto。有关安装说明,请查看此页面。

3. 现在我们可以启动 Telegraf 服务,指向我们的 OPC-UA 配置

telegraf --config ./telegraf-mqtt.conf

4. 最后,我们需要配置 Kepware IoT 网关(在以下文档中搜索 IoT Gateway)

结论

正如您现在所见,我们正在从 Kepware 服务器收集数据,并将标签直接存储到 InfluxDB 中。一旦您开始收集自己的机器数据,您的可视化效果将比我的更有趣。

stored data visualization

我还建议查看以下博文,了解接下来您可以对自动化数据做什么

  1. 使用 ogamma Visual Logger for OPC 和 InfluxDB 存储、处理和可视化数据。
  2. 使用 InfluxDB Cloud 进行物联网原型设计(第 2 部分):查询、任务和仪表板
  3. InfluxDB 和地理数据 – 应急发电机

如果您想试用 ThingWorx Kepware Edge 或 KEPServerEX,请查看此网站。试用是免费的,并附带限时许可证。如果您遇到困难或想讨论您自己的用例,请前往 InfluxData Slack 和社区论坛(请务必 @Jay Clifford)。让我们在那里继续讨论!