我正在使用 带有 C# .NET 的OPCSiemensDAAutomation dll 从 OPC Server 检索标签的值。我设法使用 QueryAvailableProperties()和 GetItemProperties()检索值,但目标是检索每个请求的 500k 个标签值。
我已经用 100 个标签进行了测试,代码在 45 秒内完成,多线程导致 100 个标签的 30 秒小幅改进。以当前速度达到目标标签量需要 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
{ }
}
});