PLC Verileri için ASCII: Ondalık, Onaltılık ve Kontrol Kodları
ASCII karakterlerinin, ondalık değerlerin, onaltılık baytların ve kontrol kodlarının PLC dizelerinde ve seri iletilerde nasıl göründüğünü, çerçeveleme ve biçimlendirme hatalarını teşhis etmek için ...
ASCII, birçok endüstriyel cihaz metinleri her seferinde bir bayt olacak şekilde değiştirdiği için PLC projelerinde hâlâ yaygın olarak kullanılır. Barkod okuyucular, etiket yazıcıları, teraziler, sürücüler, seri ağ geçitleri ve operatör terminalleri komutları ve ölçümleri çoğu zaman karakter kodları olarak temsil eder. Karakterler, ondalık değerler ve onaltılık baytlar arasında dönüşüm yapabilen mühendisler bu bağlantılardaki sorunları daha hızlı giderir.
ASCII neyi tanımlar
Özgün Amerikan Bilgi Değişim Standart Kodu, yedi bitlik bir karakter kümesidir. 0 ile 127 arasında numaralandırılmış 128 değer tanımlar. 0 ile 31 arasındaki değerler ve 127, denetim karakterleridir. 32 ile 126 arasındaki değerler; harfler, rakamlar, noktalama işaretleri ve boşluk dâhil yazdırılabilir karakterlerdir.
IETF tarafından barındırılan RFC 20 belirtimi, kod konumlarını ve bunların amaçlanan anlamlarını belgeler. Modern sistemler genellikle bir ASCII karakterini sekiz bitlik bir baytta depolar. Standart ASCII için en yüksek bit sıfır olarak kalır.
Ondalık, onaltılık ve ikilik aynı bayttır
Bir PLC etiketi aynı değeri çeşitli sayı biçimlerinde görüntüleyebilir. Büyük A harfi ondalık 65, onaltılık 41 ve ikilik 01000001 değerindedir. 0 rakamı ondalık 48 veya onaltılık 30 değerindedir. Bunlar farklı karakterler değildir. Aynı sayısal örüntünün farklı gösterimleridir.
Bir bayt iki onaltılık basamağa sığdığı için devreye alma sırasında onaltılık gösterim kullanışlıdır. Paket yakalamaları, seri monitörler ve cihaz kılavuzları da bayt değerlerini genellikle onaltılık biçimde gösterir. PLC komutları tamsayı sabitleri beklediğinde ondalık gösterim çoğu zaman daha kolaydır.
Denetim kodları endüstriyel mesajlarda önemlidir
Birçok seri protokol, sınırlayıcı olarak denetim karakterlerini kullanır. Satır başı, ondalık 13 veya onaltılık 0D'dir. Satır besleme, ondalık 10 veya onaltılık 0A'dır. Metin başlangıcı onaltılık 02, metin sonu ise onaltılık 03'tür. Gerekli sonlandırıcısı eksikse cihaz geçerli bir komutu yok sayabilir.
Her cihazın CR/LF kullandığını varsaymayın. Bazıları yalnızca CR gerektirir. Diğerleri yazdırılabilir bir sınırlayıcı, sabit mesaj uzunluğu veya sağlama toplamı baytı kullanır. Üreticinin protokol kılavuzundaki tam çerçeveyi doğrulayın.
PLC dizeleri bayt dizilerine nasıl dönüşür
PLC platformları dizeleri farklı şekillerde depolar. Bazıları geçerli uzunluğu karakter verilerinden önce yerleştirir. Diğerleri sabit bir dizi ayırır ve metni sıfır baytla sonlandırır. Veriler bir protokol sınırından geçtiğinde alıcı cihaz, denetleyicinin dahili dize türü yerine baytları görür.
Hem bildirilen dize uzunluğunu hem de temel arabelleği inceleyin. Bir rutin arabelleğin tamamını gönderirse geçerli uzunluğun ötesindeki eski bir bayt iletilen verilerde görünebilir. Hedefi temizleyin veya yalnızca etkin karakter sayısını iletin.
Uygulanabilir bir tanılama yöntemi
- İletilen baytları bir seri monitör, protokol analizörü veya ağ geçidi tanılama sayfasıyla tam olarak yakalayın.
- Her baytı onaltılık olarak yazın ve yazdırılabilir değerleri yeniden karakterlere eşleyin.
- Çerçeve baytlarını, sonlandırıcıları, ayraçları, uzunluk alanlarını ve sağlama toplamlarını işaretleyin.
- Boşluklar ve büyük-küçük harf kullanımı dâhil olmak üzere yakalamayı cihaz kılavuzuyla karşılaştırın.
- Bilinen, doğru bir mesaj için yakalamayı tekrarlayın ve bayt konumlarını karşılaştırın.
Bu bayt düzeyindeki yaklaşım, biçimlendirme hatalarını kablolama, baud hızı ve parite sorunlarından ayırır. Yakalama okunabilir ancak eksik bir metin gösteriyorsa dize oluşturma işlemine odaklanın. Her bayt yanlışsa önce fiziksel ve seri ayarları doğrulayın.
Yaygın uygulama hataları
Bir rakamı sayısal değeriyle karıştırmak
“5” karakteri ASCII ondalık 53'tür; tamsayı değeri 5 değildir. Ölçülen bir sayıyı metne dönüştürmek için bir biçimlendirme yordamı gerekir. Ham tamsayıyı bir karakter arabelleğine kopyalamak bunun yerine bir denetim baytı üretir.
Onaltılık metni ikilik baytlarla karıştırmak
“41” metni iki karakter içerir: onaltılık 34 ve onaltılık 31. Değeri onaltılık 41 olan tek bir bayt A harfini temsil eder. Protokolün insan tarafından okunabilir onaltılık metin mi yoksa ham ikilik veri mi beklediğine karar verin.
ASCII dışındaki kodlamaları göz ardı etmek
ASCII, İngilizce harfleri ve sınırlı bir sembol kümesini kapsar. UTF-8, ilk 128 karakter için aynı bayt değerlerini kullanır; ancak ASCII dışındaki karakterler birden fazla bayt kullanır. Eski bir cihaz bu baytları reddedebilir veya bunları yanlış sayabilir.
Sürdürülebilir PLC kodu için tasarım önerileri
Protokol biçimlendirmesini tek bir yordamda tutun. Sayısal değişmezleri merdiven mantığına veya yapılandırılmış metne dağıtmak yerine denetim kodları için adlandırılmış sabitler kullanın. Devreye alma sırasında son iletim arabelleğini onaltılık olarak günlüğe kaydedin. Proje belgelerine örnekler ekleyin.
Bir protokol basit metin çerçevelemesinin ötesine geçtiğinde tanımlı bir durum makinesi kullanın. Alım konumunu, zaman aşımını, çerçeve durumunu ve doğrulama sonucunu ayrı ayrı izleyin. Bu, yeniden denemeleri ve hatalı mesajları tanılamayı kolaylaştırır.
Daha geniş veri işleme kalıpları için PLC sistemlerinde diziler üzerinde döngü oluşturma konusuna bakın. Ağ bağlantılı cihazlar için bir Modbus TCP cihazını devreye alma kılavuzu, çerçeveleme ve devreye alma bağlamı ekler.
Devreye alma kontrol listesi
- Karakter kümesini ve bayt sırasını doğrulayın.
- Sınırlayıcıları ve sonlandırıcıları onaltılık olarak doğrulayın.
- Mesajın sabit uzunluklu mu yoksa uzunluk önekli mi olduğunu kontrol edin.
- Yazdırılabilir onaltılık metni ham ikilik veriden ayırın.
- Zaman aşımı, yeniden deneme ve arabellek temizleme davranışını doğrulayın.
- Bilinen, doğru bir bayt yakalamasını proje dosyalarıyla birlikte arşivleyin.
ASCII basittir, ancak endüstriyel arızalar çoğu zaman eksik veya yanlış okunan tek bir baytta gizlenir. Mesajı önce sayısal değerler dizisi olarak ele alın. Çerçeve anlaşılana kadar onu yeniden metne dönüştürmeyin.