PI ProcessBookにて、
タグのデータをCSVファイルに出力する方法は、
表示 > 詳細からファイルに出力することができますが、
この処理をProcessBookのボタンで行うようにすることは可能でしょうか?
PI ProcessBookにて、
タグのデータをCSVファイルに出力する方法は、
表示 > 詳細からファイルに出力することができますが、
この処理をProcessBookのボタンで行うようにすることは可能でしょうか?
PI ProcessBookではVBAマクロが書けます。
おそらくVBAマクロで、表示 > 詳細のExportボタンを押すことは難しいです。
よって自分で、値を取得し、ファイルに書き出す処理をVBAで書く必要が出てきます。
ボタンを配置し、マクロでデータを取得し、自分でCSVファイルを作成することが考えられます。
マクロでの値取得にはPI SDK 1.3 Type Libraryが使用できます。
Visual Basic Editor > Tools > References > PISDK 1.3 Type Library
PI Timeを使用する場合、PITimeServer 1.0 Type Libraryもチェックします。
サンプルコードは以下です。
Sub csv()
Dim myPIServer As PISDK.Server
Dim pt As PIPoint
Dim pvsstarttime As PITime
Dim pvsendtime As PITime
Dim pvs As PIValues
Dim contents As String
Dim val As PIValue
Set myPIServer = PISDK.Servers.DefaultServer
Set pt = myPIServer.PIPoints("cdt158")
Set pvsendtime = myPIServer.ServerTime
Set pvstarttime = pvsendtime.Clone
'1 hour data
pvstarttime = pvsendtime - 3600
Set pvs = pt.Data.RecordedValues(pvstarttime, pvsendtime, btAuto)
For Each val In pvs
contents = contents + CStr(val.TimeStamp.LocalDate) + "," + CStr(val.Value) + vbCrLf
Next
Open "C:\tmp\Data.csv" For Output As #1
Print #1, contents
Close #1
End Sub
C:\tmp\Data.csvが作成され、中身は以下です。
2016/08/25 16:29:48,182.2265
2016/08/25 16:35:27,173.0658
2016/08/25 16:40:57,176.0283
2016/08/25 16:48:27,181.0672
2016/08/25 16:51:57,174.7784
2016/08/25 16:57:27,171.4123
2016/08/25 17:00:27,171.2369
2016/08/25 17:04:57,184.3287
2016/08/25 17:09:27,183.5824
2016/08/25 17:12:57,184.6248
2016/08/25 17:17:57,182.0713
2016/08/25 17:24:57,181.6805
2016/08/25 17:28:57,185.1834
2016/08/25 17:29:48,185.1834
コード内では1時間前から現在までの値を取得していますが、時刻はPI ProcessBookの画面のスタートタイム、エンドタイムを使用するようにする。
オブジェクトは画面内に置いてあるオブジェクトから取得するなど処理が必要かと思います。
実装の参考にしていただければ幸いです。
PI ProcessBookではVBAマクロが書けます。
おそらくVBAマクロで、表示 > 詳細のExportボタンを押すことは難しいです。
よって自分で、値を取得し、ファイルに書き出す処理をVBAで書く必要が出てきます。
ボタンを配置し、マクロでデータを取得し、自分でCSVファイルを作成することが考えられます。
マクロでの値取得にはPI SDK 1.3 Type Libraryが使用できます。
Visual Basic Editor > Tools > References > PISDK 1.3 Type Library
PI Timeを使用する場合、PITimeServer 1.0 Type Libraryもチェックします。
サンプルコードは以下です。
Sub csv()
Dim myPIServer As PISDK.Server
Dim pt As PIPoint
Dim pvsstarttime As PITime
Dim pvsendtime As PITime
Dim pvs As PIValues
Dim contents As String
Dim val As PIValue
Set myPIServer = PISDK.Servers.DefaultServer
Set pt = myPIServer.PIPoints("cdt158")
Set pvsendtime = myPIServer.ServerTime
Set pvstarttime = pvsendtime.Clone
'1 hour data
pvstarttime = pvsendtime - 3600
Set pvs = pt.Data.RecordedValues(pvstarttime, pvsendtime, btAuto)
For Each val In pvs
contents = contents + CStr(val.TimeStamp.LocalDate) + "," + CStr(val.Value) + vbCrLf
Next
Open "C:\tmp\Data.csv" For Output As #1
Print #1, contents
Close #1
End Sub
C:\tmp\Data.csvが作成され、中身は以下です。
2016/08/25 16:29:48,182.2265
2016/08/25 16:35:27,173.0658
2016/08/25 16:40:57,176.0283
2016/08/25 16:48:27,181.0672
2016/08/25 16:51:57,174.7784
2016/08/25 16:57:27,171.4123
2016/08/25 17:00:27,171.2369
2016/08/25 17:04:57,184.3287
2016/08/25 17:09:27,183.5824
2016/08/25 17:12:57,184.6248
2016/08/25 17:17:57,182.0713
2016/08/25 17:24:57,181.6805
2016/08/25 17:28:57,185.1834
2016/08/25 17:29:48,185.1834
コード内では1時間前から現在までの値を取得していますが、時刻はPI ProcessBookの画面のスタートタイム、エンドタイムを使用するようにする。
オブジェクトは画面内に置いてあるオブジェクトから取得するなど処理が必要かと思います。
実装の参考にしていただければ幸いです。