【问题标题】:NotSupportedException: System.ServiceModel.Channels.BufferManager - Hololens 2 & OPC UA SDK for .NETNotSupportedException: System.ServiceModel.Channels.BufferManager - Hololens 2 & OPC UA SDK for .NET
【发布时间】:2021-06-12 17:21:08
【问题描述】:

我正在尝试使用 OPC UA 协议读取 Hololens 2 上节点的值。

我正在使用 .NET 的 OPC UA SDK (Opc.UaFx.Client 2.14.0)。我使用以下代码连接到服务器:

public bool ConnectToOpcUaMachine(string machineIp) {
    try {
        _client = new OpcClient(machineIp);
        _client.OperationTimeout = 2000;
        _client.Connect();
    } catch( System.Exception ex ) {
        Debug.Log("Couldn't connect to OPC server");
        Debug.LogException(ex);
        return false;
    }
    return true;
}

当我在编辑器中调用此方法时,我成功连接到服务器并可以读取节点值。但是,当我尝试在 Hololens 2 上执行相同操作时,出现以下错误:

NotSupportedException: System.ServiceModel.Channels.BufferManager::CreateBufferManager
  at System.ServiceModel.Channels.BufferManager.CreateBufferManager (System.Int64 maxBufferPoolSize, System.Int32 maxBufferSize) [0x00000] in <00000000000000000000000000000000>:0 
  at Opc.Ua.Bindings.BufferManager..ctor (System.String name, System.Int32 maxPoolSize, System.Int32 maxBufferSize) [0x00000] in <00000000000000000000000000000000>:0 
  at Opc.Ua.Bindings.UaSCUaBinaryTransportChannel.SaveSettings (System.Uri url, Opc.Ua.TransportChannelSettings settings) [0x00000] in <00000000000000000000000000000000>:0 
  at Opc.Ua.Bindings.UaSCUaBinaryTransportChannel.Initialize (System.Uri url, Opc.Ua.TransportChannelSettings settings) [0x00000] in <00000000000000000000000000000000>:0 
  at Opc.Ua.WcfChannelBase.CreateUaBinaryChannel (Opc.Ua.ApplicationConfiguration configuration, Opc.Ua.EndpointDescription description, Opc.Ua.EndpointConfiguration endpointConfiguration, System.Security.Cryptography.X509Certificates.X509Certificate2 clientCertificate, Opc.Ua.ServiceMessageContext messageContext) [0x00000] in <00000000000000000000000000000000>:0 
  at Opc.Ua.DiscoveryChannel.Create (System.Uri discoveryUrl, Opc.Ua.EndpointConfiguration endpointConfiguration, Opc.Ua.ServiceMessageContext messageContext) [0x00000] in <00000000000000000000000000000000>:0 
  at Opc.Ua.DiscoveryClient.Create (System.Uri discoveryUrl, Opc.Ua.EndpointConfiguration configuration) [0x00000] in <00000000000000000000000000000000>:0 
  at va..ctor (System.Uri a, Opc.UaFx.OpcApplicationConfiguration b) [0x00000] in <00000000000000000000000000000000>:0 
  at Opc.UaFx.Client.OpcDiscoveryClient..ctor (System.Uri discoveryUrl, Opc.UaFx.OpcApplicationConfiguration configuration) [0x00000] in <00000000000000000000000000000000>:0 
  at Opc.UaFx.Client.OpcClient.a (System.Uri a, Opc.UaFx.OpcApplicationConfiguration b) [0x00000] in <00000000000000000000000000000000>:0 
  at Opc.UaFx.Client.OpcClient.a () [0x00000] in <00000000000000000000000000000000>:0 
  at Opc.UaFx.Client.OpcClient.ConnectCore () [0x00000] in <00000000000000000000000000000000>:0 
  at Opc.UaFx.Client.OpcClient.Connect () [0x00000] in <00000000000000000000000000000000>:0 
  at OpcUaClientScript.ConnectToOpcUaMachine (System.String machineIp) [0x00000] in <00000000000000000000000000000000>:0 
  at OpcUaClientScript.GetDebugVal () [0x00000] in <00000000000000000000000000000000>:0 
  at UnityEngine.Events.UnityAction.Invoke () [0x00000] in <00000000000000000000000000000000>:0 
  at UnityEngine.Events.InvokableCall.Invoke () [0x00000] in <00000000000000000000000000000000>:0 
  at UnityEngine.Events.UnityEvent.Invoke () [0x00000] in <00000000000000000000000000000000>:0 
  at UnityEngine.UI.Button.Press () [0x00000] in <00000000000000000000000000000000>:0 
  at UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData) [0x00000] in <00000000000000000000000000000000>:0 
  at UnityEngine.EventSystems.ExecuteEvents.Execute (UnityEngine.EventSystems.IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData) [0x00000] in <00000000000000000000000000000000>:0 
  at UnityEngine.EventSystems.ExecuteEvents+EventFunction`1[T1].Invoke (T1 handler, UnityEngine.EventSystems.BaseEventData eventData) [0x00000] in <00000000000000000000000000000000>:0 
  at UnityEngine.EventSystems.ExecuteEvents.Execute[T] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.ExecuteEvents+EventFunction`1[T1] functor) [0x00000] in <00000000000000000000000000000000>:0 
  at UnityEngine.EventSystems.StandaloneInputModule.ReleaseMouse (UnityEngine.EventSystems.PointerEventData pointerEvent, UnityEngine.GameObject currentOverGo) [0x00000] in <00000000000000000000000000000000>:0 
  at UnityEngine.EventSystems.StandaloneInputModule.ProcessMousePress (UnityEngine.EventSystems.PointerInputModule+MouseButtonEventData data) [0x00000] in <00000000000000000000000000000000>:0 
  at UnityEngine.EventSystems.StandaloneInputModule.ProcessMouseEvent (System.Int32 id) [0x00000] in <00000000000000000000000000000000>:0 
  at Microsoft.MixedReality.Toolkit.Input.MixedRealityInputModule.Process () [0x00000] in <00000000000000000000000000000000>:0 
  at UnityEngine.EventSystems.EventSystem.Update () [0x00000] in <00000000000000000000000000000000>:0 

【问题讨论】:

    标签: c# .net unity3d hololens opc-ua


    【解决方案1】:

    HoloLens 应用程序使用 IL2CPP 脚本后端来构建项目,它具有一些固有的scripting restrictions。此外,我注意到有一个已关闭的问题反馈 OPC UA 与 Unity IL2CPP 脚本后端的兼容性问题,它可能对您有所帮助:https://github.com/OPCFoundation/UA-.NETStandard/issues/760#issuecomment-514502763

    【讨论】:

      猜你喜欢
      • 2016-10-07
      • 1970-01-01
      • 1970-01-01
      • 2017-08-23
      • 2021-03-26
      • 2023-02-09
      • 2020-08-23
      • 2017-06-14
      • 1970-01-01
      相关资源
      最近更新 更多