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
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