275b6b4a4126908e1972d5bf0be6bcd1fde6713d
howto/come_gestire_comunicazione_rs485/gestione_rs485_con_schede_syel.md
... | ... | @@ -8,7 +8,7 @@ In questo programma specifico la centrale comunica alla periferica: |
8 | 8 | - quali uscite (1 - 10) attivare/disattivare |
9 | 9 | - se attivare il pwm sull'uscita 1 (e quanto impostare la frequenza e duty cycle) |
10 | 10 | - quanto potente (veloce) deve essere l'uscita chiamata pomp (gestita da uno slider grafico) |
11 | -- richiedere lo stato degli ingressi In e Potenz |
|
11 | +- richiedere il valore degli ingressi In e Potenz |
|
12 | 12 | |
13 | 13 | Nel **common.h** (o comunque in un file .h incluso nel common): |
14 | 14 | |
... | ... | @@ -73,6 +73,14 @@ Nel **common.h** (o comunque in un file .h incluso nel common): |
73 | 73 | volatile short int TXX = 0; // variabile per il conteggio dei pacchetti inviati |
74 | 74 | volatile short int RXX = 0; // variabile per il conteggio dei pacchetti ricevuti |
75 | 75 | |
76 | + volatile int controllo_comando_uscite = 0; // variabile per il controllo della corretta ricezione della periferica |
|
77 | + // 0 = fail, 1 = ok (uscite digitali) |
|
78 | + |
|
79 | + volatile int controllo_comando_pomp = 0; // variabile per il controllo della corrretta ricezione della periferica |
|
80 | + // 0 = fail, 1 = ok (uscita pomp) |
|
81 | + |
|
82 | + volatile int controllo_lettura_ingressi = 0; // variabile per il controllo della corretta ricezione della periferica |
|
83 | + // 0 = fail, 1 = ok (ingressi In e Potenz) |
|
76 | 84 | volatile U8 In; // prima variabile per lettura ingressi |
77 | 85 | volatile U8 Potenz; // seconda variabile per lettura ingressi |
78 | 86 | volatile char freq = 0; // variabile relativa alla frequanza del pwm |
... | ... | @@ -98,11 +106,21 @@ Nel **common.h** (o comunque in un file .h incluso nel common): |
98 | 106 | int n = bload(PortaCOM, bufferRX, 8); // la funzione bload salva il messaggio arrivato, sul bufferRX |
99 | 107 | if (n != -1) // se bload restituisce un valore diverso da -1 ha letto correttemente il messaggio |
100 | 108 | { |
101 | - In = bufferRX[0]; // il valore della variabile In diventa il valore del primo byte del pacchetto |
|
102 | - Potenz = bufferRX[1]; // il valore della variabile Potenz diventa il valore del secondo byte del pacchetto |
|
103 | - RXX++; // incremento del contatore dei pacchetti ricevuti |
|
109 | + if (bufferRX[0] == (char)OUT_ON_OFF) // se la periferica ha risposto con il primo byte OUT_ON_OFF |
|
110 | + controllo_comando_uscita = 1; // lo scambio dati ha avutp successo, la variabile di controllo viene messa a 1 |
|
111 | + |
|
112 | + else if (bufferRX[0] == (char)POMP_VEL) // se la periferica ha risposto con il primo byte POMP_VEL |
|
113 | + controllo_comando_pomp = 1; // lo scambio dati ha avuto successso, la variabile di controllo viene messa a 1 |
|
114 | + |
|
115 | + else |
|
116 | + { |
|
117 | + controllo_lettura_ingressi = 1; // la lettura degli ingressi ha avuto successo, la variabile di controllo viene messa a 1 |
|
118 | + In = bufferRX[0]; // il valore della variabile In diventa il valore del primo byte del pacchetto |
|
119 | + Potenz = bufferRX[1]; // il valore della variabile Potenz diventa il valore del secondo byte del pacchetto |
|
120 | + } |
|
121 | + RXX++; // incremento del contatore dei pacchetti ricevuti |
|
104 | 122 | } |
105 | - clear_bufferRX(); // svuotamento del bufferRX |
|
123 | + clear_bufferRX(); // svuotamento del bufferRX |
|
106 | 124 | } |
107 | 125 | |
108 | 126 | // funzione che inizializza lo stato iniziale delle uscite all' avvio |
... | ... | @@ -124,13 +142,13 @@ Nel **common.h** (o comunque in un file .h incluso nel common): |
124 | 142 | // inizializzazione dell'uscita pomp |
125 | 143 | flag_pomp_on_off = 0; // la flag dell' uscita pomp è 0 perchè all' avvio è spenta |
126 | 144 | flag_pomp_on_off_prec = 0; |
127 | - update_bufferTX_pomp(); // aggiorna il bufferTX con i dati relativi all' uscita pomp |
|
145 | + update_bufferTX_pomp(); // aggiorna il bufferTX con i dati relativi all' uscita pomp (comunicando che è spenta) |
|
128 | 146 | bsave(PortaCOM, bufferTX, 2); // invia i dati del bufferTX |
129 | 147 | wait(10); |
130 | 148 | TXX++; |
131 | 149 | } |
132 | 150 | |
133 | - // funzione principale per la gestione della comunoicazione RS485 che verrà richiamata nello start.c |
|
151 | + // funzione principale per la gestione della comunicazione RS485 che verrà richiamata nello start.c |
|
134 | 152 | void TaskCOM485(void) |
135 | 153 | { |
136 | 154 | while(1) |
... | ... | @@ -174,7 +192,7 @@ Nel **common.h** (o comunque in un file .h incluso nel common): |
174 | 192 | flag_pwm_on_off_prec = flag_pwm_on_off; |
175 | 193 | update_bufferTX_out(0); // aggiorna il bufferTX con l' uscita 1 (0) |
176 | 194 | TXX++; |
177 | - bsave(PortaCOM, bufferTX, 2); // invia il bufferTX |
|
195 | + bsave(PortaCOM, bufferTX, 4); // invia il bufferTX |
|
178 | 196 | wait(10); |
179 | 197 | } |
180 | 198 |