Modbus RTU ve Modbus ASCII ‘nin temel farkı MODBUS mesajlarının farklı kodlanmasıdır.

Veri Formatları

Başlamadan önce verinin her bir bayt’ının farklı yollarda nasıl gösterildiğini inceleyelim:

Binary (2 lik düzen) : 10101110 2 karakter 0 ve 1
Desimal (10 luk düzen) : 174 10 karakter 0 dan 9 a
Heksadesimal (16 lık düzen) : AE 16 karakter 0 dan  F ye
ASCII (256 lık düzen) : ® 256 farklı karakter

 

Mesaj Formatı

Modbus RTU’da baytlar (veriler) aralarında boşluk olmadan birbirinin ardı sıra gönderilir, mesajın sonunda ise  3-1/ 2 karakterlik bir boşluk olur. Bu sayede yeni bir iletinin başladığı anlaşılır.

Modbus RTU’da baytlar arasındaki herhangi bir gecikme yeni bir mesajın başlangıcı olarak yorumlanmasına neden olur. Bu da Modbus RTU’nun modemler ile düzgün çalışmasını engeller.

Modbus ASCII her mesajın başlangıcında iki nokta üst üste karakterini “:” ( hex 3A) kullanır.

Mesaj, satır başı “carriage return” ve yeni bir satır karakterleri ile sonlandırılır (hex oD ve oA). Bu baytlar arasında boşluk olmasına izin verir ve bazı modemler ile veri aktarımını mümkün kılar.

Bayt Boyutu

Modbus RTU’da her bayt başlangıç ve bitiş bitleri ile çerçevelenmiş 8 binary karakterlik bir dizi şeklinde gönderilir, yani hey bayt 10 bitten oluşur.

Modbus ASCII’de, veri bitlerinin sayısı 8’den  7’ye düşürülmüştür. Bayt boyunu 10  bit şekilde tutacak şekilde durdurma bitine ilave olarak eşlik (parity ) biti kullanılır.

Veri baytlarını bölmek

Modbus ASCII, her veri baytı hexadecimal değerde iki ASCII karakteri temsilen 2 bayta ayrılmıştır. Örneğin,

Modbus Mode veri (ASCII) veri (hex) veri (binary)
Modbus RTU ® AE 1010 1110
Modbus ASCII A , E 41 , 45 100 0001 , 100 0101

Modbus RTU veri bayt aralığı 00 ila FF arasındaki herhangi bir karakter olabilir.

Modbus ASCII veri bayt aralığı sadece 16 onaltılık (hexadecimal) karakterler ile temsil etmektedir. Bu nedenle, Modbus ASCII’deki her veri baytı bu 16’dan biri olmalıdır:

ASCII hex binary ASCII hex binary
0 30 011 0000 8 38 011 1000
1 31 011 0001 9 39 011 1001
2 32 011 0010 A 41 100 0001
3 33 011 0011 B 42 100 0010
4 34 011 0100 C 43 100 0011
5 35 011 0101 D 44 100 0100
6 36 011 0110 E 45 100 0101
7 37 011 0111 F 46 100 0110

Hata Sağlaması – LRC Hesaplama

Daha önce de belirtildiği gibi, her Modbus RTU mesajı CRC veya Cyclic Redundancy Check olarak adlandırılan iki hata denetimi baytı ile sonlandırılır. Benzer şekilde, Modbus ASCII bir LRC ya da Boyuna Fazlalık Kontrol (Longitudial Redundancy Check)  adında bir hata denetimi baytı ile sonlandırılır.

LRC hesaplanması CRC’den çok daha kolaydır.

LRC hesaplamak için:

1.  Mesajdaki tüm veri bayt ekleyin (ASCII’ye dönüştürmeden ve ilk kolon ve son CR / LF olmadan önce).
2. 8 bit üzerindeki tüm bitleri atın.
3. LRC baytını elde etmek için sonucu negatif (ikinin tümleyeni) yapın.

LRC ile bayt akışının toplamı  0 olacaktır çünkü negatif alt toplamların sonucu o olur.

Örneğin,  17 numaralı slave cihazından 40108 den 40110 ‘a kadar olan adreslerde analog çıkış içeriği  soran mesaj kodudur.

11 03 00 6B 00 03

Baytları toplayalım:

onluk onaltılık ikilik
17 11 0001 0001
3 03 0000 0011
0 00 0000 0000
107 6B 0110 1011
0 00 0000 0000
3 03 0000 0011

Toplam:

onluk onaltılık ikilik
130 82 1000 0010

LRC’yi elde etmek için 2’nin tümleyeni  (negatif yap)

onluk onaltılık ikilik
-130 7E 0111 1110

LRC dahil olarak mesajın toplamı

onluk onaltılık ikilik
0 00 0000 0000

LRC baytı  7E’dir.

Sonra bu LRC , verinin kalanı ile birlikte iki ASCII bayt’a dönüştürülür.

LRC’nin bu iki ASCII baytı  37 ve 45’dir.

ASCII vs RTU örnek:

Aynı örneği kullanalım , 17 numaralı slave cihazdan 40108 ve 40110 register’larını sorgulayalım.

11 03 00 6B 00 03

Bunun için ASCII mesajı aşağıdaki gibidir. Mesajın başına iki nokta üst üste karakteri eklenir sonuna da satır başı ve satır ekleme karakterleri eklenir:

: 1 1  0 3  0 0  6 B  0 0  0 3  7 E  CR LF

Her karakter ASCII karakter olarak yazılır ve son mesajın oluşturulması için hex değerler ile değiştirilir.

3A 3131 3033 3030 3642 3030 3033 3745 0D 0A

Modbus ASCII sorgulama mesaj boyutu 17 bayt (170 bit)

……………

Aynı mesajın  Modbus RTU hali ise:

11 03 00 6B 00 03 76 87

Modbus RTU sorgulama mesaj boyutu  8 bytes (80 bits)

olacaktır.

Bunlar da ilginizi çekebilir:

Modbus Protokolü

Modbus TCP/IP

RS485 Hala Yaşıyor mu?

CRC nedir?

 

CEVAP VER

Lütfen yorumunuzu girin!
Lütfen isminizi giriniz

This site uses Akismet to reduce spam. Learn how your comment data is processed.