BACnet MS/TP üzerinden bir noktaya yazma yaptığınızda cihaz size WriteProperty Acknowledged! cevabı dönerse ne anlama gelir? Mantıksal olarak "yazım kabul edildi". Ama saha gerçeği şu: cihaz ACK göndermiş olabilir ve aynı anda yazımı uygulamamış olabilir. Bu BACnet uyumsuz cihaz davranışıdır ve sektörde yaygındır.
Bu yazıda BACnet commandable obje yapısını, priority array mekanizmasını ve "silent reject" durumunda doğru teşhisi nasıl yapacağınızı anlatıyoruz.
Commandable obje nedir?
BACnet'te bir "commandable" obje (AO, AV, BO, BV, MSV — Analog/Binary/MultiState Output veya Value), Present-Value'ya doğrudan yazılmaz. Bunun yerine Priority Array adlı 16 elemanlı bir dizi vardır:
- Priority 1 = en yüksek öncelik (Manual Life Safety)
- Priority 8 = Manual Operator (en yaygın "kullanıcı override" katmanı)
- Priority 16 = Default (en zayıf, otomatik sistemler)
Her yazım belirli bir priority slotuna düşer. Present-Value en yüksek öncelikli NULL olmayan slotun değerini yansıtır.
Örnek senaryo
BMS sistemi Priority 8'e (Manual Operator) 23.5°C yazıyor. Sonra siz Priority 16'ya (Default) 25.0°C yazmak istiyorsunuz. Yazım başarılı kabul edilir, slot dolar, ama Present-Value hâlâ 23.5°C — çünkü P8 daha yüksek öncelikli ve aktif.
Silent reject nedir?
BACnet standart der ki: bir yazım kabul edildiyse, slot mutlaka güncellenmeli. Ama bazı üreticiler (özellikle Honeywell, bazı eski Siemens) şu yola gider:
- WriteProperty alır
- SimpleACK gönderir (yazım onaylandı sanılır)
- İçten yazımı uygulamaz — sanki hiçbir şey olmamış gibi
Bu, ya bir güvenlik özelliği (sadece "trusted source"lara yazım izni) ya da computed (hesaplanmış) bir objenin yazıma kapalı olmasıdır. BACnet standart açısından kabul edilebilir değil; vendor sahada bu davranışı dokümante etmez.
Saha teşhis adımları
1. Present-Value'yu read-back yap
Yazım sonrası hemen Present-Value'yu okuyun. Eğer yazdığınız değere eşit değilse:
- Yazım başka bir slot'a girmiş ama düşük öncelikli — Priority Array'i kontrol et
- Yazım hiç uygulanmamış — silent reject ihtimali
2. Priority Array'i oku
Cihazda priority-array property'sini okuyun. 16 element olur. Yazdığınız slot dolu mu? Daha yüksek öncelikli başka slot dolu mu?
| Slot | Anlam | Aktif? |
|---|---|---|
| P1 | Manual Life Safety | Çoğunlukla boş |
| P3 | Critical Equipment | Yaygın — BMS karar mekanizması |
| P5 | Minimum On/Off | HVAC scheduling |
| P8 | Manual Operator | İnsan müdahalesi |
| P16 | Default (Relinquish Default'a düşer) | Otomatik kontrol |
3. Out-of-Service ve Reliability oku
Eğer out-of-service = TRUE ise cihazın yazımları kabul etmesi protokole özel olabilir. reliability = no-fault-detected dışında bir değer ise cihaz objeyi "arızalı" görüyor demektir.
4. Property-list ile yazılabilir property'leri bul
Modern BACnet cihazlarda property-list okunabilir. Burada Present-Value görünmüyorsa o obje yazıma kapalı demektir.
5. Farklı priority'lerde test et
Aynı objeye Priority 1, 5, 8, 16 ile sırayla yazın ve her birinde priority array'i okuyun. Eğer hiçbiri Priority Array'i güncellemiyorsa silent reject kesin.
Silent reject ile karşılaşırsanız
Üç pratik çözüm:
- BACnet/IP üzerinden deneyin. Bazı cihazlar BACnet/IP arayüzünden yazımları kabul ederken MS/TP direct erişimde reddeder. Bu vendor güvenlik filtresine örnektir.
- Out-of-Service = TRUE yapın, sonra Present-Value yazın, sonra Out-of-Service = FALSE. Bazı cihazlar bunu zorunlu tutar.
- Üretici dokümanını isteyin. "Bu cihazda hangi obje yazılabilir?" sorusuna teknik destek dokümandan referans verir. Eğer "yalnızca BACnet/IP üzerinden, yalnızca BMS gateway'den" diyorsa standart bir sınırlama vardır.
BACnet sahanızda yazım sorunu yaşıyorsanız, cihazın marka/modelini ve test ettiğiniz objeyi paylaşın — bilinen vendor davranışlarına göre teşhis yapabiliriz.
Türkçe
English