オンディレイタイマ
ファンクションブロックTONで、オンディレイタイマをプログラムすることができます。
入力
タイマオン入力
INで立ち上がりが検出される度に、内部タイマがスタートします。
スイッチオンディレイの設定時間(PT = preset time)
16ビット値: 0~327.27s
32ビット値: 0~21,474,836.47s (32ビット値は、FP3、FPC、FP5、FP10/10Sでは使用できません。)
単位は10ms
出力
信号出力
PT値がET値と等しくなると、出力QはON (TRUE)になります。
経過時間
タイマの経過時間の現在値を表わします。
プログラミングエディタから値を書き込むことにより、カウント動作中に値を変更することができます。
QはPTで設定した時間分、遅れてONになります。リセットにはディレイはありません。
入力INがオンディレイタイムPTの持続時間以下(t3 - t2 < PT)の時間だけしかONしなければ、出力QはONになりません。
POUヘッダには、このプログラムで使用するすべての入力変数と出力変数を宣言します。 POUヘッダは全プログラム言語で使用できます。
VAR
copy_name: TON;
start: BOOL:=FALSE;
set_value: TIME:=T#0s;
signal_output: BOOL:=FALSE;
current_value: TIME:=T#0s;
END_VAR
startがON (TRUE)になると、入力信号は設定時間set_value分のタイムディレイでsignal_outputに転送されます。
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_CONTACT,,start,3,2,5,4,);
B(B_VARIN,,set_value,7,3,9,5,);
B(B_VAROUT,,current_value,14,3,16,5,);
B(B_COIL,,signal_output,21,2,23,4,);
B(B_FB,TON!,copy_name,9,1,14,5,,?BIN?BPT?AQ?AET);
L(1,3,3,3);
L(1,0,1,6);
L(5,3,9,3);
L(14,3,21,3);
END_NETWORK_BODY
END_NET_WORK
END_BODY
copy_name( IN:= start ,
PT:= set_value ,
Q=> signal_output ,
ET=> current_value );
インストラクションリスト内でファンクションブロックを呼び出す場合は、以下のように記述してください:
POUヘッダには、このプログラムで使用するすべての入力変数と出力変数を宣言します。 POUヘッダは全プログラム言語で使用できます。
VAR
TOF1: TOF;
tPT: TIME:=T#10s;
tET: TIME:=T#0s;
bIN: BOOL:=FALSE;
bQ: BOOL:=FALSE;
bEmergencyStop: BOOL:=FALSE;
END_VAR
bINで立ち下がりエッジが検出されると、タイマがカウントを開始し、QがTRUEにセットされます。タイマ値が経過する前にbEmergencyStopがTRUEにセットされると、カウントが停止し、出力Qが直ちにリセットされます。タイマは、プリセットされた時間(PT) (この例では10秒)で初期化されます。
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 4 ;
NETWORK_BODY
B(B_F,E_MOVE!,,16,0,22,4,,?DEN?D?AENO?C);
B(B_VARIN,,tPT,14,2,16,4,);
B(B_VAROUT,,TOF1.ET,22,2,24,4,);
B(B_CONTACT,,bIN,11,1,13,3,N);
B(B_CONTACT,,bEmergencyStop,6,1,8,3,);
L(1,2,6,2);
L(13,2,16,2);
L(8,2,11,2);
L(1,0,1,4);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_FB,TOF!,TOF1,16,1,21,5,,?BIN?BPT?AQ?AET);
B(B_VARIN,,tPT,14,3,16,5,);
B(B_VAROUT,,tET,21,3,23,5,);
B(B_CONTACT,,bIN,6,2,8,4,);
B(B_COIL,,bQ,34,2,36,4,);
B(B_CONTACT,,bEmergencyStop,27,2,29,4,N);
L(21,3,27,3);
L(29,3,34,3);
L(8,3,16,3);
L(1,3,6,3);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
END_BODY
if (bEmergencyStop AND NOT bIN) then
TOF1.ET:=tPT;
end_if;
TOF1(IN := bIN, PT := tPT, ET => tET);
bQ := NOT bEmergencyStop AND TOF1.Q;