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に反映されます。