Page top

警報発生時刻ログ機能付きアナンシェータ回路を教えてください。

FAQ番号:FAQ01014

 

回答

ノンロックイン・タイプのアナンシェータ回路において、警報発生時刻ログ機能を持たせる方法についてご紹介します。
FAQ01009の回路への追加機能となりますので、まず、FAQ01009をご一読ください。

警報発生時刻ログ機能付きアナンシェータのタイムチャート

<動作説明>
警報入力がONすると、入力がONの間、警報表示出力を1秒間隔で点滅させ、警報ブザーを鳴動させます。
また、警報入力ONの立ち上がりで、警報発生履歴データを書き込みます。
ブザー停止PBを押下すると、ブザーを停止し、警報表示出力も点灯に切り替えます。
ランプテストPBを押下している間、すべての警報表示出力を点灯させます。

<プログラムの組み方>
FAQ01009と同様に、①アドレスオフセット方式と、②ファンクションブロック方式をご紹介します。
また、巻末に従来の③インデックスレジスタ方式についても添付しています。


①アドレスオフセット方式
形CJ2シリーズなどでは、構造体が扱えるので、履歴データの内、警報が発生したアナンシェータの番号とそのときの発生時刻を構造体として定義して、1つのデータ型:警報発生履歴データalmにまとめます。
警報発生履歴データalm型のデータを32個の配列にして追加し、配列内の何番目のデータかを[ ]内にログポインタlptrの添え字で指定します。
通常の変数で構成された配列は[ ]内の添え字だけで指定しますが、構造体変数で構成された配列の場合の指定方法は、[ ]内の添え字で配列内の何番目かを指定し、さらに、「.」(ドット)でつないで構造体メンバ名を指定します。
構造体メンバが配列の場合、さらに、[ ]内の添え字で配列内の何番目かを指定します。
ここでは、警報発生履歴データの配列Logの中の、アナンシェータ番号の構造体メンバanと、発生時刻の構造体メンバclに対して、ログポインタlptrで指定して書き込んでいます。
アナンシェータ番号の指定例:Log[lptr].an
発生時刻の指定例:Log[lptr].cl[0]

以上の方法で警報発生履歴データに書き込んだ後、ログポインタを1つ加算します。
構造体で定義した型は4Wのデータですが、ポインタを1つ加算するだけで、次のレコードのアドレスを自動的に指定できます。

ログポインタがレコード数32個以上になったらログポインタを0クリアします。
以上の一連の処理を警報入力がONしたとき、1回だけ実行させるような微分型の実行にする必要があります。
アドレスオフセット方式は、インデックスレジスタ方式と同様、ポインタで毎回接点を切り替えるため、そのままでは微分型の実行ができません。
そこで、1回実行したらそれを一時記憶接点tmpの配列に記憶させ、その接点が立っていたら以後実行しないようにするというテクニックが必要になります。
構造体を定義して、アナンシェータ番号anと時計データclからなる警報発生履歴データalmという新しいデータ型を作成

変数テーブル (時計データCal、警報発生履歴ログLog、ログポインタlptr、微分用ワークtmpの各変数を追加)

ラダープログラム① (警報入力の立ち上がりで警報発生履歴の書き込みとログポインタの更新処理を追加)


②ファンクションブロック方式
①では警報発生履歴データを全アナンシェータ分まとめて作成しましたが、②ではオブジェクト指向の利点を生かして警報の出所であるアナンシェータの中にそれぞれの警報発生履歴を用意し、各アナンシェータから履歴が出力されるようにします。
1アナンシェータで複数個の履歴レコードを用意しようとすると、アドレスオフセット方式との併用などが必要になるので、仕様が少し異なってきますが、ここでは1アナンシェータから1個の履歴が出力され、全体で32個のアナンシェータの履歴が集まるようにします。
集まった履歴を格納する配列として、警報発生時刻ログLogを用意します。
アナンシェータのファンクションブロックFBには、警報入力の立ち上がりで警報時刻ログを出力する処理だけを追加します。
なお、どのアナンシェータから出た警報履歴かはアドレスが固定で一目瞭然ですので、ログにはアナンシェータ番号は格納しません。

この方式は、アドレスオフセットや構造体を使用しませんので、形CJ1/形CS1シリーズでも対応可能です。
変数テーブル (警報発生時刻ログLog追加)

ラダープログラム②(ファンクションブロックの外側のプログラム:FBからの履歴を警報発生時刻ログに収集)と説明

ラダーモニタ画面 (FBの入力/出力状態が一目瞭然でデバッグできます。)

ファンクションブロック定義:内部変数と入力/出力パラメータ (警報時刻ログLg1と時計データCal:アドレス固定を追加)

ファンクションブロック定義:ラダープログラム (警報入力AlaramInの立ち上がりで警報時刻ログを格納するよう追加)


③インデックスレジスタ方式
従来どおりのインデックスレジスタ方式でのプログラムは以下の添付資料をご確認ください。

~「インデックスレジスタを使いこなそう」シリーズより~

        indexreg3.pdf