如何用 TDengine 零代码数据接入对接 OPC UA 服务器采集工业设备数据
【免费下载链接】TDengineHigh-performance, scalable time-series database designed for Industrial IoT (IIoT) scenarios项目地址: https://gitcode.com/GitHub_Trending/tde/TDengine
TDengine 通过 taosExplorer 与 taosX 提供零代码数据接入能力:在浏览器中配置数据源与点位映射,即可从 OPC UA 服务器持续读取数据并写入 TDengine,完成工业设备数据的实时入库,无需编写 ETL 代码。该能力属于TDengine 企业版功能,操作入口在 taosExplorer 的“数据写入”页面。
适用前提:
- 已部署 TDengine 企业版并可访问 taosExplorer;
- 能连通的 OPC UA 服务器(官方支持版本参考 KeepWare KEPServerEx 6.5);
- 若 taosX 与 OPC UA 服务器之间网络不能直接连通(例如服务器在隔离的工控网段),需先在与服务器同网段部署一台 taosX-Agent,由 Agent 代理转发数据,详见后文可选分支。
判断是否需要安装 taosX-Agent
默认情况下 taosX 直接连接 OPC UA 服务器。只有当两段网络不能直连时才需要 Agent:OPC UA 服务器在隔离工控网段、或 taosX 部署在公有云无法访问内网。此时只要 taosX ↔ taosX-Agent、taosX-Agent ↔ OPC UA Server 两段网络分别连通即可。
创建 Agent 的流程(Linux 为例):在 taosExplorer 的数据写入 → 代理标签页点击+创建新的代理,下载 taosX-Agent 安装包并在数据源侧主机完成安装;然后在agent.toml(Linux 路径为/etc/taos/agent.toml)中填入 taosExplorer 显示的endpoint与token:
endpoint="http://localhost:6055" token="eyJ0eX...BhA"执行sudo systemctl start taosx-agent启动服务,再回到 taosExplorer 点击检查代理是否连接正常,显示正常即完成。之后创建写入任务时在下拉框选择该代理。两点说明:数据源所在主机不必安装 TDengine;后续修改采集参数、点位映射不需要重装 Agent。
创建 OPC UA 数据写入任务
在 taosExplorer 左侧导航栏进入数据写入,点击+新增数据源:
- 名称:输入任务名称,例如
environment-monitoring。 - 类型:下拉列表选择OPC UA。
- 代理:非必填,仅在需要 Agent 转发时选择。
- 目标数据库:选择数据要写入的数据库,也可点击右侧+创建数据库新建。
配置连接信息
在连接配置区域填写OPC UA 服务地址,例如文档示例:192.168.168.1.66:53530/OPCUA/SimulationServer(以你的服务器 IP、端口和端点路径替换)。然后配置安全模式,共三种:
- None:通信数据明文传输;
- Sign:使用数字签名验证通信数据,保护数据完整性;
- SignAndEncrypt:签名加加密,保证完整性、真实性和保密性。
若安全模式选择Sign或SignAndEncrypt,必须选择有效的安全策略,可选:Basic128Rsa15、Basic256、Basic256Sha256、Aes128Sha256RsaOaep、Aes256Sha256RsaPss(None策略仅在安全模式为 None 时可选)。同时必须填写安全通信证书与安全通信私钥,生成方法见下一节。
认证方式通过 tab 切换,可选:匿名、用户名和密码、证书访问(证书可以与安全通信证书相同,也可以不同)。
配置完成后点击连通性检查。注意:如果使用了安全通信证书或认证证书,证书必须先被 OPC UA 服务端信任,否则检查无法通过。
生成客户端证书(安全模式为 Sign / SignAndEncrypt 时)
taosX 加载证书的要求:格式必须为PEM,且证书 SAN 中必须包含URI:urn:taosx-opc:client,否则服务端会报StatusBadCertificateUriInvalid。证书可在任意机器上生成,把结果上传到 taosExplorer 即可。
Linux / macOS 上可用以下命令生成(有效期 10 年):
# 创建配置文件 cat > /tmp/opcua_client_ext.cnf << 'EOF' [req] distinguished_name = req_dn x509_extensions = v3_ext prompt = no [req_dn] CN = taosx-opc-client O = TDengine [v3_ext] basicConstraints = CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment extendedKeyUsage = clientAuth, serverAuth subjectAltName = URI:urn:taosx-opc:client EOF # 生成证书与私钥 openssl req -x509 -newkey rsa:2048 -nodes \ -keyout client_key.pem \ -out client_cert.pem \ -days 3650 \ -config /tmp/opcua_client_ext.cnf生成后用如下命令确认 SAN 包含必需的 Application URI(文档示例输出):
openssl x509 -in client_cert.pem -noout -subject -ext subjectAltNamesubject=CN=taosx-opc-client, O=TDengine X509v3 Subject Alternative Name: URI:urn:taosx-opc:client两个文件与 taosExplorer 字段的对应关系:client_cert.pem→Secure Channel Certificate(安全通信证书),client_key.pem→Certificate's Private Key(安全通信私钥)。上传后第一次连通性检查通常会失败,因为服务端尚未信任该证书——需要先在服务端完成“信任证书”操作后重新检查。
厂商差异提醒:从 Ignition、GE 等服务器下载的证书(例如ignition-server.der)是服务器自身的证书,不能直接用作客户端证书,必须按上述方法自行生成。如果你使用的是 Ignition 或 GE CSS OPC UA Server,建议先阅读对应的专属集成指南,获取经过验证的服务端信任流程与配置参考,见 Ignition 集成指南 与 GE CSS OPC UA Server 集成指南。
配置点位集:选择点位或上传 CSV
点位集通过 tab 切换,提供三种互斥模式:选择数据点位(默认)、上传 CSV 配置文件、告警与事件。
方式一:选择数据点位
- 筛选点位:通过根节点 ID、命名空间、节点类型、节点 ID 表达式、节点名称表达式等条件筛选,点击查看点位列表在右侧预览符合条件的点位,勾选要采集的点位。
- 超级表名:指定数据写入的超级表,支持占位符
{type}(替换为点位值列的 TDengine 数据类型)。表达式中的.会自动替换为_,例如opc_{type}在点位类型为Float64时生成超级表opc_double。 - 表名称:指定子表,OPC UA 点位 ID 形如
ns=<namespace>;<prefix>=<identifier>(prefix可为i/s/g/b)。支持占位符:{ns}(命名空间)、{id}(去掉前缀后的标识符)、{id#/_}(将{id}中所有/替换为_并修剪首尾)。可与静态文本拼接,如t_{ns}_{id#/_}。替换后残留的.和反引号会被替换为_。 - 值列名称、值变换:值列默认名
val,同一超级表下多个点位共享该列名。值变换使用 Rhai 表达式对原始值二次计算,例如val * 1.8 + 32(摄氏度转华氏度)、val / 1000(毫秒转秒)、if val < 0 { 0 } else { val }(负值截断);留空则不做变换。布尔、字符串、二进制等非数值类型当前不支持值变换。 - 时间戳列:可选
origin_ts(OPC 点位原始时间戳)、request_ts(请求时间戳)、received_ts(接收时间戳),时间戳列名默认ts。 - 自定义标签:格式为
<DataType>::<TagName>::<Pattern>,多个标签以;分隔,例如:
VARCHAR(1024)::name::{id#/.};VARCHAR(1024)::browse::{BrowseName};VARCHAR(200)::location::{Path#/_};INT::version::1该示例生成四个标签:name(点位 ID 中/转.)、browse(节点 BrowseName)、location(Path 中/转_)、version(常量 1)。节点属性占位符仅支持{BrowseName}、DisplayName}、{Description}、{Path}四个属性;{Attr#XY}形式的字符替换优先级高于普通{Attr}。
方式二:上传 CSV 配置文件
适合点位数量较多的场景。可以在 taosExplorer 中下载 CSV 空模板,也可以按已配置的筛选条件从服务器导出数据点位为 CSV。核心规则:
- 文件编码必须为UTF-8(带不带 BOM 均可),其他编码(如 GBK)会被拒绝;
- 第一行 Header 包含
point_id、stable、tbname等列,point_id在整个任务中唯一,且ts_col/request_ts_col/received_ts_col至少配置一列作为时间戳; point_id是字符串型(含s=)时,一律用双引号包裹整个单元格,避免其中的逗号被当作分隔符;内部含双引号时按 RFC 4180 规则重复一次;- 导出模板已自动把每个点位的
BrowseName、DisplayName、Description、Path写入对应 Tag 列,通常只需调整enabled、stable、tbname等列。
推荐写法:stable = opc_{type}(按数据类型分超级表)、对象节点stable = opc_object、tbname = t_{ns}_{id}(保证重启后同一数据点落入同一子表)。完整列定义见 OPC UA CSV 映射文件参考。上传后先点击检查连接并查看解析后的表头,确认行结构正确。
告警与事件(企业版,可选)
告警与事件tab 用于采集 OPC UA Server 推送的告警与事件(A&E):必选事件类型(树形多选,选中即包含其所有子类),可选事件源过滤与最小严重度(1–1000),提交前可通过配置规则预览静态预览将建的超级表结构与过滤条件。选择该 tab 后采集模式自动锁定为event。入库命名规则与查询示例见 OPC UA 告警与事件采集。
采集配置与高级选项
采集模式可选三种:
subscribe:订阅模式,数据有变化时主动上报并写入 TDengine,用于普通点位采集;observe:按采集间隔轮询数据点最新值,默认 10 秒;同一任务内的普通点位共用该间隔,不支持按点位设置不同轮询频率——若部分点位需要不同周期,请拆成多个任务(可共用同一 OPC 服务器与 Agent);event:A&E 采集模式,由点位集选择联动锁定。
采集超时:向 OPC 服务器读取点位超过设定时间未返回则读取失败,默认 10 秒,仅在observe模式可配置。
使用选择数据点位方式时,还可配置点位更新模式(None/Append/Update)与点位更新间隔(默认 600 秒,最小 60):开启后,任务运行期间 OPC Server 新增或删除的点位会自动进入任务,无需重启 OPC 任务。
高级选项用于进一步调整性能与日志:日志级别(默认info)、最大写入并发数(默认 0 表示自动)、批次大小(单次发送最大消息数)、批次延时(超时后即使不满批次也立即发送)。缓存实时数据默认关闭,开启后数据先落本地文件再被后台任务读出发送,用于下游消费卡顿时削峰,数据消费完毕自动清理文件,详见 存储转发。
提交任务与验证结果
点击提交完成创建,回到数据源列表页面查看任务执行情况。验证要点:
- 健康状态(自
v3.3.5.0起在任务管理列表展示):Ready表示数据源和目标端健康检查通过;Active表示任务正常运行且活跃;Idle表示监测时段内无数据处理;Pending表示写入消息数为 0;Busy表示写入队列繁忙(可能存在性能瓶颈,但不说明存在错误);Bounce表示写入过程中存在错误且一定周期内超出阈值;SourceError/SinkError表示数据源或写入端错误,工作负载会尝试重连;Fatal为严重或无法恢复的错误。健康状态为空表示尚未有数据开始入库。 - 运行指标:对运行中的任务点击指标的查看按钮,可看详细运行指标,包括写入的记录条数、流量等,每 2 秒自动刷新。
- 提交失败时,可通过查看该任务的活动日志查找错误原因。
常见连接问题与限制
| 错误信息 | 原因 | 解决方法 |
|---|---|---|
StatusBadIdentityTokenInvalid (0x80200000) | 认证方式不匹配或证书未被服务器接受 | Certificate 认证可改用 Username 认证;确认服务端 User Source 配置正确 |
StatusBadUserAccessDenied (0x801F0000) | 用户名密码正确但无权限 | 确认用户存在于服务端指定的用户源中 |
StatusBadSecurityChecksFailed | 证书未被 Trust 或两端 Security Policy 不匹配 | 在服务端 Trust 客户端证书;确认两端安全策略一致 |
StatusBadCertificateUriInvalid | 证书 SAN 缺少客户端 Application URI | 重新生成证书,确保 SAN 包含URI:urn:taosx-opc:client |
| 连接超时 | 网络不通或服务端未监听正确地址 | 确认服务端监听地址与端点包含服务器 IP,防火墙放通对应端口 |
其他限制与日常维护:
- 采集间隔是任务级参数,同一任务内不能按点位分组设置不同轮询频率;
- 任务运行中可通过编辑 → 增加数据点位在 CSV 中追加少量点位规则,不需要重启任务,不会产生数据丢失;
- 已入库子表的标签值维护,建议优先在 TDengine IDMP 中完成,未使用 IDMP 时可用 SQL
ALTER TABLE … SET TAG批量修改; - OPC UA Property(如
limit)如何自动映射为 TAG,见 OPC UA Property 到 TAG 示例; - 除 taosExplorer 外,也可通过 SQL 管理接入节点、任务与 Agent,见 数据接入(Xnode)。
【免费下载链接】TDengineHigh-performance, scalable time-series database designed for Industrial IoT (IIoT) scenarios项目地址: https://gitcode.com/GitHub_Trending/tde/TDengine
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考