You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将OPC-UA扩展对象解码为可读形式?附UaExpert展示示例

如何解码OPC-UA扩展对象为可读形式?

你遇到的问题是OPC-UA扩展对象的Body字段以bytes形式返回,无法直接读取。从你提供的bytes数据来看,它采用4字节小端序长度前缀+ASCII字符串的自定义结构化格式,可通过以下方法解析:

解析步骤

  1. 分析bytes结构:每段数据前用4个小端序字节标记字符串长度,后续是对应长度的ASCII字符串;
  2. 编写解析函数,按顺序提取各字段内容。

示例代码

def decode_extended_body(body_bytes):
    parsed = {}
    offset = 0
    
    # 提取事件描述
    len_desc = int.from_bytes(body_bytes[offset:offset+4], byteorder='little')
    offset += 4
    parsed['事件描述'] = body_bytes[offset:offset+len_desc].decode('ascii')
    offset += len_desc
    
    # 提取时间戳
    len_time = int.from_bytes(body_bytes[offset:offset+4], byteorder='little')
    offset += 4
    parsed['时间戳'] = body_bytes[offset:offset+len_time].decode('ascii')
    offset += len_time
    
    # 提取标识字段
    len_id = int.from_bytes(body_bytes[offset:offset+4], byteorder='little')
    offset += 4
    parsed['标识'] = body_bytes[offset:offset+len_id].decode('ascii')
    
    return parsed

# 替换为你的Body字节数据
raw_body = b'\x1b\x00\x00\x00External Application Closed\x13\x00\x00\x0025/01/2023 12:40:56\x05\x00\x00\x00dfius\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

print(decode_extended_body(raw_body))

执行后会输出可读的结构化字典:

{'事件描述': 'External Application Closed', '时间戳': '25/01/2023 12:40:56', '标识': 'dfius'}

注意事项

  • 该解析逻辑基于当前数据的格式推导,若服务器端有其他自定义字段或编码(如UTF-8),需对应调整解码方式;
  • 若要更通用地处理OPC-UA扩展对象,需获取服务器端定义的该扩展对象的类型描述(对应TypeId: NumericNodeId(ns=2;i=543214)),通过OPC-UA客户端工具查看该节点的结构定义,再针对性解析。

内容的提问来源于stack exchange,提问作者David Filler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 12:25:17