Kanca
Aynı program iki farklı hücrede çalışıyor. Birinde robot tezgaha sorunsuz uzanıyor, diğerinde henüz kapanmamış bir tutucuya çarpıyor. Kod iki hücrede de satır satır aynı; değişen tek şey, iki sinyalin birbirine göre kaç milisaniye kaydığı.
Bağlantı yalnız bu sahnenin durumunu taşır; hesap veya ad içermez.
Ne oldu
Kural şudur: "Başla" ancak "Hazırım" görüldükten sonra geçerlidir. Başla anında Hazırım kapalıysa iki kontrolör aynı işlem aşamasında değildir.
Sonucun iki işlemin göreli zamanına bağlı olmasına yarış durumu (race condition) denir. Robot erken hazır olduğunda çalışan, gecikince bozulan akış doğru sıra kurmamış; uygun zamanlamaya rastlamıştır. Çözüm sinyali hızlandırmak değildir. Alıcı önceki durumu doğrulamadan ilerlememeli; sinyal hiç gelmezse de tanımlı hata veya zaman aşımı yolu kullanmalıdır.
Gerçek dünyada
Zamanlama hatalarının ne kadar ciddi sonuçlar doğurabileceğine dair en çok anılan mühendislik vakalarından biri Therac-25 radyasyon tedavi cihazıdır. Leveson ve Turner'ın 1993 tarihli incelemesi, cihazın kazalarında rol oynayan birden fazla ayrı yazılım hatası tespit ediyor. Bunlardan biri bir yarış durumuydu: operatör ekrana çok hızlı veri girdiğinde iki farklı işlem modu beklenmedik sırada üst üste biniyor ve hasta aşırı radyasyon dozu alıyordu. Kazaların tamamı tek bir hataya bağlı değil — ama bu hatanın kendisi, yalnızca bir sıralama sorunundan doğan ölümcül bir arızaydı. Bu, robot-PLC el sıkışmasıyla birebir aynı senaryo değil, ama aynı ilkeyi gösteriyor: bir kontrol sisteminde "hangi sinyal önce geldi" sorusunun cevabı kozmetik bir detay değil, güvenliğin kendisidir.
Bir robot hücresinde aynı ilke somut olarak şöyle işler: robot, işini
bitirdiğinde RAPID tarafında SetDO doHazirim, 1; ile bir çıkış açar.
PLC kendi programında bu sinyali okumadan "başla" çıkışını açarsa, robot
henüz tamamlamadığı bir işin ortasında yeni bir komutla karşılaşabilir.
(SetDO/WaitDI robot kontrolörünün dili olan RAPID'e aittir; PLC bu
talimatları çalıştırmaz, yalnızca sinyal hattını okur.)
Dene
"PLC: Başla"yı 2. adımda aç. "Robot: Hazırım"ı ise hiç açma (ya da 6. adım gibi çok geç bir adımda aç). Oynat'a bas ve okuma başının "Başla" karesinden geçtiği anda "Hazırım"ın henüz açılmamış olduğunu gözlemle. Sonra Sıfırla'ya bas, bu kez doğru sırayla kur: "Robot: Hazırım" 2. adımda, "PLC: Başla" 4. adımda.
Sonraki
Bu hattın üniversite seviyesi, aynı el sıkışma mantığının TCP/IP soket haberleşmesinde ve EtherCAT/PROFINET gibi endüstriyel protokollerde döngü süresi (cycle time) ve jitter gibi kavramlarla nasıl genişlediğini ele alacak.