UFL Connector Version 1.3がUnicodeのサポートが改善されたので、ほかのファイルを処理してみました。

 

キーエンスのデータロガーは日本でよく使われています。マルチ入力データロガー - NR-600 シリーズ | キーエンス

このデータロガーからデータを取得したい場合は、

キーエンスの専用の製品を利用するか、CSVファイルにエクスポートする方法があります。

CSVでエクスポートをできるので、UFL経由でPIに入れてみましょう。

 

NR-500から下記のようなフォーマットにエクスポートは可能です。

 

#BeginHeader,33
#FormatType,NR-600\NORMAL
#FormatVersion,R3.00.00
タイトル,
ユニット番号,MASTER,UNIT1,UNIT2,UNIT3,UNIT4,UNIT5,UNIT6,UNIT7,UNIT8
ユニット種別,NR-600,(1)SS,(2)SS,(3)AB,未設定,未設定,未設定,未設定,未設定


(..省略..)


チャンネル条件,
チャンネル番号,,(1)SS-CH01,(1)SS-CH02,(2)SS-CH01,(2)SS-CH02,(3)AB-CH01,(3)AB-CH02
波形名,,"射出圧力","射出温度","集積熱電対","水晶圧電式力","圧電","ロッド"
単位,,"Mpa","deg","deg","A","A","μst"


#EndHeader,日時(μs),(1)SS-CH01,(1)SS-CH02,(2)SS-CH01,(2)SS-CH01,(3)AB-CH01,(3)AB-CH02
2018/06/20 11:00:00.000,2.15,3.92,0.66,6.60,7.18,2.88
2018/06/20 11:00:00.100,3.67,5.25,1.04,5.89,0.93,1.93
2018/06/20 11:00:00.200,2.19,3.90,0.13,6.02,38.80,1.12
2018/06/20 11:00:00.300,9.87,5.16,1.53,5.12,20.48,1.50


 

 

つまり、最初に登録されていたチャンネルやユニットのメータデータがあり、最後に時系列のデータを利用できます。

 

これから、下記のような構成をUFL Connector経由で作成します。

「チャンネル番号」の行にタグ名の作成のための情報があり、「波形名」の行に属性名の情報があります。

 

タグと属性の名前を取得するために、ConnectorのForEachの制御構造を利用します。

 

「チャンネル番号」の行に、「,」でわけっているタグ名があり、

それぞれを取得するために下記のようにこの行を処理します。

 

TagNames.FILTER = C1 == "チャンネル番号*"
ColumnCounter = 0

FOREACH (CsvGetItem(__MESSAGE, ",")) DO
    If ColumnCounter > 1 THEN
        Tags = Add("Keyence." + __ITEM)
    ENDIF
ColumnCounter = ColumnCounter + 1
ENDFOR

 

 

同じく「波形名」の行を処理します。

 

[AttributeNames]
AttributeNames.FILTER = C1 == "波形名*"
ColumnCounter = 0


FOREACH (CsvGetItem(__MESSAGE, ",")) DO
    If ColumnCounter > 1 THEN
        ' Remove unwanted double quotes
        __ITEM = SubStr(__ITEM, 2, LEN(__ITEM) - 2 )
        Attributes = Add(__ITEM)
    ENDIF
    ColumnCounter = ColumnCounter + 1
ENDFOR

 

 

最後に時系列データの行を下記のように処理し、ファイルの処理が終わると関連のエレメントを作成します。

 

 

[Data]
Data.FILTER = C1=="2*/*/*"


timestamp = ["(*),*"]


ColumnCounter = 0
Values = Clear()
FOREACH (CsvGetItem(__MESSAGE, ",")) DO
    IF(ColumnCounter > 0) THEN
        Value = __ITEM
        Values = Add(Value)
    ENDIF
    ColumnCounter = ColumnCounter + 1
ENDFOR
StoreEvents(Tags, Attributes, timestamp, Values)


IF EOS() == 1 then
    StoreElement("NR", "NR", Tags)
    tags=Clear()
    attributes=Clear()
endif

 

 

PI Interface for UFLのINIファイルと比べるとINIの作成の作業は難しくなりましたが、

このようなINIファイルを書くとデータロガー側にユニットの追加やチャンネルの名前の更新が自動にAFに反映されます。