I/O Adresini Değiştirdim, 3 Ay Sonra Fark Ettim
Samsun'da bir S7-1200'ün I/O adresini değiştirdim, 3 ay sonra fark ettim. %I0.0 ile %I0.1 yer değiştirmiş, program 'çalışıyor' görünüyor ama acil durdur butonu artık %I0.1'de. 3 ay boyunca acil durdur, start butonu olarak çalışıyordu.

Perşembe, 13:20. Samsun, bir ambalaj makinesi. S7-1200 CPU 1211C, entegre I/O.
Operatör: “Acil durdur butonuna bastım, makine durmadı. Start butonuna bastım, makine durdu.”
3 Ay Önce Ne Olmuştu?
3 ay önce, makineye bir “otomatik start” özelliği eklemiştim. %I0.0 (start butonu) ile %I0.1 (acil durdur) arasındaki kablolamayı değiştirmiştim. Neden: %I0.0, CPU’nun entegre I/O’sunda “öncelikli” bir giriş. Otomatik start, %I0.0’dan tetiklenmeliydi.
Kablolamayı değiştirdim: start butonu → %I0.1, acil durdur → %I0.0.
Ama programı güncellemedim. Programda hâlâ:
%I0.0= start%I0.1= acil durdur
Yani fiziksel olarak:
- Start butonu → %I0.1 → program “acil durdur” sanıyor
- Acil durdur → %I0.0 → program “start” sanıyor
3 ay boyunca, operatör start butonuna bastığında, program “acil durdur” sinyali alıyor, makineyi durduruyor. Operatör acil durdura bastığında, program “start” sinyali alıyor, makineyi başlatıyor.
Neden 3 Ay Fark Edilmedi?
Makine, manuel modda çalışıyordu. Operatör, her parça için start butonuna basıyordu. Start butonuna bastığında, makine duruyordu. Operatör, “hata, tekrar basayım” diyordu. Tekrar bastığında, makine başlıyordu.
Operatör, butonun “çift işlevli” olduğunu fark etmemişti. Çünkü:
- Makine, her seferinde durup başlıyordu. Operatör, “buton hassas” sanıyordu.
- Acil durdur butonu, 3 ay boyunca hiç basılmamıştı. Acil bir durum olmamıştı.
- Program, “çalışıyor” görünüyordu. Alarm yok, hata yok. CPU, %I0.0 ve %I0.1’i okuyordu, sadece anlamı yanlış.
I/O Adresi Değiştirirken 3 Adım
1. Kablolamayı değiştir. Fiziksel bağlantıyı yap.
2. Programı güncelle.
Tag tablosunda, %I0.0 ve %I0.1’in isimlerini değiştir. %I0.0_Start → %I0.0_AcilDurdur, %I0.1_AcilDurdur → %I0.1_Start.
3. Test et. Her butonu tek tek bas, beklenen davranışı doğrula. Start → makine başlar. Acil durdur → makine durur.
Ben 1’i yapmıştım, 2’yi ve 3’ü yapmamıştım.
“Çalışıyor” Görünmek ile “Doğru Çalışmak” Arasındaki Fark
PLC, %I0.0’ı okuyor, HIGH. Program, “start” diyor, makineyi başlatıyor. PLC’nin gözünde her şey doğru. Ama fiziksel gerçeklik farklı: %I0.0’a bağlı buton, acil durdur.
PLC, fiziksel gerçekliği bilmez. Sadece tag adlarına güvenir. Tag adı %I0.0_Start ise, PLC %I0.0’ı “start” olarak yorumlar. Ama %I0.0’a acil durdur bağlıysa, PLC “start” diye yorumlar, makineyi başlatır.
Bu, bir semantik hata. Sözdizimi doğru, mantık doğru, ama anlam yanlış.
Bir Daha Olmasın
I/O adresi değiştirdiğimde, tag tablosunu aynı gün güncelliyorum. “Sonra yaparım” demiyorum. “Sonra” = 3 ay.
Ayrıca, acil durdur butonunu ayrı bir güvenlik devresi ile koruyorum. Acil durdur, PLC’ye gitmeden önce, bir güvenlik rölesi üzerinden motorun beslemesini kesiyor. PLC, acil durdur sinyalini alsa bile, güvenlik rölesi zaten motoru durdurmuş.
Bu, “PLC yanlış yorumlarsa ne olur?” sorusunun cevabı: güvenlik rölesi, PLC’den bağımsız, motoru durdurur. PLC’nin semantik hatası, güvenlik devresini etkilemez.
Tag Adı = Sözleşme
Tag adı, PLC ile fiziksel dünya arasındaki sözleşme. %I0.0_Start demek, “%I0.0’a start butonu bağlı” demek. Bu sözleşmeyi bozarsan, PLC sözünü tutar, ama fiziksel dünya sözünü tutmaz.
Sözleşmeyi bozma. Kablolamayı değiştirirsen, tag adını da değiştir. Aynı gün. Aynı oturum. Aynı test.