データベース及び解析自動化を運用中のSystemLinkのDataPluginを更新してカスタムプロパティを追加する

更新しました May 25, 2021

環境

ソフトウェア

  • DIAdem
  • SystemLink
  • SystemLink TDM Analysis Add-On
  • SystemLink TDM DataFinder Module

SystemLinkで計測データを管理し、データベースの共有、解析自動化の運用をしている際に計測データから追加のメタ情報を抽出し、データベースに加えたい場合があります。このような時、まずDataPluginを更新し、データベースを作成し直する必要があります。しかし、解析自動化が実行中の場合、データベースの更新により解析自動化がトリガされ、解析結果の上書が発生してしまう場合があります。ここではDataPluginを更新した際にデータベース、解析自動化にどのような変化が発生するかを確認し、解析結果の予期せぬ上書きを防ぐことを目指します。

本資料では下記のソフトウェアを使用しています。
  • DIAdem 2020 SP1
  • SystemLink 2020 R3

DataPluginを用意する

ここではまず3つのカスタムプロパティを読み込むことのできるDataPluginを使用して、サンプルデータを読み込み、データベースを作成します。その後、DataPluginの内容を一部変更し、追加の2つのカスタムプロパティを読み込むことのできるDataPluginに更新します。


1. DataPluginの作成
最初に使用するDataPluginは下記のスクリプトです。DataPluginの作成方法とスクリプトの更新方法はこちらの資料で確認できます。
 
Option Explicit

Sub ReadStore(File)
  'Provide the file object with information about the file format
  File.Formatter.LineFeeds = vbNewLine
  File.Formatter.IgnoreEmptyLines = true
  File.Formatter.TrimCharacters = " "
  File.Formatter.Delimiters = ";"
  File.Formatter.ThousandSeparator = "."
  
  'Read the name of the source out of the first line of the file.
  Dim TitleValue : TitleValue = File.GetNextStringValue(eString)
  Call Root.Properties.Add("Name", TitleValue)

  'Read the description of the implicit channel out of the second line of the file.
  File.SkipLine() 'Advance to the next line.
  Dim ChannelName : ChannelName = File.GetNextStringValue(eString)
  Dim StartValue  : StartValue  = File.GetNextStringValue(eI32)
  Dim Increment   : Increment   = File.GetNextStringValue(eI32)
  Dim ChannelSize : ChannelSize = File.GetNextStringValue(eI32)
  
  'Create the implicit channel.
  Dim ChannelGroup : Set ChannelGroup = Root.ChannelGroups.Add("MyChnGroup")
  Call ChannelGroup.Channels.AddImplicitChannel(ChannelName, StartValue, Increment, ChannelSize, eI32)
  
  'Read the root's properties out of the file
  File.Formatter.Delimiters = ":" 'Properties and their values are seperated by a ":"
  
  Dim PropertyName, PropertyValue, i
  For i = 1 to 5
    File.SkipLine() 'Advance to the next line.
    PropertyName  = File.GetNextStringValue(eString)
    PropertyValue = File.GetNextStringValue(eString)    
    'Create the property on the root of the plugin.
    Call Root.Properties.Add(PropertyName, PropertyValue)
  Next

End Sub 


2. データの読み込みとカスタムプロパティの確認
読み込むサンプルデータはAttachmentsのEX1SampleData.zipフォルダの*.ex1形式の物を使用します。DIAdem, SystemLinkでDataPluginを使用してデータを読み込む方法はこちらの資料で確認できます。サンプルデータをDataFinderインスタンスでインデックス化し、カスタムプロパティを最適化すると下記の様に3つのカスタムプロパティを確認できます。
 
1CusProp1.png


 

Analysisインスタンスの作成

EX1SampleData.zipフォルダSample.anpを使用してAnalysisインスタンスを作成します。手順はこちらの資料の「解析自動化でレポートを自動作成する」で確認出来ます。上記の3つのカスタムプロパティはデータナビゲーションで使用可能なことが確認できます。
 
3datanavi.png


 

DataPluginの更新

1. DataPluginを更新する
DataFinderインスタンス、Analysisインスタンスの動作を確認後、DataPluginを更新し、2つの追加のグループカスタムプロパティ(Custom1, Custom2)を読み込みます。スクリプトは下記の物を使用します。
 
Option Explicit

Sub ReadStore(File)
  'Provide the file object with information about the file format
  File.Formatter.LineFeeds = vbNewLine
  File.Formatter.IgnoreEmptyLines = true
  File.Formatter.TrimCharacters = " "
  File.Formatter.Delimiters = ";"
  File.Formatter.ThousandSeparator = "."
  
  'Read the name of the source out of the first line of the file.
  Dim TitleValue : TitleValue = File.GetNextStringValue(eString)
  Call Root.Properties.Add("Name", TitleValue)

  'Read the description of the implicit channel out of the second line of the file.
  File.SkipLine() 'Advance to the next line.
  Dim ChannelName : ChannelName = File.GetNextStringValue(eString)
  Dim StartValue  : StartValue  = File.GetNextStringValue(eI32)
  Dim Increment   : Increment   = File.GetNextStringValue(eI32)
  Dim ChannelSize : ChannelSize = File.GetNextStringValue(eI32)*10
  
  'Create the implicit channel.
  Dim ChannelGroup : Set ChannelGroup = Root.ChannelGroups.Add("MyChnGroup")
  Call ChannelGroup.Channels.AddImplicitChannel(ChannelName, StartValue, Increment, ChannelSize, eI32)
  
  'Read the root's properties out of the file
  File.Formatter.Delimiters = ":" 'Properties and their values are seperated by a ":"
  
  Dim PropertyName, PropertyValue, i
  For i = 1 to 5
    File.SkipLine() 'Advance to the next line.
    PropertyName  = File.GetNextStringValue(eString)
    PropertyValue = File.GetNextStringValue(eString)    
    'Create the property on the root of the plugin.
    Call Root.Properties.Add(PropertyName, PropertyValue)
  Next

 File.Formatter.Delimiters = ";"
  While (File.Position <> File.Size)
    File.SkipLine() 'Advance to the next line.
    PropertyName  = File.GetNextStringValue(eString)
    PropertyValue = File.GetNextStringValue(eString)    
    Call Root.ChannelGroups(1).Properties.Add(PropertyName, PropertyValue)
  Wend  

End Sub 

上記のスクリプトは更新前のスクリプトと比較すると下記の赤枠の部分が変化しています。赤枠の部分ではデータの配列の長さを10倍にしています。また、追加のプロパティをグループプロパティとして読み込む設定が追加されています。この追加のプロパティとはサンプルデータの10.ex1, 11.ex1, 12.ex1の3つに含まれているCustom1, Custom2です。 
 
2NewDataPlugin.png


2. データベース
DataPluginをDIAdem上で書き換えたのち、保存すると、SystemLink上で使用されているDataPluginも自動的に置き換わります。ただし、データベースそのものはインデックスのリセットを行わない限り作り直されることはなく、過去に作成したデータベースを変更するにはインデックスのリセットでデータベースを0から作成し直す必要があります。非常に多くのプロパティを最適化し、データベースの大きさ(インデックスサイズ)が大きくなりすぎた場合なども、データベースを小さくするには最適化するプロパティの数を減らし、インデックスのリセットを行い、データベースを0から作り直す必要があります。


3. DataPlugin更新前後のデータベースを比較する
DataPlugin更新前に1.ex1と10.ex1をインデックス化しておき、DataPlugin更新後に11.ex1をDataFinderインスタンスが監視しているフォルダにコピーし、インデックス化すると、更新後のDataPluginによって読み込むことのできる2つのグループプロパティが読み込まれます。
 
4groupprop.png

このグループプロパティを最適化し、インデックスの最適化を行い、上級統計を調べると、合計3(1.ex1, 10.ex1, 11.ex1にそれぞれ1つずつグループチャンネルが存在)、個別のカスタムプロパティと最適化されたカスタムプロパティが2(Custom1とCustom2はどちらも最適化されている為)であることが確認できます。一方、カスタムプロパティは2となっており、これは11.ex1の2つのカスタムプロパティしかデータベースには登録されていないことが確認できます。Custom1とCustom2のグループプロパティは本来、10.ex1にも存在はしているにもかかわらず、更新前のDataPluginはこれらのプロパティを読み込むことができなかった為、10.ex1のこれらのプロパティはデータベース上に存在しません。
 
5group.png

このような状態はデータが読み込まれた時のDataPluginによってデータベース上のメタ情報が違うという状態になる為、データナビゲーションで追加のカスタムプロパティを使用した検索はできません。また、全ての計測データが統一されたフォーマットでデータベースに登録されている状態ではなくなってしまう為、データ管理の面からも好ましくない状態となります。


4. インデックスのリセット
このような状況を解決するにはインデックスのリセットを行い、既存のデータベースを破棄し、新しいDataPluginですべてのデータを再度読み込み、再度データベースを作成し直します。
 
6resetindex.png

インデックスのリセットを行った後、上級統計を調べるとカスタムプロパティが4となります。これは10.ex1が更新後のDataPluginで読み込まれ、データベース上に10.ex1のグループプロパティが2つ追加された事を示しています。
 
7customprop2.png

また、新しいDataPluginでデータベースを作成し直す事で、新しいDataPluginによって追加された2つのグループプロパティをデータナビゲーションの検索条件として使用できるようになります。
 
8datanavi.png

インデックスのリセットによりデータベースを作成し直す事で、DataPluginの更新は完了します。

ただし、DataFinderインスタンスにおいて、「トリガされたタスク」、「スケジュールされたタスク」、「連続スキャン」を使用している場合、インデックスのリセットなどのデータベースを変更する操作は、解析タスクをトリガする為、解析自動化で指定されている処理が実行される事で以前作成したレポートやデータを上書きします。

 

DataPlugin及びデータベース更新時の解析自動化の挙動

1. 解析自動化プロシージャのタスク
トリガされたタスクによる自動解析はAnalysisインスタンスを停止する事で動作を停止する事ができます。Analysisインスタンス停止中にインデックスのリセットを行い、再度Analysisインスタンスを再開する事で過去に解析したデータを再度解析し、レポートを上書きする挙動を防ぐことができますが、これは完璧な対処方法ではありません。

例えばスケジュールされたタスクは定期的に全データベースの変更点を確認する為、スケジュールされたタスクにより、過去のデータベースとの変更点がある事が確認され、自動解析が実行され、レポートや出力結果が上書きされる場合があります。また、データベースが何らかの理由によって更新された場合もトリガされたタスクにより解析が実行される為、結果が上書きされます。例えばデータインデックス作成システムステータスにおいて、ファイルインデックスの再構成を行った場合、データベースが作成され直す為、トリガされたタスクにより解析が実行されます。
 
9system status.png

DataPluginを更新する場合、更新前の解析結果が必要となる場合、DataPlugin更新前に解析自動化の解析自動化プロシージャのタスク設定において、解析結果の出力先フォルダを変更する、もしくは過去の解析結果を別のフォルダに保存しておく事を推奨します。
 
10analysis.png

 

DataPlugin更新時のデータナビゲーションの挙動

1. データナビゲーション
DataPluginの更新を行う場合、データの構造や内容そのものを変更する事もできます。DataPlugin更新によるこれらの変更点の適応のタイミングはDataPluginにおける変更内容によって変化します。主な判断材料はデータベースに変更点が発生するかどうかという点になります。

例えばこの資料のDataPluginではデータの長さを変更している部分があります。更新前のDataPluginに対して、データの長さのみを変更した場合、DataFinderインスタンスの停止と開始を行うだけでデータナビゲーションからデータを閲覧した際にデータの長さが変化している事を確認できます。一方、カスタムプロパティの追加、変更が伴う場合、インデックスのリセットを行い、データベースを作成し直す操作を行わなければデータナビゲーションでは過去のデータが表示されます。

一部の変更がDataFinderインスタンスの再起動により即座に反映される理由は下記の図から理解できます。DataFinderが管理しているデータベースには閲覧対象の計測データの実際の配列データは含まれておらず、それらのデータのメタ情報や使用しているDataPlugin名などの情報を管理しています。クライアントPCなどからデータナビゲーション経由で実際のデータを閲覧する場合、DataPluginを使用して実際のデータを読み取るので、実際にデータを読み取る環境のDataPluginのバージョンがサーバと一致していない場合、大きな問題となります。
 
DataPlugin Upload.png


これらの理由からDataFinderインスタンスへの接続情報をクライアントPCに配布する場合、クライアント構成にデータプラグインを含めるデータプラグインを自動的に同期などの設定が重要となります。
 
11clientEnv.png
 

Attachments