PLC API

PLC API#

TwinCATにより提供されているEvent loggerをPLCから操作するためのファンクションブロック群(PLC API) についての説明です。この中には、TwinCAT 3.1 Build 4026からしかサポートされていないものがあります。ここでは、Build 4024以下でサポートされているものに限定してご紹介します。また、一般的なアラーム管理に必要なファンクションブロックのみピックアップしてご紹介します。

FB_TcAlarm

登録したイベントクラスの個々のアラームイベントを実体化するために使われます。このオブジェクトからアラームの発報、確認、リセットの各種操作を行います。このファンクションブロックのインスタンス自身は土台(ファンデーション)であり、CreateCreateExメソッドを用いてイベントクラスの任意のイベントを構築してから使用します。FB_TcEventBaseを基底クラスとしています。

FB_TcEvent

オブザーバファンクションブロックFB_ListenerBase2のコールバックメソッドである、OnAlarm***OnMessage****が呼び出された際に引数に渡されるオブジェクトです。このオブジェクトはFB_TcAlarmFB_TcMessageの中身データをコピーしたもので読取専用です。オブジェクトそのものをコピーすることはできず、要素を取り出してコールバックメソッド内でデータ処理する必要があります。また、このオブジェクトはシングルトンです。参照やポインタ等を用いて永続化することができません。FB_TcEventBaseを基底クラスとしています。

FB_ListenerBase2

FB_TcEventFilterにて定義したフィルタ条件に従い購読(Subscribe2メソッド実行)すると、購読対象の個々のアラームが発生(Raised)、確認(Confirmed)、解除(Cleared)されるたびに各種コールバックメソッドが実行されます。

FB_TcEventFilter

FB_ListenerBase2Subscribe2メソッドに渡す購読するイベントのフィルタ条件オブジェクトです。フィルタ設定用の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 オブジェクトを作成するためのファンクションブロックです。