Tüm yazılar
Programlama İpucu

Sensör Koptu mu, Değer Gerçekten Sıfır mı? 0 Gösteren Bir Seviye Göstergesi

Bir seviye göstergesi 0 gösterdiğinde, boş tank ile kablo kopukluğunu nasıl ayırt ettim: '0'ın iki yüzü, 4 mA ile 0 mA farkı, ve 'son iyi değer 5 saniyedir değişmediyse alarm' kuralını kendi vaka üzerinden anlatıyorum.

Sensör Koptu mu, Değer Gerçekten Sıfır mı? 0 Gösteren Bir Seviye Göstergesi

Pazartesi sabahı, altıda. Tank seviye göstergesi 0 gösteriyordu. Operatör “abi tank boş, doluyor” dedi. Ben de “0’a bakınca tank boş galiba” dedim. O “abi 0 ama kablo kopmuş, sensör cevap vermiyor” dedi. Ben de o an anladım ki, “0”ın iki yüzü vardı. Bir tanesi “gerçekten sıfır”, diğeri “ölçüm yok.” Ama program, ikisini aynı sayı olarak görüyordu. Ve ben, iki saati, o iki sayıyı ayırt etmek için harcadım.

4-20 mA’de 0 mA ile 4 mA

Seviye göstergesi 4-20 mA veriyordu. 4 mA, “ölçüm aralığının en alt ucu” demekti. 20 mA, “en üst ucu.” 0 mA ise, “kablo kopuk, sensör ölü, besleme gitti” demekti. Standart böyleydi, ama ben programda 0-20 mA aralığını “0-100 %” olarak ölçeklemiştim. Yani 0 mA gelen değer, “0 %” olarak görülmüştü. Hâlbuki 0 ile 4 arasında bir fark vardı: 0 “ölçüm yok,” 4 “ölçüm var, en altta.”

Peki, sahada bu fark neden önemli? Çünkü “0”ı gördüğümde, iki farklı durumdan biriydi: ya tank gerçekten boştu (4 mA, “0 %”), ya da kablo kopmuştu (0 mA, “ölçüm yok”). Birincisinde makineyi durdurmazsın, dolmayı beklersin. İkincisinde durdurursun, çünkü seviyeyi bilmiyorsun. Ama benim programım, ikisini aynı “0” olarak görüp “tank boş, çalış” demişti.

Bir Kablo Kopması, İki Saat

O sabah, kablo kopuşu olmuştu. Sensör 0 mA veriyordu, ben 0 görüp “tank boş” demiştim. Ama tank boş değildi, tank doluyordu. Makine, seviyeyi bilmeden çalışmaya devam etti. 47 dakika sonra, tank taşmaya başladı. Operatör “abi taşacak!” dedi. Ben de o an anladım ki, 0 ile 4 arasındaki fark, 47 dakikalık bir taşmayı önleyebilirdi.

Programı açtım. Ölçekleme bloğuna baktım. 0-20 aralığı, 0-100 %’e eşlenmişti. 0 ile 4 arası “ölçüm yok” bölgesi olarak işaretlenmemişti. İki saat sonra, bir “güvenlik” bloğu ekledim:

if (s_ma < 3.8)  seviye_olcumu_yok := true;
if (seviye_olcumu_yok)     alarm_olcumu_yok := true;

3.8 mA, “4 mA’nın biraz altı” — gürültü payı. 3.8’in altında, “ölçüm yok” diyorum. Ve bir de “son iyi değer” sayacı ekledim: “değer 5 saniyedir değişmiyorsa, değişmemiş değil, takılmış olabilir” diye bir uyarı.

Kural: 0’ı İkiye Böl

Artık kuralım şu: her 4-20 mA girişinde, 0 ile 4 arası “ölçüm yok” bölgesi olarak işaretlenir. 3.8 mA eşiği, gürültü payıdır. Bu bölgeye girildiğinde, “son iyi değer” dondurulur, değişiklik beklenmez, alarm verilir.

Bir de ek: “0 gösterdi” alarmı, “0.00 gösterdi” alarmından farklı olmalı. “0.00” = değer sıfır, ama ölçüm var. “0 gösterdi” = ölçüm yok. İsimlendirme, iki “0”ı ayırt etmeli.

Dünkü operatör hâlâ hatırlıyor: “abi artık 0’a baktığımda iki şey soruyorum — gerçekten 0 mı, yoksa kablo mı?” O soruyu sorması, benim programa koyduğum seviye_olcumu_yok bayrağı sayesinde.

Bu seride bir sonraki yazıda, “aynı formülü 12 kez yazmak” diye anlatıyorum. Bir tank için yazdığım bir hesaplama bloğunu, 12 tanka kopyala-yapıştır yapınca, 12’nci tankın farkı bulduğun gün.