22.12.2015 Views

RECS 101: UN WEB SERVER EMBEDDED PER APPLICAZIONI DI CONTROLLO REMOTO TRAMITE TCP/IP Terza parte - Fare Elettronica n. 216 - Giugno 2003 - Anno 19

Contacts: Mobile +39 335-1880035 MSN: crandieri@hotmail.com | SKYPE: intellisystem_technologies email: randieri@intellisystem.it web: http://www.intellisystem.it Facebook https://www.facebook.com/intellisystem Linkedin https://www.linkedin.com/in/cristianrandieri Twitter https://twitter.com/C_Randieri ResearchGate: http://www.researchgate.net/profile/Cristian_Randieri Academia.edu: https://unict.academia.edu/CristianRandieri YouTube Channel: https://www.youtube.com/c/intellisystemit Google+: https://plus.google.com/+IntellisystemIt

Contacts: Mobile +39 335-1880035 MSN: crandieri@hotmail.com | SKYPE: intellisystem_technologies email: randieri@intellisystem.it web: http://www.intellisystem.it Facebook https://www.facebook.com/intellisystem Linkedin https://www.linkedin.com/in/cristianrandieri Twitter https://twitter.com/C_Randieri ResearchGate: http://www.researchgate.net/profile/Cristian_Randieri Academia.edu: https://unict.academia.edu/CristianRandieri YouTube Channel: https://www.youtube.com/c/intellisystemit Google+: https://plus.google.com/+IntellisystemIt

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

AUTOMAZIONE<br />

adesso prepararsi per eseguire il commando<br />

Output Set Command. Per<br />

fare ciò dobbiamo riempire il buffer<br />

commandBuf di tre byte rispettivamente,<br />

uno per il codice istruzione<br />

0x76 e i rimanenti che conterranno la<br />

<strong>parte</strong> MSB e LSB del nuovo stato della<br />

porta di Output. Adoperando le<br />

seguenti istruzioni:<br />

IOStatus[2]=(outdata&0xff00)>> 8;<br />

IOStatus[3] = (outdata & 0x00ff) ;<br />

Facciamo in modo che IOStatus [2]<br />

contenga la <strong>parte</strong> MSB del nuovo<br />

stato della porta di Output, il ché si<br />

ottiene eseguendo la seguente operazione<br />

logica sui bit di outdata:<br />

IOStatus[2]= Shift di 8 posizioni verso destra<br />

(outdata AND 11111111|00000000)<br />

Per il secondo caso sarà sufficiente<br />

eseguire solamente la seguente operazione<br />

logica sui bit di outdata:<br />

IOStatus[3]= outdata AND<br />

11111111|00000000<br />

Riempito il buffer che conterrà il<br />

comando da inviare a <strong>RECS</strong> <strong>101</strong>, non<br />

ci rimane che adoperare l’istruzione<br />

sendto per rendere tale comando operativo.<br />

Si ricorda che tale istruzione restituisce<br />

un valore che nel caso sia -1 indica che<br />

l’informazione non è stata trasmessa<br />

correttamente.<br />

Per concludere, l’ultima operazione da<br />

fare è quella di chiudere il socket<br />

mediante la chiamata alla procedura<br />

<strong>TCP</strong>SocketClose.(vedi listato 2)<br />

Per maggiore chiarezza la figura 5<br />

riporta un esempio pratico di quanto<br />

descritto precedentemente, pertanto<br />

si supporrà quanto segue:<br />

• Lo stato della porta di Output di<br />

<strong>RECS</strong> <strong>101</strong> è uguale a<br />

00000000|10001001.<br />

• Si vuole portare a livello logico “alto”<br />

LISTATO 2<br />

//-------------------------------------------<br />

// <strong>RECS</strong> <strong>101</strong>: Esempio di programmazione di<br />

// un interfaccia socket in C<br />

// Procedura SetOutput<br />

// By Intellisystem Technologies<br />

// http://www.intellisystem.it<br />

//-------------------------------------------<br />

void SetOutput ()<br />

{<br />

char commandBuf[3] ;<br />

int commandLen ;<br />

int outbit=0, outdata=0x0000 ;<br />

int err ;<br />

}<br />

// Richiede quale bit si vuole portare a livello logico<br />

// alto della porta di Output<br />

printf(" Prego selezionare il bit della porta d’Output<br />

di cui si vuole invertire lo stato logico “alto”(0-15) :");<br />

scanf("%d", &outbit) ;<br />

// Legge lo stato corrente delle porte di I/O<br />

IOMonitor() ;<br />

// Re-Initializza il Socket <strong>TCP</strong><br />

<strong>TCP</strong>SocketInit() ;<br />

// Determina il nuovo valore della porta d’Output a partire<br />

// dallo stato attuale delle uscite<br />

outdata = ((IOStatus[2]> 8) ;<br />

commandBuf[2] = (BYTE) (outdata & 0x00ff) ;<br />

commandLen = 3 ;<br />

// Invia I comandi a <strong>RECS</strong> <strong>101</strong><br />

err = sendto (sock,&commandBuf,commandLen,0,<br />

(struct sockaddr*)&clientAddr,sizeof(clientAddr)) ;<br />

if (err == -1 )<br />

{<br />

perror("\n Errore nell’invio dei dati !! \n");<br />

exit (1);<br />

}<br />

// Chiude il Socket <strong>TCP</strong><br />

<strong>TCP</strong>SocketClose() ;<br />

AUTOMAZIONE 73

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!