ダウンカウンタ
CT_FBファンクションブロックで使用できるカウンタは、ダウンカウンタです。カウンタ設定値エリアSVの範囲は、1~32,767です。
入力
カウント接点(ダウンカウンタ)
Count入力の立ち上がりが検出される毎に、経過値EVから値が"0"になるまで"1"ずつ減算します。
リセット接点
Reset入力の立ち上がり検出毎に、"0"がEVに割り当てられ、信号出力Cがリセットされます。Reset入力での立ち下がり検出毎に、SVの値がEVに割り付けられます。
設定値
リセット後のEVの値
出力
信号出力
EVが"0"になるとセットされます。
経過値
現在のカウンタ値
プログラミングエディタから値を書き込むことにより、カウント動作中に値を変更することができます。
正確に動作させるため、CT_FBファンクションブロックは、使用前に毎回リセットしてください。
使用可能なカウンタ数には制限があり、システムレジスタ5、6の設定により変化します。コンパイラは、すべてのカウンタインスタンスにNUM*アドレスを割り当てます。アドレスは、割り付けできる最大アドレスから順に割り付けられます。
基本ファンクションCT (ダウンカウンタ)が同じNUM*アドレスエリア(Num入力)を使用します。エラー(アドレス衝突)を避けるため、ひとつのプロジェクトでCTファンクションとCT_FBファンクションブロックを同時に使用しないでください。
タイムチャート
POUヘッダには、このプログラムで使用するすべての入力変数と出力変数を宣言します。 POUヘッダは全プログラム言語で使用できます。
VAR
copy_name: CT_FB;
set_value: INT:=10;
signal_output: BOOL:=FALSE;
count_contact: BOOL:=FALSE;
Reset_CT: BOOL:=FALSE;
machine_error: BOOL:=FALSE;
number_error: INT:=0;
END_VAR
この例では、変数を使用しています。入力変数に定数を使用することもできます。カウント入力count_contactの立ち上がり検出毎に、経過値EVから"1"が減算されます。経過値EVが"0"になると、Signal_outputがTRUEにセットされます。
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 6 ;
NETWORK_BODY
B(B_FB,CT_FB!,copy_name,9,1,15,6,,?BCount?BReset?BSV?AC?AEV);
B(B_VARIN,,count_contact,7,2,9,4,);
B(B_VARIN,,Reset_CT,7,3,9,5,);
B(B_VARIN,,set_value,7,4,9,6,);
B(B_VAROUT,,signal_output,15,2,17,4,);
L(1,0,1,6);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 6 ;
NETWORK_BODY
B(B_F,E_MOVE!,Instance,10,1,16,5,,?DEN?D?AENO?C);
B(B_VARIN,,copy_name.EV,8,3,10,5,);
B(B_VAROUT,,number_error,16,3,18,5,);
B(B_CONTACT,,machine_error,4,2,6,4,);
L(1,3,4,3);
L(6,3,10,3);
L(1,0,1,6);
END_NETWORK_BODY
END_NET_WORK
END_BODY
インストラクションリスト内でファンクションブロックを呼び出す場合は、以下のように記述してください: