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