【问题标题】:UA OPC Server data typesUA OPC 服务器数据类型
【发布时间】:2017-03-06 09:05:15
【问题描述】:

在我的一生中,我无法找到一个我认为很简单的问题的答案 - 如何找到 OPC 节点的数据类型。

我正在编写一个 UA OPC 库,其中涉及创建订阅和监视/更新此订阅中的标签。

写入标签的请求来自外部应用程序,由订阅和标签 ID 以及对象值​​组成。问题是这个对象总是一个字符串(不要问),需要将其转换为标签的适当数据类型。所以,我需要找出与标签相关联的数据类型。目前,写入失败并出现类型不匹配异常。

这是我的更新代码:

//
    // Extension methods
    public bool Write<T>(long groupID, long tagID, T item)
    {
        var sub = FindSubscription(groupID);
        try
        {
            if (sub != null)
            {
                var node = sub.MonitoredItems.FirstOrDefault(m => (long)m.Handle == tagID);

                if (node != null)
                {
                    bool result = false;
                    var nodesToWrite = BuildWriteValueCollection(node.DisplayName, Attributes.Value, item);

                    StatusCodeCollection results;
                    DiagnosticInfoCollection diag;
                    try
                    {
                        _session.Write(
                        requestHeader: null,
                        nodesToWrite: nodesToWrite,
                        results: out results,
                        diagnosticInfos: out diag);


                        result = CheckReturnValue(results[0]);

                    }
                    catch (Exception ex)
                    {

                    }
                }
            }
        }
        catch  (Exception ex)
        {
            LogMessage(String.Format("Write GroupID {0}, Tag  {1}, Value {2}", groupID, tagID, item.ToString()), ex);
        }

        return false;
    }

我已经搜索了很长时间以找出如何确定节点的数据类型,但没有成功。那么,对于 MonitoredItem,如何找到数据类型以便我可以将字符串转换为兼容类型?

谢谢

史蒂夫

【问题讨论】:

    标签: opc-ua


    【解决方案1】:

    读取相关VariableNodeDataType 属性。

    【讨论】:

    • 谢谢,但我如何从 MonitoredItem 中获取 - 我看不到 DataType 属性?
    • 从 MonitoredItem 获取它的 NodeId 并调用读取服务,请求 AttributeId.DataType。我不知道 nodeopcua 是如何工作的——当你获得对节点的引用时,它可能只为你读取基本属性(如果有的话),所以你实际上需要从服务器读取 DataType 属性。跨度>
    • 感谢您提供的额外信息...现在我的 DataValue 为 6 ?这意味着什么?对不起,但你必须意识到你正在和一个非常非常密集的人交谈。我已经编写了许多 DA 客户端应用程序,但令我惊讶的是,要找出如此简单而明显的数据请求是多么困难……对于每次写入(其中每分钟可能有数千次)我'我必须单独调用以找出我要写入的节点的数据类型......我有节点,我知道节点,为什么这个(数据类型)不是默认属性这个节点???
    • 变量节点的内置属性之一,但为了减少浏览期间的数据传输和复杂性,仅返回绝对必要的属性。预计客户端应用程序将在浏览过程中或在应用程序启动时读取他们需要的附加信息。我不知道您正在使用什么堆栈或工具包,所以我不知道可以为您做什么。
    猜你喜欢
    • 2017-03-08
    • 1970-01-01
    • 2021-07-26
    • 1970-01-01
    • 2017-06-14
    • 2021-04-01
    • 1970-01-01
    • 2021-02-08
    • 1970-01-01
    相关资源
    最近更新 更多