Home
Accesso / Registrazione
 di 

PC radio interlink - 5

PC radio interlink

Se il tentativo di trasmissione non dovesse andare a buon fine per qualsiasi problema (interferenze radio o elettriche, eccessiva distanza tra i due apparati) la funzione “sendstring()” tenterà nuovamente di inviare il messaggio per un numero di volte definibile dall’utente tramite la variabile “retry=x” (x rappresenta il numero di tentativi) in fase di impostazione, ovvero di scrittura del programma listato.

La funzione “sendstring()” terminerà comunque riportando un valore 0 se la trasmissione è avvenuta correttamente, oppure se anche dopo i vari tentativi impostati ed eseguiti la stessa non è andata a buon fine. Quanto alla ricezione dei messaggi in arrivo, la procedura che se ne occupa è denominata “Ricez”, e viene invocata automaticamente al sopraggiungere di un qualsiasi carattere presente sul canale dati RXD della porta seriale; tale funzionalità si chiama “TRAP EVENT” e viene definita dal comando “ON COM(1) GOSUB Ricevi”, che a sua volta chiama la procedura “Ricez”.

Quest’ultima procedura esegue un filtro dei caratteri in arrivo sulla porta seriale accettando solamente messaggi formattati secondo la sintassi definita dalla funzione “sendstring()”, ovvero il cui formato è del tipo STX+messaggio+checksum+ ETX. Quando il messaggio è giunto completamente comincia la verifica della sua integrità: viene estratto l’insieme dei dati originale, su di esso viene calcolato il checksum (somma dei bit) che quindi viene confrontato con quello ricevuto; se entrambi i checksum corrispondono il messaggio originale viene messo a disposizione dell’utente, ovvero della sezione principale del software, nella variabile “comando$”.

Si noti che il confronto dei checksum avviene tra quello espresso dai due bit precedenti il bit di fine trasmissione (ETX) e quello calcolato dalla somma dei bit del messaggio ricevuto.

Quando la sezione principale del programma può disporre del messaggio invia una conferma tramite la procedura “sendack” all’unità remota, ovvero trasmette la condizione di ACK verso l’interfaccia che gli ha mandato la stringa, per confermare l’avvenuta ricezione. Notiamo infine alcuni dettagli rilevanti delle varie procedure, sempre facendo riferimento al listato del primo software:

    - la funzione “sendstring()” rimane in attesa del messaggio di conferma per il tempo impostato nella riga “IF waitforack(2)=0 THEN” utilizzando appunto la funzione “waitforack()” il cui scopo è quello di attendere la risposta dall’unità remota;
    - la procedura di supporto “delay()” al contrario del comando basic “SLEEP()” realizza un’attesa nell’esecuzione per frazioni di tempo anche inferiori al secondo;
    - la procedura “sendack” disattiva temporaneamente la funzionalità di TRAP EVENT e attende con la procedura “delay(.1)” 100 millisecondi (che è il tempo minimo di commutazione tra TX ed RX dei moduli RTFSAW Aurel) prima di rispondere al remoto con il messaggio di ricezione avvenuta;
    - la procedura “checksum()”, come dice il nome stesso, calcola il checksum sul messaggio passatogli; viene utilizzata sia in trasmissione per comporre il checksum sul messaggio che sta per essere inviato, sia in ricezione per verificare la correttezza di quello ricevuto, ovvero per il confronto tra esso e quello ricavato e calcolato dal messaggio in arrivo.

 

 

Scrivi un commento all'articolo esprimendo la tua opinione sul tema, chiedendo eventuali spiegazioni e/o approfondimenti e contribuendo allo sviluppo dell'argomento proposto. Verranno accettati solo commenti a tema con l'argomento dell'articolo stesso. Commenti NON a tema dovranno essere necessariamente inseriti nel Forum creando un "nuovo argomento di discussione". Per commentare devi accedere al Blog

 

 

Login   
 Twitter Facebook LinkedIn Youtube Google RSS