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

Python OPC UA客户端设置节点值时出现BadTypeMismatch错误求助

OPC UA节点设置值时BadTypeMismatch错误解决方法

问题描述

调用OPC UA Python客户端的set_value方法传入整数0或1时,触发类型不匹配错误。

代码示例:

import time
from opcua import Client

# 假设已完成client初始化连接
time.sleep(1)
nodo = client.get_node("ns=1;i=68") 
nodo.set_value(0)
time.sleep(1)
nodo = client.get_node("ns=1;i=68")  
nodo.set_value(1) 

报错信息(翻译后):

opcua.ua.uaerrors._auto.BadTypeMismatch: "提供给属性的值与属性值的类型不匹配。" (BadTypeMismatch)

解决方法

OPC UA节点有严格的数据类型定义,直接传入Python原生int类型可能和节点预期类型不匹配,按以下步骤处理:

  • 第一步:确认节点的数据类型
    先获取节点的类型信息,明确它要求的类型:

    nodo = client.get_node("ns=1;i=68")
    data_type_node = nodo.get_data_type()
    # 获取类型的浏览名称,比如"Boolean"、"UInt16"等
    print(data_type_node.get_browse_name().Name)
    
  • 第二步:按节点类型转换值

    • 如果节点是布尔类型:将0/1转为bool类型传入
      nodo.set_value(False)  # 对应0
      nodo.set_value(True)   # 对应1
      
    • 如果节点是特定整数类型(如UInt16、Int32):用OPC UA提供的类型包装值
      from opcua import ua
      # 示例:节点为UInt16类型
      nodo.set_value(ua.UInt16(0))
      nodo.set_value(ua.UInt16(1))
      
    • 也可以显式指定变体类型调用set_value
      from opcua import ua
      # 根据实际节点类型替换VariantType,比如UInt16、Boolean等
      nodo.set_value(0, varianttype=ua.VariantType.UInt16)
      nodo.set_value(1, varianttype=ua.VariantType.UInt16)
      

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 01:36:33