[PIC] Jämföra två byte data?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 47008
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: [PIC] Jämföra två byte data?

Inlägg av TomasL »

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.
Användarvisningsbild
Icecap
Inlägg: 26658
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: [PIC] Jämföra två byte data?

Inlägg av Icecap »

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.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: [PIC] Jämföra två byte data?

Inlägg av sodjan »

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.
Skriv svar