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_valuefrom opcua import ua # 根据实际节点类型替换VariantType,比如UInt16、Boolean等 nodo.set_value(0, varianttype=ua.VariantType.UInt16) nodo.set_value(1, varianttype=ua.VariantType.UInt16)
- 如果节点是布尔类型:将0/1转为
内容的提问来源于stack exchange,提问作者Giuliano Stirparo
相关产品推荐
相关产品推荐

