OSIsoftのインターフェース製品のように複数タグ、複数属性にAFSDKで値を書き込みたい場合があります。
その際に利用できるメソッドをご紹介します。
AFListData.UpdateValues Method (複数属性)
以下サンプルコードです。
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タグ)
以下サンプルコードです。
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となっています。リンク先にもサンプルコードがあるので、そちらも併せてご確認ください。
これらのメソッドで効率的に値書き込みができるかと思います。