|
Il protocollo Modbus è uno dei più comuni ed utilizzati nel settore industriale, ed è anche un protocollo semplice da implementare ed utilizzare. Le funzioni di lettura e scrittura sono state formulate per addattarsi alle più svariate applicazioni Il protocollo Modbus permette di comunicare con più apparecchi collegati sulla stessa linea seriale; la distinzione tra un apparecchio e l'altro viene fatta attraverso un indirizzo software ( 1..255 ) che deve essere programmato all'interno di ogni singolo apparecchio. LE FUNZIONI DISPONIBILI (è comunque bene verificare caso per caso, se l'apparecchi utilizzato ha eventuali restrizioni d'uso del protocollo):
Formato del messaggio di trasmissione Il messaggio di trasmissione è composto da una stringa di byte in cui: - - il secondo byte è la funzione del messaggio stesso. - i byte successivi contengono un numero variabile di byte, a seconda della funzione utilizzata, e precisamente: Funzioni 1 e 2: Domanda Byte 1 Indirizzo Byte 2 Funzione (01 o 02) Byte 3 Bit di partenza (byte alto) Byte 4 (byte basso) Byte 5 Numero di bit (byte alto) Byte 6 (byte basso) Byte 7 CRC (byte basso) Byte 8 (byte alto) Risposta Byte 1 Indirizzo Byte 2 Funzione (01 o 02) Byte 3 n° di byte dati di ritorno Byte 4... byte di dati Byte CRC (byte basso) Byte (byte alto) Ogni byte 'dato' di ritorno contiene impaccato lo stato di 8 bit. Funzioni 3 e 4: Domanda Byte 1 Indirizzo Byte 2 Funzione (03 o 04) Byte 3 Indirizzo di partenza (byte alto) Byte 4 (byte basso) Byte 5 Numero di indirizzo (byte alto) Byte 6 (byte basso) Byte 7 CRC (byte basso) Byte 8 (byte alto) Risposta Byte 1 Indirizzo Byte 2 Funzione (03 o 04) Byte 3 n° di byte dati di ritorno Byte 4... byte di dati Byte CRC (byte basso) Byte (byte alto) Ogni 'dato' di ritorno viene espresso con due byte, e si riceve sempre prima il byte alto e poi il byte basso. Funzione 5: Domanda Byte 1 Indirizzo Byte 2 Funzione (05) Byte 3 Bit da forzare (byte alto) Byte 4 (byte basso) Byte 5 Valore di forzatura (0=off, 255=on) Byte 6 valore fisso a 00H Byte 7 CRC (byte basso) Byte 8 (byte alto) Risposta Se il comando è andato a buon fine, la risposta è la copia della domanda. Funzione 6: Domanda Byte 1 Indirizzo Byte 2 Funzione (06) Byte 3 Registro da forzare (byte alto) Byte 4 (byte basso) Byte 5 Valore di forzatura (byte alto) Byte 6 (byte basso) Byte 7 CRC (byte basso) Byte 8 (byte alto) Risposta Se il comando è andato a buon fine, la risposta è la copia della domanda. Funzione 15: Domanda Byte 1 Indirizzo Byte 2 Funzione (15) Byte 3 bit partenza (byte alto) Byte 4 (byte basso) Byte 5 Numero di bit (byte alto) Byte 6 (byte basso) Byte 7 n° di byte dati che seguono Byte 8 1° dato ...... Byte CRC (byte basso) Byte (byte alto) Risposta Byte 1 Indirizzo Byte 2 Funzione (15) Byte 3 bit partenza (byte alto) Byte 4 (byte basso) Byte 5 Numero di bit (byte alto) Byte 6 (byte basso) Byte 7 CRC (byte basso) Byte 8 (byte alto) Ogni 'dato' viene espresso con due byte, e si trasmette sempre prima il byte alto e poi il byte basso. Funzione 16: Domanda Byte 1 Indirizzo Byte 2 Funzione (16) Byte 3 Indirizzo di partenza (byte alto) Byte 4 (byte basso) Byte 5 Numero di indirizzi (byte alto) Byte 6 (byte basso) Byte 7 n° di byte dati che seguono Byte 8 1° dato (byte alto) Byte 9 1° dato (byte basso) ...... Byte CRC (byte basso) Byte (byte alto) Risposta Byte 1 Indirizzo Byte 2 Funzione (15) Byte 3 Indirizzo di partenza (byte alto) Byte 4 (byte basso) Byte 5 Numero di indirizzi (byte alto) Byte 6 (byte basso) Byte 7 CRC (byte basso) Byte 8 (byte alto) Ogni 'dato' viene espresso con due byte, e si trasmette sempre prima il byte alto e poi il byte basso. p.s.: verificare sempre i manuali dell'apparecchiatura per sapere quali sono gli indirizzi permessi, ed il formato numerico da utilizzare per i dei dati in scambio. CALCOLO DEL CRC La funzione del CRC è di calcolare un numero di due Byte partendo dal messaggio di trasmissione (secondo una formula standard), cosi chè, chi lo riceve, rifacendo lo stesso calcolo e confrontandolo con lo stesso CRC ricevuto, può determinare se sono presenti o meno errori di trasmissione. p.s.: Il calcolo del CRC non è influenzato dal tipo di parità utilizzato nella trasmissione dati. Procedura di calcolo: Puntatore al 1° byte da trasmettere Inizializzare il registro CRC a 16 bit con tutti '1' XOR tra CRC e il byte puntato, risultato in CRC INIT COUNT Inizializza COUNT con 0 SHIFT: Shifta a destra il CRC di 1 bit Incrementa COUNT Che valore ha il bit uscito a destra dallo shift Se vale 1, XOR tra CRC e 40961(dec.), risultato in CRC Se vale 0, continua COUNT vale 8 ? Se no, torna a SHIFT Se sì, incrementa il puntatore al byte successivo Il puntatore ha superato i byte da trasmettere ? Se no, XOR tra CRC ed il Byte da trasmettere e torna a INIT COUNT Se sì, il CRC contiene il valore da utilizzare per la trasmissione. Di seguito è un esempio scritto in Visual Basic per eseguire il calcolo del CRC per una data stringa di trasmissione.
|
Modificato il domenica 03 settembre 2000 meglio se visto in 1024 x 768 pixels |