4

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
        { }
    }
});
4

1 に答える 1