从 HDA 服务器读取数据 returns E_INVALIDHANDLE
Read data from HDA server returns E_INVALIDHANDLE
我正在使用 OpcNetApi 程序集连接 Matrikon OPC HDA 服务器并从中读取数据。连接正在进行,但是当我尝试从服务器中提取一些测试数据时,我收到 E_INVALIDHANDLE
错误 ResultID
。这是我的进度:
Opc.URL url = new Opc.URL("opchda://localhost/Matrikon.OPC.Simulation.1");
OpcCom.Factory fact = new OpcCom.Factory();
hdaServer = new Opc.Hda.Server(fact, url);
hdaServer.Connect();
// Read data from historian
DateTime[] times = new DateTime[1];
times[0] = DateTime.Now;
Opc.ItemIdentifier[] items = new Opc.ItemIdentifier[1];
items[0] = new Opc.ItemIdentifier();
items[0].ItemName = "Random.ArrayOfString";
items[0].ClientHandle = null; // which handle should I use?
ItemValueCollection[] itemsColl = hdaServer.ReadAtTime(times, items);
没有报错但是在itemsColl
.
里面找不到结果
Random.ArrayOfString
是具有可用历史值的现有 OPC 项目。
更新
我找到了我正在研究的解决方案:https://github.com/jdecuyper/OPC-HDA-Client
我认为您在 ReadAtTime 方法中使用的日期是错误的。此方法在特定时间读取数据。尝试使用 ReadRaw 或 ReadProcessed 方法,您可以在其中读取日期范围内的数据。
我正在使用 OpcNetApi 程序集连接 Matrikon OPC HDA 服务器并从中读取数据。连接正在进行,但是当我尝试从服务器中提取一些测试数据时,我收到 E_INVALIDHANDLE
错误 ResultID
。这是我的进度:
Opc.URL url = new Opc.URL("opchda://localhost/Matrikon.OPC.Simulation.1");
OpcCom.Factory fact = new OpcCom.Factory();
hdaServer = new Opc.Hda.Server(fact, url);
hdaServer.Connect();
// Read data from historian
DateTime[] times = new DateTime[1];
times[0] = DateTime.Now;
Opc.ItemIdentifier[] items = new Opc.ItemIdentifier[1];
items[0] = new Opc.ItemIdentifier();
items[0].ItemName = "Random.ArrayOfString";
items[0].ClientHandle = null; // which handle should I use?
ItemValueCollection[] itemsColl = hdaServer.ReadAtTime(times, items);
没有报错但是在itemsColl
.
Random.ArrayOfString
是具有可用历史值的现有 OPC 项目。
更新
我找到了我正在研究的解决方案:https://github.com/jdecuyper/OPC-HDA-Client
我认为您在 ReadAtTime 方法中使用的日期是错误的。此方法在特定时间读取数据。尝试使用 ReadRaw 或 ReadProcessed 方法,您可以在其中读取日期范围内的数据。