PI AF SDKPI AFPI Data Archiveに直接接続するメソッドを提供しています。

PI Data Archiveに高速に書き込み処理を行う場合などにはPI Data Archiveに直接することは大変便利な機能です。

PI Data Archiveに直接接続するには.Net4を使用する必要があります)

 

アプローチ

  1. Visual Studioを開きます
  2. 新規プロジェクトを作成し、Visual C# > Console Applicationを選択し、名前を「AccessPI」とします。
  3. PI AF SDKの参照をプロジェクトに追加します
    1. プロジェクト > 参照の追加...
    2. アセンブリ > 拡張
    3. OSIsoft.AFSDKにチェックを付けます。バージョン4.0AFSDKにチェックをつけるようにしてください
    4. OKをクリックします
  4. 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.SinusoidPI 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を使用するのがよいでしょう。

PIPointList Class

>The PIPointList is the primary way to make bulk data access calls to the PIServer.

 

PIPointListを使用するとBulk callが使用され、パフォーマンスが向上します。

AFSDKにてエレメント、属性にアクセスする方法は以下を参照してください。

AF SDKにてエレメントと属性を作成する方法(基礎)