イベントフレームの作成について

お世話になっております。

イベントフレームのStartTimeとEndTimeの仕組みについて質問です。

 

PI Pointに以下のように値を書き込みます。

時刻、値

2020/1/1 1:00:00、A

2020/1/1 3:00:00、B

 

PI System Explorer上で属性のトレンドを見ると、

値が2020/1/1 1:00~2:59まで補間されてAで表示されていますので、

一つ目のイベントは

StartTime:2020/1/1 1:00、EndTime:2020/1/1 2:59

となることを想定しておりましたが、

実際は一つ目のイベントが

StartTime:2020/1/1 1:00、EndTime:2020/1/1 1:00

のようになってしまいます。

想定のようにイベントを作成するには、StartTrigger、EndTriggerを設定すべきでしょうか?

 

現在のイベントフレームのStartTriggerロジックの設定としては、

PrevVal(‘PI Pointを設定した属性’)<>’ PI Pointを設定した属性’

としています。

 

以上よろしくお願いいたします。

  • 早川様、

     

    早速ご回答ありがとうございます。

     

    ■ 条件式について

    正しくは以下の条件式との認識でよろしいでしょうか。

    PrevVal(‘PI Pointを設定した属性’, '*')<>’ PI Point

    ⇒ 

    PrevVal(‘PI Pointを設定した属性’, '*')<>’ PI Pointを設定した属性’ 

    です。AFの属性名がtestという名前の場合、(testにはデータ参照でpipointを設定しています)

    Preval('test','*')<>'test'

    です。

     

    ■ イベントの時刻について

    StartTime:2020/1/1 1:00、EndTime:2020/1/1 3:00

     

          ⇒

    上記のようになってくれれば良いのですが、EndTimeがPI Pointに書き込んだ前の時刻

    StartTime:2020/1/1 1:00、EndTime:2020/1/1 1:00

    となってしまいます。

    また、間に以下のように書き込んだ場合も、一つ目のイベントのEndTimeは2020/1/1 1:30:00

    となってしまいます。

    時刻、値

    2020/1/1 1:00:00、A

    2020/1/1 1:30:00、A

    2020/1/1 3:00:00、B

     

    以上初歩的な質問で恐縮ですがよろしくお願いいたします。

  • ご投稿ありがとうございます。

    以下の点について確認させてください。

     

    ■ 条件式について

    正しくは以下の条件式との認識でよろしいでしょうか。

    PrevVal(‘PI Pointを設定した属性’, '*')<>’ PI Point

     

    ■ イベントの時刻について

    StartTime:2020/1/1 1:00、EndTime:2020/1/1 3:00

     

    もし認識に誤りがありましたらコメントください。

     

     

    ご質問の内容が「EventFrameの終了時刻はイベント発生時刻と同一となる」との認識でよろしければ、こちらにつきましてはEventFrameの仕様となっております。

  • ご連絡ありがとうございます。

    上記内容、把握させていただきました。

     

    今回、作成しようとしているEvent Frameは単純なスイッチ等からEvent Frameを作成するパターンとなりますでしょうか。それとも複数ステータスがあり、そのステータス毎にEvent Frameを作成する形になりますでしょうか。

     

    ON/OFFのみの2ステートのデータからEvent Frameを作成する場合は条件式を

    '属性' = "ON"

    のような単純な比較を使用していただくのがお勧めです。

    これはPI Systemではデータの保管タイミングが圧縮によってまばらとなるため、PrevValを使用したEvent Frame作成は期待した結果とならない場合があるためです。

     

    もし複数ステータスからEvent Frameを作成するのであれば、以下の条件式を使用し、固定時間軸で値を比較するのがお勧めです。

    TagVal( '属性', '*-1s' ) <> '属性'

    上記の内容は1秒前の値と比較しています。

    この条件式を設定する場合は対象のPI PointのStep属性が「On」である事が条件となります。

  • 早川様、

    ご回答ありがとうございます。

     

    PI Pointの属性はStringなのでStep属性はONになっているという認識です。

    教えていただいた方法、

    Start Triggerを

    TagVal( '属性', '*-1s' ) <> '属性'

    の設定で実施したのですが、

    イベントは

    StartTime:2020/1/1 1:00、EndTime:2020/1/1 1:00

    と1点のように生成されてしまいます。

    イベントが終了するときに参照されるEndTimeの時刻は、Aが最終的に入力された時刻(つまり2020/1/1 1:00)

    になっているのですが、

    Bが開始した時刻をEndTimeのように設定するロジック等はないでしょうか?

    値が補完されている時間帯も含めてイベントを作成したいです。

     

    質問ばかりで恐縮ですがよろしくお願いいたします。

  • Event Frameの期待する動作としてはTakahiro様の記載通りです。

    大変申し訳ないのですが、差し支えなければ該当するPI PointのArchiveデータをPI SMTのArchive Editorで表示したものを張り付けていただけますでしょうか。実際のPI Pointのデータを確認してみたいと思います。

  • Takahiro様、一つ見落としがありました。

    上記の条件式ですと、次の評価タイミングではすぐにEndTriggerの条件となってしまうため、1秒のEvent Frameとなってしまいます。

     

    少しイレギュラーな設定となりますが、条件判断を開始時と終了時でずらす仕組みで対応可能です。


    pastedImage_1.png.png

     

    開始時も終了時も1秒ずらして判断しています。

    そのため、「次はTrue」を使用し、終了トリガーの判断を1秒ずれさせています。

    これを実現するためには定周期での判断が必要となり、1秒周期で判断させる必要があります。Takahiro Yamauchi

  • 早川様、

    お世話になっております。

    ご回答いただきありがとうございます。

     

    時刻、値

    2020/1/1 1:00:00、A

    2020/1/1 3:00:00、B


    pastedImage_1.png.png

    を設定し結果のプレビューを確認したところ、

    一つ目のイベントは

    StartTime:2020/1/1 1:00、EndTime:2020/1/1 3:00

    二つ目のイベントは

    StartTime:2020/1/1 3:00、EndTime:- 

    と期待通りの結果になりました。

     

    長期にわたってフォロー・アドバイスいただきありがとうございました。