ナビゲーションをスキップする
All Places > All Things PI - Ask, Discuss, Connect > Japan PI Square > ブログ > 2017 > March > 22

Japan PI Square

March 22, 2017 前日 翌日

OSIsoftのインターフェース製品のように複数タグ、複数属性にAFSDKで値を書き込みたい場合があります。

その際に利用できるメソッドをご紹介します。

AFListData.UpdateValues Method (複数属性)

https://techsupport.osisoft.com/Documentation/PI-AF-SDK/html/M_OSIsoft_AF_Data_AFListData_UpdateValues_1.htm

以下サンプルコードです。

PISystems myPISystems = new PISystems();
PISystem myPISystem = myPISystems.DefaultPISystem;
AFDatabase db = myPISystem.Databases["DBName"];
AFElement element = db.Elements["ElementName"];
AFAttributes atrs = element.Attributes;
List<AFValue> listvals1 = new List<AFValue>();
Random rnd1 = new Random();
foreach (AFAttribute atr in atrs)
{
    AFValue value1 = new AFValue(atr, rnd1.Next(0,10), new AFTime("*"));
    listvals1.Add(value1);
}
AFErrors<AFValue> errors1 = AFListData.UpdateValues(listvals1,AFUpdateOption.Replace);

Element内の複数属性に値を書き込みます。

なお、コードではrnd1というオブジェクトでランダム値(0から10の値)を書いています。

 

PIServer.UpdateValues Method (複数PIタグ)

https://techsupport.osisoft.com/Documentation/PI-AF-SDK/html/M_OSIsoft_AF_PI_PIServer_UpdateValues_1.htm

以下サンプルコードです。

PIServers myPIServers = new PIServers();
PIServer myPIDA = myPIServers.DefaultPIServer;
PIPoint pt;
List<AFValue> listvals2 = new List<AFValue>();
String servertagname;
Random rnd2 = new Random();
for (int i = 1; i <= 3; i++)
{
    PIPoint.TryFindPIPoint(myPIDA, "TagnamePrefix" + i, out pt);
    servertagname = @"\\" + myPIDA.Name + @"\" + pt.Name ;
    AFAttribute myTagAttribute = new AFAttribute(String.Format(CultureInfo.InvariantCulture, servertagname, myPIDA.Name,pt.Name));
    AFValue value2 = new AFValue(myTagAttribute, rnd2.Next(10, 20), new AFTime("*"));
    listvals2.Add(value2);
}
AFErrors<AFValue> errors2 = myPIDA.UpdateValues(listvals2, AFUpdateOption.Replace);

PIPointsオブジェクトにBulkで書き込むことはできないので、一度myTagAttributeオブジェクトのようにAFAttributeオブジェクトとしてタグを定義し、PIServerに対してUpdateValuesで書き込みます。

なお、コードではrnd2というオブジェクトでランダム値(10から20の値)を書いています。

 

それぞれのリンク先はLiveLibraryとなっています。リンク先にもサンプルコードがあるので、そちらも併せてご確認ください。

これらのメソッドで効率的に値書き込みができるかと思います。