Titta på hur de "gamla" industriprotokollet (MODBUS) fungerar.
Där använder man både Paritet och CRC.
Samt att slaven alltid svarar på ett meddelande. Svaret innehåller alltid kommandot som slaven fick samt eventuella data.
På det sättet vet Mastern att slaven har fått meddelandet felfritt.
Slaven vet också att meddelandet förhoppningsvis är rätt, sannolikheten är ju rätt stor om både Paritet och CRC är korrekta.
Samtidigt vet ju mastern att meddelandet från slaven är korrekt, dvs Paritet, CRC samt kommandot.
[PIC] Jämföra två byte data?
Re: [PIC] Jämföra två byte data?
Jag har i en hel del projekt kört med att alla data överförs i ASCII, alltså värdet 100 överförs som '1' (0x31), '0' (0x30), '0' (0x30).
Ett paket startar med STX (0x02) och avslutas med ETX (0x03) och paket-identifiering ("kommandon") börjar på mellanslag (0x20).
Sedan finns det med i paketet en byte som anger om det ska skrivas eller läsas ('W' eller 'R') och till slut en ASCII HEX checksum som bara är en XOR av alla bytes utom STX/ETX.
Fördelen är att man kan skriva kommandon manuellt i brist på tid att utveckla ett "inställningsprogram", alla data som inte är >= mellanslag (0x20) och >= 0x80 kan direkt invalidera paketet.
Har fungerat bra i många år men ger såklart lite overhead.
Men allt beror ju på hur stora följder fel i kommunikationen kan få, är det livsuppehållande utrustning är det ju ganska viktigt att allt blir rätt, är det en lampa som ska blinka för att impa på granntjejen är det inte lika viktigt.
Att skicka samma paket 4gg och sedan ta det värde som det finns flest av är inte felsäkert på något vis, blir det fel på första byte lär det bli samma fel på de andra också. I radiosammanhang är läget lite annorlunda dock, där kan detta sätt ha en viss berättigande.
Ett paket startar med STX (0x02) och avslutas med ETX (0x03) och paket-identifiering ("kommandon") börjar på mellanslag (0x20).
Sedan finns det med i paketet en byte som anger om det ska skrivas eller läsas ('W' eller 'R') och till slut en ASCII HEX checksum som bara är en XOR av alla bytes utom STX/ETX.
Fördelen är att man kan skriva kommandon manuellt i brist på tid att utveckla ett "inställningsprogram", alla data som inte är >= mellanslag (0x20) och >= 0x80 kan direkt invalidera paketet.
Har fungerat bra i många år men ger såklart lite overhead.
Men allt beror ju på hur stora följder fel i kommunikationen kan få, är det livsuppehållande utrustning är det ju ganska viktigt att allt blir rätt, är det en lampa som ska blinka för att impa på granntjejen är det inte lika viktigt.
Att skicka samma paket 4gg och sedan ta det värde som det finns flest av är inte felsäkert på något vis, blir det fel på första byte lär det bli samma fel på de andra också. I radiosammanhang är läget lite annorlunda dock, där kan detta sätt ha en viss berättigande.
Re: [PIC] Jämföra två byte data?
Jag håller med Icecap om att "all-ASCII" protokoll är trevliga och
enkla att felsöka genom att linjelyssna eller genom att ersätta sändare
eller mottagare med en vanlig terminalemulering. Jag skulle även renolda
och skippa STX/ETX och istället avsluta allt med <CR>. Det gör att
loggning av kommunikationen mot en terminal automatiskt får snygga
radbrytningar för varje paket och ger snygga logfiler direkt.
enkla att felsöka genom att linjelyssna eller genom att ersätta sändare
eller mottagare med en vanlig terminalemulering. Jag skulle även renolda
och skippa STX/ETX och istället avsluta allt med <CR>. Det gör att
loggning av kommunikationen mot en terminal automatiskt får snygga
radbrytningar för varje paket och ger snygga logfiler direkt.