Problemino comunicazione tra elettroniche Supponiamo abbiate delle centraline che misurano qualcosa Supponiamo che abbiate un modulo principale che deve interrogarle e comandarle Tutte le centraline sono slave, il modulo principale e' l'unico master Tutti collegati insieme via rs485 su un doppino rame La comunicazione, al fine di essere piu' rapida possibile, usera' l'invio e la ricezione di caratteri nella loro completa estensione e quindi dallo 0x00 al 0xFF, non c'e' un range di caratteri 'speciali' che possano essere interpretati come comandi piuttosto che come dati Ogni centralina e' identificabile con un byte di indirizzo, contenuto sia nel comando che il modulo principale invia sia nella risposta di ogni centralina Quindi supponiamo un modulo principale e tre centraline la n.1 la n.2 e la n.3
Il modulo principale invia il comando come una stringa da 4 caratteri, X, Y, Z, K dove:
- X e' un preambolo (supponiamo 0x01)
- Y e' il comando (supponiamo 0x02)
- Z e' l'indirizzo del destinatario (supponiamo 0x03, perche' voglio interrgoare la centralina n.3)
- K e' un checksum di chiusura (supponiamo 0x06)
Tutte le centraline ricevono il comando, verificano se sia per loro, e nel caso lo sia rispondono con una sfilza di caratteri:
- A e' un preambolo (supponiamo 0x01)
- B e' il comando cui rispondono (supponiamo 0x02)
- C e' l'indirizzo del mittente, il proprio (supponiamo 0x03)
- D e' l'indirizzo del destinatario, il modulo principale (supponiamo 0x08)
- E, F, G...V sono dei caratteri contenenti i dati in risposta (supponiamo 0x00, 0x01, 0x02, 0x03, 0x04....)
- Z e' un checksum di chiusura (supponiamo 0xAB)
Ok fin qua tutto normale
La domanda e': premesso che nella loro risposta ogni centralina possa sparare qualsiasi valore nei byte dei dati che stanno viaggiando sul cavo, come fare per evitare che nella sfilza di caratteri che costituiscono la risposta (che anche tutte le altre centraline 'vedono', sono tutte collegate su un unico cavo) ci sia una combinazione che possa essere interpretata come un comando che parte dal modulo principale?
Chiedo questo perche' potrebbe verificarsi questa condizione:
- modulo principale invia comando a centralina n.3
- tutte le centraline 'leggono' il comando sul cavo
- solo la centralina n.3 reagisce al comando e restituisce invia la propria risposta
- con riferimento ai dati sopra, se nella risposta della centralina n.3 ci fosse una sequenza del tipo 0x01 0x02 0x02 0x05 verrebbe interpretata dalla centralina n.2 come un comando a lei indirizzato e reagirebbe rispondendo
E quindi, volendo mantenere la possibilita' per ogni byte di poter contenere un valore qualsiasi, come fare per evitare l'eventualita' sopra descritta?