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

OPC UA Python调用ReadProgram方法遇BadMethodInvalid错误求助

解决OPC UA调用ReadProgram方法的BadMethodInvalid错误

错误原因

你的代码调用call_method时参数传递错误,错误地将方法的InputArguments属性作为第一个参数传入,同时可能存在方法节点ID验证不充分的问题。

修正后的代码

from opcua import Client, ua

client = Client("opc.tcp://10.254.92.26:4880", timeout=5000)
client.connect()

try:
    # 替换为ReadProgram方法的正确节点ID
    method_node = client.get_node("ns=2; i=399800")
    
    # 验证方法节点正确性(可选,用于调试)
    browse_name = method_node.get_browse_name()
    print(f"当前方法名称: {browse_name.Name}")
    
    # 匹配方法要求的输入参数类型(示例为UInt16单参数)
    input_arg = ua.Variant(0, ua.VariantType.UInt16)
    
    # 直接调用方法,传入输入参数
    result = method_node.call_method(input_arg)
    
    print(f"方法调用结果: {result}")
finally:
    client.disconnect()

关键修正点

  1. 移除错误参数:原代码中method.call_method(input, input_arg)里的input(即方法的InputArguments属性)是多余的,call_method只需传入方法要求的输入参数值。InputArguments是用来查看方法参数定义的元数据,不是调用参数。
  2. 确认方法节点ID:确保ns=2; i=399800指向的是ReadProgram方法节点,而非方法所属的对象节点。可通过UA Expert查看节点的类型(Method类型)确认。
  3. 匹配参数类型:输入参数的Variant类型必须和方法InputArguments定义的类型完全一致,若方法要求数组类型,再用[0]包裹值。

调试辅助步骤

如果仍有问题,可先打印方法的参数元数据,确认参数要求:

input_args_meta = method_node.get_child(["0:InputArguments"])
print(f"输入参数定义: {input_args_meta}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 16:13:26