0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【ST言語ことはじめ】カウントを利用したランプの点灯制御

Last updated at Posted at 2024-02-02

はじめに

プログラマブルロジックコントローラー(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

この警告は、ワードデバイスの比較演算が符号付きワード型として行われていることを示しています。この警告は、データ型の不一致による予期しない動作を回避するために重要ですが、定数の型を揃える方法がわからなかったため、この状態で紹介しています。

まとめ

この記事では、カウントを利用してランプの点灯を制御する方法を紹介しました。カウンターを使うことで、複雑な制御を簡潔に表現することができます。是非、実際のプロジェクトで活用してみてください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?