PLC API#
TwinCATにより提供されているEvent loggerをPLCから操作するためのファンクションブロック群(PLC API) についての説明です。この中には、TwinCAT 3.1 Build 4026からしかサポートされていないものがあります。ここでは、Build 4024以下でサポートされているものに限定してご紹介します。また、一般的なアラーム管理に必要なファンクションブロックのみピックアップしてご紹介します。
- FB_TcAlarm
登録したイベントクラスの個々のアラームイベントを実体化するために使われます。このオブジェクトからアラームの発報、確認、リセットの各種操作を行います。このファンクションブロックのインスタンス自身は土台(ファンデーション)であり、
Create
やCreateEx
メソッドを用いてイベントクラスの任意のイベントを構築してから使用します。FB_TcEventBase
を基底クラスとしています。- FB_TcEvent
オブザーバファンクションブロック
FB_ListenerBase2
のコールバックメソッドである、OnAlarm***
やOnMessage****
が呼び出された際に引数に渡されるオブジェクトです。このオブジェクトはFB_TcAlarm
やFB_TcMessage
の中身データをコピーしたもので読取専用です。オブジェクトそのものをコピーすることはできず、要素を取り出してコールバックメソッド内でデータ処理する必要があります。また、このオブジェクトはシングルトンです。参照やポインタ等を用いて永続化することができません。FB_TcEventBase
を基底クラスとしています。- FB_ListenerBase2
FB_TcEventFilter
にて定義したフィルタ条件に従い購読(Subscribe2メソッド実行)すると、購読対象の個々のアラームが発生(Raised)、確認(Confirmed)、解除(Cleared)されるたびに各種コールバックメソッドが実行されます。- FB_TcEventFilter
FB_ListenerBase2
のSubscribe2
メソッドに渡す購読するイベントのフィルタ条件オブジェクトです。フィルタ設定用のAPIの解説がInfoSysでは十分ではありません。ほとんどのケースでは、該当するEventClass(GUID)の全てのイベントを購読する設定で問題がないので、以下の通り実装すれば良いものとします。VAR_INPUT event_class : GUID; END_VAR VAR fbListenerFilter : FB_TcEventFilter; END_VAR // define all events (messages and alarms) from this eventclass fbListenerFilter.Clear().EventClass.EqualTo(event_class);
- FB_RequestEventText
イベントクラスにて定義されるテキストは、基本テキストとArgumentsです。
Request
メソッドにて、対象のイベントIdとFB_TcArguments
のインスタンスを読み込み、GetString
メソッドでEvent loggerデータベースからADSを経由して文字列を取得します。GetString
メソッドについては文字列を取得完了するまで連続実行が必要ですので、遅延処理が必要です。FB_ListenerBase2
によりSubscribeしたアラームが同時に複数発生した場合でも個々に文字列取得完了を待つ必要があります。- FB_TcArguments
イベントの Display Textには、最大1024Byteまでの128個の引数を与えて、固定のアラームテキストではなく、動的なテキストを付加することができます。この仕組みをArgumentsといいます。この Arguments オブジェクトを作成するためのファンクションブロックです。