ProcessBookでデータをcsvファイルに出力する方法

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の画面のスタートタイム、エンドタイムを使用するようにする。

    オブジェクトは画面内に置いてあるオブジェクトから取得するなど処理が必要かと思います。

    実装の参考にしていただければ幸いです。