Zamanlayıcıya Start Verdim, Reset'i Unuttum, Bir Daha Hiç Kapanmadı
Bir zamanlayıcıya start verdim ama reset girişini unutunca, bir kez tetiklenip sonsuza kadar ON kaldı. IEC zamanlayıcının neden 'doğru seviyede donduğunu,' reset'in neden ayrı bir giriş olduğunu ve 'start'ın seviye, 'reset'in olay' kuralını kendi vaka üzerinden anlatıyorum.

Salı, akşam vardiyasında. Bir “bekle” zamanlayıcısı, makineyi durduruyordu. Ama durdurma sebebinin geçtiği hâlâ duruyordu. Operatör “abi bekleme bitti, makine neden duruyor” dedi. Bitti — zamanlayıcının süresi dolmuştu, sayaç 0’a gelmişti. Ama zamanlayıcı, ON kalıyordu. Ben de o akşam, zamanlayıcıya start verip reset unuttuğum için, onun bir kez tetiklenip donduğunu öğrendim.
IEC Zamanlayıcı, “Doğru Seviyede” Donar
Zamanlayıcım bir IEC TP (süre zamanlayıcısı) idi. Girişleri: IN (start), PT (süre), R (reset). Çıkışı: Q. Mantığı şöyle: IN ON olduğu sürece, Q de ON kalır, süre dolduğu anda… bekleyin, TP’de süre dolunca Q OFF olur. Ama ben TP değil, TON kullanmıştım: IN ON olalı PT kadar süre geçince Q ON olur ve IN ON kaldığı sürece ON kalmaya devam eder.
Sorun tam da buradaydı. IN’i, “bekleme olayı”na bağlamıştım. Olay gelince IN ON oldu, süre doldu, Q ON oldu. Ama olay bittiğinde IN OFF olmadı — çünkü IN’i bir seviyeye, bir olayın başlangıcına bağlamıştım, bitişine değil. IN ON kaldı, Q ON kaldı, makine durdu. Süre “doldu” ama TON’un “doldu” kavramı, IN OFF olana kadar Q’yu geri çekmez.
Reset, Ayrı Bir Giriştir; Start’ı Tersine Çevirmek Değil
Benim kafamdaki hata: “start’ı kapatınca zamanlayıcı sıfırlanır” sanıyordum. Değil. R (reset) ayrı bir giriştir ve R ON olduktan sonra, IN OFF olsa bile, Q ve sayaç sıfırlanır. R’yi hiç kullanmadım. O yüzden IN ON kaldığı sürece, zamanlayıcı “dolu” kaldı.
Düzeltme iki yollu:
Birincisi, IN’i bir seviye değil, bir olay olarak kullansaydım. Bekleme olayının başlangıcında IN bir anlık ON, bitişinde OFF olmalıydı. Bunu bir kenar tetikleme (edge) ile yapardım. Ama en temiz yol aslında reset’ti:
// IN: bekleme olayı devam ettiği sürece ON
#bekle_IN := #bekleme_olay_i;
// R: olay bittiği anda, bir anlık ON
#bekle_R_FTRIG(CLK := not #bekleme_olay_i);
#bekle_R := #bekle_R_FTRIG.Q;
#TP_BEKLE(IN := #bekle_IN, PT := T#2s, R := #bekle_R,
Q => #makine_dur, ET => #bekle_sure);
Olay bittiği anda, R bir anlık ON olur, zamanlayıcı sıfırlanır, Q OFF, makine çalışır. Start seviyede kalsa bile, reset onu geri çeker.
Kural: Start Seviye, Reset Olay
Artık kuralım şu: bir zamanlayıcı (ya da bir latch) kullanıyorsan, start’ın ne zaman ON kaldığını ve reset’in ne zaman tetikleneceğini ayrı ayrı düşün. Start’ı bir seviyeye bağladıysan, o seviye kaç saat ON kalırsa zamanlayıcı o kadar dolu kalır. Reset’i unutursan, “tek seferlik” bir olay, “kalıcı” bir duruma dönüşür.
Bir de ek: her IN’in karşısına bir R koy. “Bu zamanlayıcı ne zaman sıfırlanır?” sorusunun cevabı, bir satırda durmalı. Cevap “hiç” ise, zamanlayıcın bir gün donar. O gün, benim salı akşamımdı.
O akşam, o “neden duruyor,” bir R girişiyle gitti. Operatör “abi bekleme bitince artık kalkıyor” dedi. Ben de o an anladım ki, start verip reset unutmak, bir musluğu açıp kapatmayı unutmak gibidir: su, akması gerekenden çok sonra bile akar.
Bir sonraki yazıda, “R_TRIG sandım, F_TRIG yazdım” diye anlatıyorum. Yükselen kenar ile alçalan kenar tetiklemenin neden “tam tersi” anı yakaladığını, ve bir alarmı tetikleyen kenarı ters seçmenin neden alarmı asla yakamadığını.