PI AF SDKはPI AF、PI Data Archiveに直接接続するメソッドを提供しています。
PI Data Archiveに高速に書き込み処理を行う場合などにはPI Data Archiveに直接することは大変便利な機能です。
(PI Data Archiveに直接接続するには.Net4を使用する必要があります)
アプローチ
- Visual Studioを開きます
- 新規プロジェクトを作成し、Visual C# > Console Applicationを選択し、名前を「AccessPI」とします。
- PI AF SDKの参照をプロジェクトに追加します
- プロジェクト > 参照の追加...
- アセンブリ > 拡張
- OSIsoft.AFSDKにチェックを付けます。バージョン4.0のAFSDKにチェックをつけるようにしてください
- OKをクリックします
- 「using」の宣言をコード上部に追加します。
using OSIsoft.AF.PI; using OSIsoft.AF; using OSIsoft.AF.Time; using OSIsoft.AF.Asset;
5.default PI Data Archiveに接続します
PIServers myPIServers = new PIServers(); PIServer myPIServer = myPIServers.DefaultPIServer; myPIServer.Connect();
6.SinusoidのPI Pointを探します
PIPoint pt = PIPoint.FindPIPoint(myPIServer, "sinusoid");
7.Current valueを取得します
AFValue Snapshot = pt.CurrentValue(); Console.WriteLine("Snapshot from Sinusoid: " + Snapshot.Value + "\t" + Snapshot.Timestamp.LocalTime);
8.1日前から現在までのrecorded valuesを取得します
AFTimeRange range = new AFTimeRange("*-1d", "*"); AFValues Recorded = pt.RecordedValues(range, OSIsoft.AF.Data.AFBoundaryType.Inside, "", false); Console.WriteLine("Showing Recorded data from Sinusoid..."); foreach (AFValue val in Recorded) { Console.WriteLine("{0,20}{1,30}", val.Value, val.Timestamp.LocalTime); } Console.ReadLine();
9.1日前から現在まで1時間毎のinterpolated valuesを取得します。
AFTimeSpan span = AFTimeSpan(hour: 1); AFValues Interpolated = pt.InterpolatedValues(range, span, "", false); Console.WriteLine("Showing Interpolated data from Sinusoid..."); foreach (AFValue val in Interpolated) { Console.WriteLine("{0,20}{1,30}", val.Value, val.Timestamp.LocalTime); } Console.ReadLine();
10.「s」の文字で始まるすべてのPI Pointを取得します
PIPointQuery query1 = new PIPointQuery(PICommonPointAttributes.Tag, OSIsoft.AF.Search.AFSearchOperator.Equal, "s*"); IEnumerable<PIPoint> foundPoints = PIPoint.FindPIPoints(myPIServer, new PIPointQuery[] { query1 }); foreach (PIPoint tag in foundPoints) { Console.WriteLine(tag.Name); } Console.ReadLine();
11.Sinusoidのタグからdescriptor, location1 , excdevの属性を取得します
IDictionary<string, object> atrs = pt.GetAttributes(new string[] { "descriptor","location1","excdev" }); Console.WriteLine("\n\nSinusoid PI Point attributes: \n"); Console.WriteLine("descriptor = " + atrs["descriptor"]); Console.WriteLine("location1 = " + atrs["location1"]); Console.WriteLine("excdev = " + atrs["excdev"]);
12.デバッグを開始し、表示される結果を確認します。
なお、複数タグの値を取得する場合、PIPointListを使用するのがよいでしょう。
>The PIPointList is the primary way to make bulk data access calls to the PIServer.
PIPointListを使用するとBulk callが使用され、パフォーマンスが向上します。
AFSDKにてエレメント、属性にアクセスする方法は以下を参照してください。
以下資料もAF SDKの使い方の参考になります。
新しい日本語のAF SDKの入門資料は公開されました