C# .NET でOPCSiemensDAAutomation dll を使用して 、OPC サーバーからタグの値を取得しています。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
{ }
}
});