アラーム管理サンプルコードの解説#
Event loggerを用いてHMI連携のアラーム管理を行う場合、次の課題があります。
- アラームテキストを動的に生成する
アラームテキストには arguments と呼ばれるマクロ文字指定を埋め込み、イベント発行時に動的に情報を挿入する機能があります。完全なアラームテキストは、ADSを通じて非リアルタイムであるOS側にて行われます。よって、PLC等のリアルタイムシステムでアラームを発報した際にその完全なアラームテキストを取得するには、バッファキューを用いて非同期処理を行う必要があります。非同期バッファがないと、同一PLCサイクル上で同時に複数イベントが発生した場合に全てのテキストを取得することができません。
- イベント全体の状態監視ロジックの記述
複数のアラームを統括的に監視し、アラームの有無、新規にアラームの有無などの状態をシグナルタワー等の制御に用いるには、PLC APIに記述した
FB_ListenerBase2
やFB_TcEventFilter
などを用いたオブザーバパターンによるイベント監視の実装が必要となります。都度スクラッチで記述するにはかなりのコード量となってしまいます。- Visualizationに適したアラーム表示機構がない
以下のInfoSysサイトに記載されている通り、Visualizationにはイベントテーブルというイベントロガーのための表示部品がアドオンで用意されています。しかし、このイベントロガーは、TwinCAT2 向けのイベントロガーのテーブルのため互換性がありません。TwinCAT3のイベントロガーをこのテーブルに表示させるため、ST_ReadEvent構造体配列を出力するファンクションブロックが以下の通り用意されています。しかし、こちらのファンクションブロックは4026からのみ対応となっています。また、arguments などの動的テキストの表示には対応できていません。
InfoSysの参考サイト
これらの問題を解決したサンプルコードをGithubで公開しました。このサンプルコードでは、イベントロガーで発生した動的テキスト付きのアラームテキストをイベントロガーのAPIを用いて読み出し、構造体配列に展開してアラーム一覧表示データを生成します。
Visualizationでは、テーブルオブジェクト上にこの構造体配列をマッピングし、表型式で表示するデモとなっています。
また新規アラーム発報時にはボタンを点滅し、確認済みアラームと未確認のものを区別したり、イベントごとに振る舞いを設定する事によって、リセット操作によりアラームリセットに応じるか否かを差別化することを実現しています。
詳細は上記リポジトリのREADME.mdをご覧ください。