Page top

ノンロックイン・アナンシェータ回路を教えてください。

FAQ番号:FAQ01009

 

回答

アナンシェータ(annunciator)はFA現場の集中監視装置として広く用いられている異常警報表示盤のことで、ノンロックイン方式とロックイン方式の2種類があります。

<ノンロックイン・アナンシェータ>
警報入力信号の記憶機能がなく、警報入力がONのときだけ警報処理をおこない、警報入力がOFFになると警報を停止します。

32点式のノンロックイン・アナンシェータ回路を例にとり、以下にプログラムの組み方を説明します。

32点式ノンロックイン・アナンシェータのタイムチャート

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

<プログラムの組み方>
このような32点の入出力に対して、アナンシェータ回路を32点記述するとプログラムが大きくなりわかりづらくなります。
従来は、このような同じ回路を複数作成する場合は、インデックスレジスタで繰り返し処理を行っていました。
しかし、インデックスレジスタ方式では、ポインタとなるインデックスレジスタの中身を確認しにくく、誤った繰り返し処理がなされると、I/Oメモリの指定範囲を超えて想定外のエリアまで書き換えてしまってもわからないなどの問題がありました。
ここでは、このような問題を解決する方法として、①アドレスオフセット方式と、②ファンクションブロック方式をご紹介します。
また、巻末に従来の③インデックスレジスタ方式についても添付しています。
各方式の特徴と下表の対応機種をご確認いただき、目的に合った適切なプログラムの作成をお願いします。
方式
対応機種
アドレスオフセット方式
形CJ2M、形CJ2H、形NJ ※1、形NX ※1
ファンクションブロック方式
形CP1L、形CP1H、形CJ1M、形CS1、形CJ2M、形CJ2H、形NJ ※1、形NX ※1
インデックスレジスタ方式 形CP1L、形CP1H、形CJ1M、形CS1、形CJ2M、形CJ2H
    ※1 ・・・ 開発ツールは、Sysmac Studioになります。(注記のない機種は、CX-Programmerでの開発)

①アドレスオフセット方式
I/Oメモリを配列変数として定義、ポインタも変数定義することで、配列内の何番目のデータかを[ ]内にポインタの添え字で指定します。
警報入力:AlarmInは32点あるので、BOOL型(ビット単位)で32個の配列になります。
例えば3番目の警報入力を参照する場合は、AlarmIn[3]と表現し、ポインタptr番目の警報入力はAlarmIn[ptr]と表現します。
ポインタptrを加減算することで参照したい番目のデータを指定することができます。
ポインタptrはUINT型(符号なし整数)なので、中身がモニタでき、配列の範囲を超えていないかも容易に確認できます。

変数 ・・・ メモリの引き出しのようなもので、引き出しと同様に名前のラベル、大きさや形:型、仕切りなどがあります。
配列 ・・・ メモリの1つの引き出し内に仕切りを入れ、複数等分に分割したデータの集まりです。

変数テーブル (①と②共通)

ラダープログラム① (ここではモニタのしやすさを考慮し複数スキャンに跨って繰り返し)

②ファンクションブロック方式
①ではI/Oメモリの32個の接点を全アドレス分まとめて1つの配列変数にしてアドレス分処理を繰り返すことで実現しましたが、②ではI/Oメモリの1アナンシェータ分を1つの塊(オブジェクト)としてアドレス情報を持たないファンクションブロック定義(設計図)にまとめて扱います。
変数を使うのは①と同じですが、ここではファンクションブロック定義で設計されたアナンシェータの処理を32個のアドレス分インスタンス(製品に相当)を並べることでプログラミングします。
物(オブジェクト)に着目してプログラミングするので、このような方式をオブジェクト指向プログラミングと呼ばれています。
ファンクションブロック定義の設計方法は、単に1個のアナンシェータを設計するのと同じ方法で設計できます。
一度ファンクションブロック定義を設計すると、アナンシェータの数が増えたり減ったりしても、インスタンスを追加したり削除するだけで対応でき、アナンシェータの処理が変更になっても定義を書き換えるだけですべてのインスタンスに反映されます。
また、繰り返し処理が無いので誤ったI/Oメモリエリアを書き換える心配もありませんし、1つのアナンシェータごとに入出力を図で確認しながらデバッグできます。

ラダープログラム②(ファンクションブロックの外側のプログラム)と説明

ファンクションブロック定義:内部変数と入力/出力パラメータ (通常はアドレス情報を持たない)

ファンクションブロック定義:ラダープログラム (1個のアナンシェータ回路と同じ)


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

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

       indexreg1.pdf