Checksum kullanımı

Başlatan blueboard, 27 Aralık 2015, 13:38:36

blueboard

Ete Hocam, bir süredir seri haberleşme üzerine yoğunlaştım. Değişik kaynakları inceliyorum.Sizin seri haberleşme ders notlarınızı da defalarca okudum. Ancak anlamadığım bir husus var. Bazı seri haberleşme protokollerinde gönderilen dataların sonuna checksum adında bir doğrulama byte'ı konduğunu gördüm.
Örnek bir yerde datalar "0x04 ,0x82 ,0x80 ,0x0c ,0x14 ,0x03 ,0xB0 ,0x01 ,0x03 ,0x010 ,0x03, 0xBC "
şeklinde verilmiş ve burada checksum 0xBC olarak bulunmuş. İnternnette checksum calculator diye bir program buldum ancak o da dosya seçmemi istiyor. Dolayısıyla soruma cevap bulamadım.
Sizden ricam checksum'un nasıl hesaplandığını açıklayabilir misiniz.Teşekkür ederim.

ete

Check_sum bir kontrol unsurudur. yollanan bilginin doğru alınıp alınmadığını kontrol etmenize yarar. Genelde eldeki veriler toplanır ve ana boyut byte büyüküğünde olduğundan byte aşıldıkça içinde 256 atılır. Kalan sonunda neyse Check_Sum  odur.
Elinde Byte tipi 12,48,214,180 gibi 4 adet veri olsun. Bunu en çok yapılan yöntemle toplarsak;
12+48+214+180=198 rakamına ulaşırsın. Aslında toplam sonucu (256+198) şeklindedir. Ama 256 otomatik atılır kalan Check_sum olarak kullanılır.
Sonuçta yollanan verilerin yanına birde checksum eklenirse alan kendiside shecksum hesaplayıp verileri doğrumu almış yanlış mı almış karar verebilir.

Ete

blueboard


blueboard

#3
Ete Hocam, seri haberleşme konusunu araştırdığımı belirtmiştim.  Bununla ilgili bir resim ekliyorum.
Tereddüte düştüğüm husus şu: Seri haberleşme belirli bir kurala göre 1 ve 0 'ların gönderilmesinden oluşuyor ve start ve stop bitleri dahil 10 bitten oluşuyor.Ancak varolan sistemdeki değerler hexadesimal sayılar. Bu sayıları binary sayılara mı dönüştürmem gerekiyor?
Sizi fazla yoruyor olabilirim,kusuruma bakmayın.

ete

Bu tür bilgileri böye yalın ortamda açıklamak gerçekten zor.
Bana kalırsa kimseyi başka bir şeye çevirmen gerekmiyor. Haberleşme zaten binary yapılıyor. Ama senin çevirmen gerekmeden bu yapılır. Örneğine bakılırsa daha ziyade HEX formatı daha işine yarar gözüküyor. Örneğin şunu gösteriyor;
"50046832111F" yada şöyle yazmak daha doğru olurdu 50 04 68 32 11 1F
50=Kaynak cihaz kodu
04=Paket Boyu (ID ve uzunluk olmadan) (Burada 68 32 11 1F byte larını temsil ediyor yani 4 byte)
68= Varış cihaz kodu (alıcı cihaz kodu denilebilir)
32= Data
11=Data
1F= XOR Cheksum

Yeri gelmişken bu checksum konusunda da bilgi vereyim. Başlangıç 00H ile başlıyorsun. Bütün paket verilerini sırası ile XOR işlemine tabi tutuyorsun. Sonuçta kalanı son byte olarak oraya yazıyorsun.
$00 XOR $50=$50
$50 XOR $04=$54
$54 XOR $68=$3C
$3C XOR $32=$0E
$0E XOR $11=$1F
böylece elde edilen $1F değerini en son byte olarak yolluyorsun.

Ete


blueboard

#5
Elinize sağlık, tam verileri sizin belirttiğiniz şekilde düzeltirken siz olması gereken şekli yazdınız.
Ete Hocam , sizin seri haberleşme derslerinizde alıcının öncelikle veri almak için bir başlangıç bilgisi beklediğini yazmıştınız ( Örneğinizde " SerIn2 GIRIS,396,[WAIT ("ETE"),AL]" yazmıştınız.
Bu alıcı yazılımında veri almaya başlaması için kaynak kodu olan "50" yi mi beklemesi gerekir?
Uyarılarınıza göre artık bir şeyler yazmaya başlayacağım.

ete

Değişiklikler ihtiyaçtan doğar. Benim dediğim sistemde byte lar alındıktan sonra bilgi kontrolü, senin bu sisteminde ise hem parity kontrolü hemde checksum kontrolü yapılıyor.
Sonuçta bu sistemin başlangıç bilgisine ihtiyacı yok.

Ete

blueboard

#7
Ete Hocam, asenkron seri haberleşme kuralı olan 8N1 kuralına göre ilave olarak start ve stop biti ilave ederek toplam 10 bit'e tamamlamam gerekir değil mi? Teşekkür ederim.

ete

Kullandığın sistemin detaylarını bilmiyorum. Önceki mesajlarında even parity den bahsetmiştin. Şimdi daha farklı bir şeyden bahsediyorsun. Açıkçası şimdiye kadar standart haberleşme formatının dışına çıkmadım ben. Gerek olmadı. Sen neden ihtiyaç duydun acaba. Madem ihtiyaç duydun vede araştırdın o zaman gereği neyse yapacaksın.

Ete

blueboard

#9
Ete Hocam, internetten araştırdığım kaynaklardan birinde even parity'den bahsediliyordu. Ancak data gönderme formatına göre sağlama zaten checksum ile yapılıyor. Bence de even parity'e gerek yok.Eklediğim ekran görüntüsü daha doğru bilgileri veriyor. Belirttiğiniz gibi artık açıklamalarınız doğrultusunda çalışmaya başlayacağım. Size son kez şunu sormak istiyorum, ekran görüntüsüne göre start ve stop bitlerine gerek var mı?

ete

Haberleşme denilen şey bir biri ile anlaşmaya çalışan iki ünitenin belirli kurallar çerçevesinde alışveriş yapıp el sıkışmalarıdır.
Ona gerek varmı buna gerek varmı demenin bir anlamı yok. Karşı taraf öyle bir şey bekliyor ise var elbette. Yok ise yok demek lazım.
Buna sen tek taraflı karar vermemen gerekir. Sistemin bunu gerektiriyorsa var, gerektirmiyorsa yok demek bana düşen.
Ne yaptığını detaylı bilmeden böyle sorulara genel anlamda cevap vermem mümkün değil maalesef.

Ete

blueboard

#11
Ete Hocam,son mesajınızdan bu yana ne yapmam gerektiğini düşünüyorum.Elimden geldiğince bir şeyler yapmaya çalıştım ama bir çok hatam olduğuna eminim ve eksik olan kısımlar da var.Konunun daha derli toplu olması bakımından bir de word belgesi hazırladım.İnşallah sayenizde , yapacağınız yol göstermeler ile sorunu çözeceğime inanıyorum.Size zahmet kontrol edebilir misiniz. Teşekkür ederim.

Powered by EzPortal