はじめに
プログラマブルロジックコントローラー(PLC)でランプの点灯制御を行う際に、カウンターを活用することは一般的です。この記事では、カウントを利用してランプの点灯を制御する方法について解説します。
使用機材
機種など | |
---|---|
PLC | Q02CPU, QX41, QY41P, Q62P, Q38B |
アプリ | GX Works 2 |
I/O割り付けはこちらを参照
サンプルプログラム
電源投入時にランプ3が点灯しています。その後ボタン1を3回押すとランプ3が消灯してランプ2が点灯します。さらにボタン1を2回押すとランプ2が消灯してランプ1が点灯します。さらにボタン1を1回押すとランプ3のみが点灯する初期状態になるプログラムです。
ラダー図
(+) (-)
| X1 C2 C3 K1 |
+----|↑|---+---| |------------------------( )----+
| | C1 C2 K2 |
| +---| |------------------------( )----+
| | C1 K3 |
| +------------------------------( )----+
| |
| C3 RST C1 |
+----| |---+------------------------------( )----+
| | RST C2 |
| +------------------------------( )----+
| | RST C3 |
| +------------------------------( )----+
| |
| C2 Y71 |
+----| |----------------------------------( )----+
| |
| C1 C2 Y72 |
+----| |----|/|---------------------------( )----+
| |
| C1 Y73 |
+----|/|----------------------------------( )----+
| |
ST言語 1
カウンタ命令を利用したプログラムです。
PLS(X1, M0);
IF M0 THEN
M1 := TRUE;
END_IF;
OUT_C(CS2, CC3, 1);
OUT_C(CS1, CC2, 2);
OUT_C(M1, CC1, 3);
RST(CS3, C1);
RST(CS3, C2);
RST(CS3, C3);
Y71 := M1 AND NOT CS1;
Y72 := CS1 AND NOT CS2;
Y73 := CS2;
ST言語 2
比較演算などを用いて、ランプの点灯状態を制御しています。
PLS(X1, M0);
IF M0 THEN
INC(K1, CN1);
END_IF;
IF CN1 >= 6 THEN
CN1 := 0;
END_IF;
M1 := CN1 >= 5;
M2 := CN1 >= 3 AND CN1 < 5;
M3 := CN1 < 3;
Y71 := M1;
Y72 := M2;
Y73 := M3;
コードの解説
- ボタン1の入力信号をカウンターCN1に割り当てます。
- ボタン1が押されるたびに、カウンターがインクリメントされます。
- カウンターが6以上になった場合、カウンターを0にリセットします。
- カウンターの値に応じて、M1、M2、M3の各ランプの点灯を制御します。
注意: ワードデバイスの比較演算に関するエラー
上記のプログラムではコンパイル時に以下のエラーメッセージが出力されました。
Warning MAIN プログラムのコンパイル ワードデバイスは、ワード[符号付き]型として比較演算をおこないます。ワード比較を行う場合は、ワード[符号なし]/ビット列[16ビット]型グローバルラベル、もしくはINT_TO_WORD関数を使用してください。 C9215
この警告は、ワードデバイスの比較演算が符号付きワード型として行われていることを示しています。この警告は、データ型の不一致による予期しない動作を回避するために重要ですが、定数の型を揃える方法がわからなかったため、この状態で紹介しています。
まとめ
この記事では、カウントを利用してランプの点灯を制御する方法を紹介しました。カウンターを使うことで、複雑な制御を簡潔に表現することができます。是非、実際のプロジェクトで活用してみてください。