CTD

ダウンカウンタ

ファンクションブロックCTD (count down)で、カウンタのプログラムを作成します。

パラメータ

入力

CD (BOOL)

カウントダウン入力

カウントダウン入力CDの立ち上がりエッジが検出されると、現在値CVから値"1"が減算されます。ただし、LDがONであるかCV値が"0"のときは除きます。

LD (BOOL)

ロード

LDで、カウンタは、設定値PVにリセットされます。

PV (INT)

設定値

カウント処理中に減算される値です。

出力

Q (BOOL)

信号出力

CV値が"0"になると、出力QはONになります。

CV (INT)

現在値

  • 減算結果(CV = 現在値)が格納されています。

  • プログラミングエディタから値を書き込むことにより、カウント動作中に値を変更することができます。

タイムチャート

POUヘッダ

POUヘッダには、このプログラムで使用するすべての入力変数と出力変数を宣言します。 POUヘッダは全プログラム言語で使用できます。

	VAR
		initialize_count: BOOL:=TRUE;
			(*for setting the current value
to starting value*)
		count: BOOL:=FALSE;
			(*1 is subtracted from the current
value for each leading edge
detected at count*)
		load: BOOL:=FALSE;
			(*sets the curr_value back to 
set_value, if TRUE*)
		set_value: INT:=2;
			(*the starting value*)
		output_value: BOOL:=FALSE;
			(*is set, if the current value is
zero*)
		curr_value: INT:=0;
			(*the current_value*)
		ctd_1: CTD;
			(*instance of the counter*)
	END_VAR

POUボディ

setがON (TRUE)になると、プリセット値preset_value (PV)が現在値current_value (CV)に読み込まれます。clockの立ち上がりエッジが検出されるたびに、current_valueから"1"が減算されます。この処理は、現在値current_valueが0以上になるまで繰り返され、0以上になると、signal_outputがONになります。

LDボディ

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 7 ;
        NETWORK_BODY
B(B_FB,CTD!,copy_name,8,2,13,7,,?BCD?BLD?BPV?AQ?ACV);
B(B_VARIN,,output_value,6,5,8,7,);
B(B_VAROUT,,current_value,13,4,15,6,);
B(B_CONTACT,,set,3,4,5,6,);
B(B_CONTACT,,clock,3,2,5,4,);
B(B_COIL,,signal_output,20,3,22,5,);
L(7,4,8,4);
L(1,5,3,5);
L(5,5,8,5);
L(1,3,3,3);
L(5,3,7,3);
L(7,3,7,4);
L(13,4,20,4);
L(1,0,1,7);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

STボディ

IF set THEN      (* first cycle *)
    load:=TRUE;        (* load has to be TRUE,
                        to set current_value to output_value *)
    clock:=FALSE;
END_IF;
copy_name(CD:= clock, LOAD:= set, PV:= output_value, Q=> signal_output, CV=> current_value);
load:=FALSE;    (* now current_value got the right value, load doesn't need to be *)
                (* TRUE any longer *);

ILボディ

インストラクションリストエディタ(IL)内でファンクションブロックを呼び出す場合は、以下のように記述してください:

最終修正日: 2021-05-19このページに関するフィードバックお問い合わせ窓口