Citat:
boogi:
Kad je upitao 03 on je poslao odgovor masteru da ima promjena i poslao je podatke o promjeni. Master zbog XY razloga nije to razumio. Primio je nesto, zna da ceka odgovor od 03 ali nije ok ta info koja je stigla( nije odredjenog formata, nije odredjene duzine....). Sta u tom slucaju?
spominjao sam da jedna od stvari koja mora se napravi je "message send retry"
sta je fora svaki "master pita, slave odgovara" dogadjaj mora da bude siguran, znaci nema "nije rezumeo" :)
imas 2 nacina da resis to
1. na svaki poslati paket onaj koji je primio paket salje ACK sa CRC-om poruke koju je dobio - ovo tebi mislim da ne treba
2. poruka koja se salje uvek sadrzi svoj crc i proverava se samo na strani primaoca ... u tvom slucaju dovoljno da samo master radi proveru
tako da bi jedna iteracija (jedna komunikacija master-slaveX)
Code:
pocni:
master -> slave: paket [node:X, sender:master, paketTip:paketsastrukturompodataka, data:strukturasadrzaj, crccelogpaketa]
slave -> master: paket [node:master, sender:X, paketTip:odgovornastrukturu, primiook:true/false, imamizmenezatebe:strukturasadrzaj, crccelogpaketa]
ako je primiook true pici dalje, ako je false goto pocni:
ako je crccelogpaketa ok zavrsio si goto kraj:
master -> slave: paket [node:X, sender:master, paketTip:ponovi zadnji odgovor,crccelogpaketa]
slave -> master: paket [node:master, sender:X, paketTip:odgovornastrukturu, primiook:true/false, imamizmenezatebe:strukturasadrzaj, crccelogpaketa]
ako je primiook false ili je crc pogresan goto pocni:
kraj:
to ti je otprilike tako nekako ... mada sve ove biblioiteke imaju vec u sebi auto-retry i sve sto ti je potrebno da bi sigurno prebacio paket sa jednog na drugi node
Citat:
boogi:
Ja mogu ponovo prozvati 03 da posalje info. Sta ako opet master i drugi put ne raumije? Koliko puta master da ponavlja upit? Ili da ga ne ponavlja nego da odbaci info na prvu pa proziva dalje 04 , pa u sledecem krugu ponovo da isproziva 01, 02 pa kad dodje do 03 da mozda tad primi ok info.
to je tvoja odluka, sta zelis da se tada desi...
- mozes da radis retry beskonacno
- mozes da posle 10 (ili 3 ili 30 ili 100 ili ..) neuspesnih retry proglasis nodeX kao neispravan i vise ga ne prozivas do reseta uredjaja, smatras da je neispravan
- mozes da posle 10 (ili 3 ili ...) neuspesnih retry da proglasis celu spravu neispravnom, posaljes svim slave "momci prikazite veliku kitu na ekranu crkli smo"
- mozes da ... upalis alarm neki
realno sve je na tebi .. mozes da posle 10 neuspesnih retry samo ides dalje pa kad taj opet dodje na red opet probas 10 puta pa opet picis dalje ... to je tvoja odluka, mozda ti je slave1 ultra bitan a slave4 nebitan pa ako se sa slave1 desava problem zabodes celu masinu a slave4 ako se ne javlja samo ga otkacis da vise ne postoji...