Я использую DLL OPCSiemensDAAutomation с C # .NET для получения значения тега с сервера OPC. Мне удалось получить значения с помощью QueryAvailableProperties () и GetItemProperties (), но цель состоит в том, чтобы получить значение тегов 500 тыс. За запрос.
Я тестировал со 100 тегами, и код завершил его за 45 секунд, а многопоточность привела к небольшому улучшению на 30 секунд для 100 тегов. Для достижения заданного объема тегов с текущей скоростью потребуется более 4 часов. Есть ли способ получить значение тегов сразу с большей производительностью? Спасибо.
var opcServer = new OPCSiemensDAAutomation.OPCServer();
opcServer.Connect("PCS7.OPCDAServer.1");
ConcurrentBag<DataRow> myBag = new ConcurrentBag<DataRow>(dt.AsEnumerable().ToList());
Parallel.ForEach(myBag, data =>
{
if (count <= num)
{
int cnt;
Array propertyIds, descriptions, dataTypes, errors, vals;
try
{
opcServer.QueryAvailableProperties(data[0].ToString(), out cnt, out propertyIds, out descriptions, out dataTypes);
opcServer.GetItemProperties(data[0].ToString(), cnt, propertyIds, out vals, out errors);
Tags tag = new Tags();
tag.Id = data[0].ToString();
tag.Value = vals.GetValue(2).ToString();
tags.Add(tag);
Interlocked.Increment(ref count);
}
catch
{ }
}
});