尝试从 Opc 服务器获取历史数据时如何修复 'BadServiceUnsupported' 错误

How to fix 'BadServiceUnsupported' error when trying to get historic data from Opc Server

我正在尝试从 opc 服务器获取标签的历史数据,但出现 'BadServiceUnsupported' 错误。我已经为 KepserverEX V6 中的特定标签配置了 Opc 服务器和本地历史记录。

我正在使用这个 opc 库 https://github.com/OPCFoundation/UA-.NETStandard

我成功读取了标签值,但历史数据有问题,恰好在调用 HistoryRead 方法时:

m_Session.HistoryRead( null, new ExtensionObject(details), TimestampsToReturn.Source, false, nodesToRead, out results, out diagnosticInfos);

正在获取 'BadServiceUnsupported' 异常。

我还在 KepserverEx 的项目设置中启用了 HDA 连接,但似乎并没有解决问题。

我该如何解决这个问题?

在这种情况下没有什么可以解决的。 Kepserver 仅支持来自 OPC Classic (COM/DCOM) 的 HDA,不支持 OPC UA。

要解决此问题,您可以 运行 OPC UA 包装服务器:https://github.com/OPCFoundation/UA-.NETStandard/blob/master/ComIOP/README.md

Wrapper Server 将成为您的应用程序和 KepServerEX 之间的桥梁。它是这样的:

[Your Application] --- (OPC-UA) ---> [OPC UA Wrapper Server] --- (OPC-HDA) ---> [KepServerEX]

我已经测试了上述场景,使用 m_Session.HistoryRead() 我可以从 KepServerEX v6.6 成功读取历史值

要让 Server Wrapper 打开与 KepServerEX 的 HDA 连接,请打开 Opc.Ua.ComServerWrapper.Config.xml 并为 HDA 启用 ComClientConfiguration。它应该看起来像这样:

<ComClientConfiguration i:type="ComHdaClientConfiguration">
    <ServerUrl>opc.com://localhost/Kepware.KEPServerEX_HDA.V6/{5C905440-YOUR_CLSID_HERE}</ServerUrl>
    <ServerName>HDA</ServerName>
    <MaxReconnectWait>10000</MaxReconnectWait>
    <SeperatorChars></SeperatorChars>
    <AddCapabilitiesToServerObject>true</AddCapabilitiesToServerObject>
    <AttributeSamplingInterval>1000</AttributeSamplingInterval>
    <TreatUncertainAsBad>true</TreatUncertainAsBad>
    <PercentDataBad>0</PercentDataBad>
    <PercentDataGood>100</PercentDataGood>
    <SteppedSlopedExtrapolation>false</SteppedSlopedExtrapolation>
</ComClientConfiguration>