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

Python中OPC UA ExtensionObject字节串转数值失败,求解决方案

问题与解决建议

问题描述

从OPC UA服务器的ExtensionObject节点读取到字节串后,尝试用Python的struct模块解析为十进制数值,但结果明显错误。当前使用的代码如下:

import struct
# Example byte string containing double values
byte_string = b'\x84^\x05\x00\x00\xf7\n\x19\n\....'
# Determine the size of a double in bytes
double_size = struct.calcsize('!d')

# Calculate the number of double values in the byte string
num_values = len(byte_string) // double_size

# Loop through the byte string and unpack double values
for i in range(num_values):
    # Calculate the offset for the current double value
    offset = i * double_size
    # Unpack the double value from the byte string
    double_value = struct.unpack_from('!d', byte_string, offset)[0]
    print(double_value)

解决建议

  • 确认实际数据类型:先明确ExtensionObject存储的真实数据类型,不一定是double——可能是float、整数类型,或是带自定义结构的数据。OPC UA的ExtensionObject会携带类型标识,需先解析该标识确定数据格式。
  • 调整字节序:代码中使用!d(大端网络字节序),但服务器可能采用小端字节序,尝试替换为<d(小端)或=d(本机字节序)测试结果。
  • 剥离ExtensionObject头部:ExtensionObject通常包含TypeId、EncodingMask等头部信息,这些不是数值数据,直接从偏移0解析会导致错误。需先解析并剥离头部,再处理真正的数值部分。
  • 使用OPC UA专用库:放弃手动解析,改用opcua-asyncio或freeopcua这类专业库,它们会自动处理ExtensionObject的结构解析,直接返回对应类型的数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 23:35:21