LoginSignup
0
0

【ST言語ことはじめ】タイマーとカウンタの挙動について

Posted at

はじめに

この記事では、カウンターとタイマーの挙動の違いについて解説します。カウンターとタイマーは、PLC(プログラマブルロジックコントローラ)において重要な機能であり、その挙動の理解は制御システムの開発において不可欠です。

使用機材

機種など
PLC Q02CPU, QX41, QY41P, Q62P, Q38B
アプリ GX Works 2

I/O割り付けは[こちら](https://qiita.com/so2/items/0f0cab2e324179718b89 "I/O割り付け表")を参照してください。

サンプルコード

(* カウンタはトリガーをFALSEにしてもカウンタがリセットされない *)
(* 入力信号が自動的にパルス処理されているようにみえて、じつは2スキャン以上ひろっている、、、っぽい *)
(* M0 := X1; とすると、カウントアップは一度だが、二行目のOUT_C(M0 AND CS1, のときにM0がTRUE判定されてしまう *)

PLS(X1, M0);

OUT_C(M0 AND CS2, CC3, 1);
OUT_C(M0 AND CS1, CC2, 2);
OUT_C(M0, CC1, 3);

IF CS3 OR X2 THEN       (* リセット方法3 *)
    RST(TRUE, C1);      (* 条件によらず強制的にリセット。 *)
    RST(CS3 OR X2, C2); (* C3の状態によりリセット。おそらく王道。IF文の外に置いても機能する書き方 *)
    CN3 := 0; C3 := 0;  (*カウントは0になるがCS3がONのままになりカウントアップが機能しなくなる。 正:RST(CS3, C3); *)
END_IF;

K1Y40 := CN1; (* DPLにカウントを表示 *)
K1Y44 := CN2;
K1Y48 := CN3;

(* タイマーはトリガーをFALSEにするとカウントもリセットされる *)
(* 入力信号がパルス処理されない *)
(* タイマーのカウントを続けるためには自己保持などで条件を満たし続ける必要がある *)

IF X3 THEN
    M1 := TRUE;
END_IF;

IF X2 THEN
    M1 := FALSE;
END_IF;

OUT_T(X3, TC1, 50);
OUT_T(M1, TC2, 100);

K2Y50 := TN1; (* DPLに秒数を表示 *)
K2Y58 := TN2;

カウンターの挙動

サンプルコードのカウンター部分では、カウンターの動作を確認できます。カウンターはトリガーがFALSEでもカウンターがリセットされず、入力信号が自動的にパルス処理されるように見えますが、実際には2スキャン以上で検出されている可能性があります。

タイマーの挙動

一方、タイマーの部分では、タイマーはトリガーがFALSEになるとカウントもリセットされます。入力信号はパルス処理されませんが、タイマーのカウントを続けるためには自己保持などで条件を満たし続ける必要があります。

まとめ

カウンターとタイマーは、PLCにおける重要な機能であり、それぞれ異なる挙動を示します。カウンターはトリガーがFALSEでもリセットされず、入力信号がパルス処理される可能性がありますが、タイマーはトリガーがFALSEになるとカウントがリセットされます。制御システムの開発において、これらの挙動を正しく理解することが重要です。

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