PTC Kepware 和 InfluxDB:收集和存储您的自动化数据
作者:Jay Clifford / 产品,用例,开发者
2021 年 12 月 07 日
导航到
如果您在自动化领域工作了一段时间,您可能已经遇到或至少听说过 PTC Kepware。他们提供了一套最大的自动化设备连接套件,如 PLC,简化了 OT(操作技术)和 IT(信息技术)世界的桥梁。
最好的部分?您可以使用 InfluxDB 存储和转换这些数据。这篇博客文章将带您了解连接 Kepware 实例到 InfluxDB 的不同方法。
Kepware Edge
关于本教程的一个小声明:我使用了 ThingWorx Kepware Edge。它是 KEPServerEX 的紧凑型版本。以下是一些需要注意的事项
- 无头(没有用户 GUI,交互通过 REST API 进行)
- 在 Ubuntu 18.04 上运行
- 拥有比 KEPServerEX 更小的驱动程序集(Modbus Ethernet、Allen-Bradley、ControlLogix Ethernet、Siemens TCP/IP Ethernet 等驱动程序正在逐步添加)
- 支持 OPC UA 服务器接口、发布 MQTT 消息和 ThingWorx AlwaysOn 协议,以实现与 ThingWorx 的原生连接。
- 虽然实例直接安装在 Linux 操作系统上,但它也作为 Microsoft Azure IoT Edge 运行时模块以及通用 Docker 容器提供。
由于 KEPServerEX 和 Edge 在底层具有相似的核心架构,因此本教程适用于两者(如果需要,我将突出显示任何关键差异)。
设置
注意:本教程将使用 Kepware Edge 默认加载的示例项目。要连接您自己的设备,请咨询官方 Kepware 文档。
我们将使用 Telegraf 将我们的数据从 Kepware 流式传输到 InfluxDB。我们可以使用两种协议来配置此连接
- OPC UA
- 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://127.0.0.1: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在启动时自动生成的证书,您将需要在重启Telegraf时接受新的证书。强烈建议您使用自己的证书。
- 您必须使用强制标志接受自签名证书,因为它被认为是不安全的连接方法。
- 由于Telegraf在启动时自动生成我们的证书,您将需要在重启Telegraf时接受新的证书。强烈建议您使用自己的证书。
可以通过KEPServerEX的OPC UA配置管理器批准证书。
4. Telegraf现在将开始将数据写入您的InfluxDB实例。
选项2 - MQTT
MQTT是一个开源的轻量级pub/sub协议,在基于物联网的应用程序中得到广泛使用。值得注意的是,尽管MQTT很受欢迎,但它并不被认为是一个OT协议,如Modbus、OPC UA或CAN。幸运的是,Kepware提供了一个名为IoT网关的桥梁,它自动将Kepware服务器中的数据转换为JSON,并将其发送到您选择的MQTT代理。
我们将使用Telegraf内置的MQTT客户端从代理中提取此数据,并将其自动存储到InfluxDB中。
1. 首先,我们需要生成我们的 Telegraf 配置。为此,我们将使用 MQTT 消费者输入插件。以下是我们的配置 (您可以在 此处找到完整配置,以使用 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。
- 最后,由于物联网网关发送的数据是 JSON 格式,我们使用 json_v2 解析器相应地设置自己的数据格式。
- 由于我们的数据以对象数组的形式到来,我们必须稍微聪明一点。首先,我们 禁用 prepend_key 以获取确切的键名。然后,我们使用 timestamp_path 将 Kepware 时间戳分配为我们指标的时间戳。最后,我们使用 exclude_key 删除时间戳作为字段。
- 有一点小问题,由于每个对象都是同一数组的组成部分,并且我们已经禁用了 prepend 键,因此指标实际上正在相互覆盖。为了解决这个问题,我使用了一个名为 Starlark 的处理器插件,将 id 字段更改为标签,从而分离我们的数据。
2. 如果您还没有安装和运行 MQTT 代理,请确保这样做。我使用 Mosquitto。有关安装说明,请参阅此 页面。
3. 我们现在可以启动 Telegraf 服务,指向我们的 OPC-UA 配置
telegraf --config ./telegraf-mqtt.conf
4. 最后,我们需要配置 Kepware IoT 网关(在以下文档中搜索 IoT Gateway)
结论
如您现在所见,我们正在从 Kepware 服务器收集数据,并将标签直接存储到 InfluxDB 中。一旦您开始收集自己的机器数据,您的可视化将比我的更有趣。
我还建议查看以下博客文章,以了解您可以使用自动化数据做什么
- 使用 ogamma Visual Logger for OPC 和 InfluxDB 存储、处理和可视化数据。
- InfluxDB 云中的物联网原型设计(第 2 部分):查询、任务和仪表板
- InfluxDB 和 GeoData – 应急发电机
如果您想试用 ThingWorx Kepware Edge 或 KEPServerEX,请查看此 网站。试用是免费的,并提供有限时间的许可证。如果您遇到困难或想讨论您的用例,请访问 InfluxData 的 Slack 和 社区 论坛(只需确保 @Jay Clifford)。让我们在那里继续讨论!