CTUD

アップダウンカウンタ

ファンクションブロックCTUD (count up/down)で、カウンタ命令をプログラムできます。

  • カウントアップ(CUTRUEにセット)

    0から最大値32767に達するまでカウントアップされます。カウントアップCUで立ち上がりエッジが検出されるたびに、現在値CVに1が加算されます。

  • カウントダウン(CDTRUEにセット)

    0から最小値-32768に達するまでカウントダウンされます。カウントダウンCDで立ち上がりエッジが検出されるたびに、現在値CVから値1が減算されます。

パラメータ

入力

CU (BOOL)

カウントアップ入力

入力CUで立ち上がりエッジが検出されるたびに、現在値CVに値"1"が加算されます。ただし、RまたはLD、あるいはその両方がONの場合を除きます。

CD (BOOL)

カウントダウン入力

入力CDで立ち上がりエッジが検出されるたびに、現在値CVから値"1"が減算されます。ただし、RまたはLD、あるいはその両方がONの場合を除きます。

CUCDが同時にTRUEにセットされた場合、カウントは行われません。

R (BOOL)

リセット入力

R信号の立ち上がりエッジで、現在値CVは"0"にリセットされ、カウントが停止します。 QU/QDの出力がFALSEにセットされます。

次のR信号の立ち下がりエッジでカウントが再開します。

LD (BOOL)

ロード

LDがONになると、現在値CVには設定値PVがロードされ、QUTRUEにセットされます。ただし、Rが同時にONになっている場合を除きます。この場合、LDは無視されます。

PV (INT)

設定値

加算または減算により定義される設定値です。

設定値が設定されていない、または設定値が0の場合、QUの出力は、カウント開始直後にTRUEにセットされます。

出力

QU (BOOL)

信号出力 - カウントアップ

現在値CVが設定値PV以上になると、TRUEにセットされます

Rで立ち上がりエッジが検出されると、FALSEにセットされます。

QD (BOOL)

信号出力 - カウントダウン

CV値が"0"になると、TRUEにセットされます。

Rで立ち上がりエッジが検出されると、FALSEにセットされます。

CV (INT)

現在値

  • 加算/減算結果

  • カウントアップ:

    現在値CVが設定値PVに達すると、出力QUTRUEにセットされますが、カウントは最大値32767に達するまで継続されます。

  • カウントダウン:

    現在値CVが0になると、出力QDTRUEにセットされますが、カウントは最小値-32768に達するまで継続されます。

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

タイムチャート

POUヘッダ

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

	VAR
		CTUD1: CTUD;
		bCountUp: BOOL:=FALSE;
			(*increments CV if TRUE*)
		bCountDown: BOOL:=FALSE;
			(*decrements CV if TRUE*)
		bReset: BOOL:=FALSE;
			(*sets CV to zero if TRUE*)
		bLoad: BOOL:=FALSE;
			(*sets CV to PV if TRUE*)
		iPresetValue: INT:=3;
			(*if CV reaches this value,
output QU is set*)
		bUpCounting_PV_reached: BOOL:=FALSE;
			(*is set, if CV reaches PV*)
		bDownCounting_zero_reached: BOOL:=FALSE;
			(*is set, if CV reaches zero*)
		iCurrentValue: INT:=0;
			(*contains the current value*)
	END_VAR

POUボディ

カウントアップ:

bResetがONになると、iCurrentValue (CV)は0にリセットされます。bCountUpがONになると、iCurrentValueに値"1"が加算されます。立ち上がりエッジは、bCountUpで検出され、iCurrentValueiPresetValue以上になるまでこの処理を繰り返します。設定値に達すると、bUpCounting_PV_reachedがONになります。bResetまたはbLoadの一方あるいはその両方がON状態の場合、この処理は実行されません。

カウントダウン:

bResetがON (TRUE)になると、iPresetValue (PV = 設定値)がiCurrentValueに読み込まれます。bCountDownがONになると、iPresetValueから値"1"が減算されます。この処理は、iCurrentValueが"0"以下になるまで立ち上がりエッジが検出されるたびに繰り返されます。"0"に達すると、bDownCounting_zero_reachedTRUEにセットされます。bResetまたはbLoadの一方あるいはその両方がON状態の場合、この処理は実行されません。CUCDが同時にセットされた場合、カウントは行われません。

LDボディ

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 14 ;
        NETWORK_BODY
B(B_CONTACT,,bCountUp,5,3,7,5,);
B(B_CONTACT,,bCountDown,5,5,7,7,);
B(B_FB,CTUD!,CTUD1,12,4,18,11,,?BCU?BCD?BR?BLD?BPV?AQU?AQD?ACV);
B(B_COIL,,bUpCounting_PV_reached,25,5,27,7,);
B(B_CONTACT,,bReset,5,7,7,9,);
B(B_COIL,,bDownCounting_zero_reached,25,8,27,10,);
B(B_CONTACT,,bLoad,5,9,7,11,);
B(B_VAROUT,,iCurrentValue,20,10,22,12,);
B(B_VARIN,,iPresetValue,7,11,9,13,);
L(1,0,1,14);
L(1,4,5,4);
L(7,4,10,4);
L(10,4,10,6);
L(1,6,5,6);
L(7,6,9,6);
L(10,6,12,6);
L(18,6,25,6);
L(9,6,9,7);
L(9,7,12,7);
L(18,7,20,7);
L(20,7,20,9);
L(1,8,5,8);
L(7,8,12,8);
L(18,8,19,8);
L(19,8,19,11);
L(9,9,12,9);
L(20,9,25,9);
L(9,9,9,10);
L(1,10,5,10);
L(7,10,9,10);
L(10,10,12,10);
L(10,10,10,12);
L(19,11,20,11);
L(9,12,10,12);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

STボディ

CTUD1(CU := bCountUp, CD := bCountDown, R := bReset, LD := bLoad, 
	  PV := iPresetValue, QU => bUpCounting_PV_reached,
	  QD => bDownCounting_zero_reached, CV => iCurrentValue);

ILボディ

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