[LUGargano] apache2 +PHP 5 + porta seriale RS232

Marco Baldinetti marcobaldinetti@tele2.it
Ven 9 Maggio 2008 17:20:51 CEST


Matteo Fasanella ha scritto:
> Marco Baldinetti ha scritto:
>   
>> Matteo Fasanella ha scritto:
>>   
>>     
>>> Marco Baldinetti ha scritto:
>>>   
>>>     
>>>       
>>>> Matteo Fasanella ha scritto:
>>>>   
>>>>     
>>>>       
>>>>         
>>>>> Marco Baldinetti ha scritto:
>>>>>   
>>>>>     
>>>>>       
>>>>>         
>>>>>           
>>>>>> Matteo Fasanella ha scritto:
>>>>>>   
>>>>>>     
>>>>>>       
>>>>>>         
>>>>>>           
>>>>>>             
>>>>>>> Marco Baldinetti ha scritto:
>>>>>>>   
>>>>>>>     
>>>>>>>       
>>>>>>>         
>>>>>>>           
>>>>>>>             
>>>>>>>               
>>>>>>>> ciao a tutti,
>>>>>>>>
>>>>>>>> ho installato sulla mia gentoo un web server con apache2 e php.
>>>>>>>>
>>>>>>>> Il mio scopo è quello di poter effettuare operazioni di input/output 
>>>>>>>> sulla porta seriale del web server tramite il browser di un qualsiasi 
>>>>>>>> client della mia rete lan.
>>>>>>>>
>>>>>>>> per scrivere utilizzo il seguente metodo e tutto funziona alla grande:
>>>>>>>>
>>>>>>>> <?php
>>>>>>>>     $filename = "/dev/ttyS0";
>>>>>>>>     $fd = fopen($filename, "r+");
>>>>>>>>     
>>>>>>>>     fwrite ($fd, "stringa da scrivere");
>>>>>>>>     
>>>>>>>>     fclose($fd);
>>>>>>>> ?>
>>>>>>>>
>>>>>>>> il problema risiede nella lettura, che con il seguente metodo non riesco 
>>>>>>>> ad eseguire:
>>>>>>>>
>>>>>>>> <?php
>>>>>>>>     $filename = "/dev/ttyS0";
>>>>>>>>     $fd = fopen($filename, "r");
>>>>>>>>    
>>>>>>>>     $contents = fread ($fd, 1);
>>>>>>>>     echo $contents;
>>>>>>>>    
>>>>>>>>     fclose($fd);
>>>>>>>> ?>
>>>>>>>>
>>>>>>>>
>>>>>>>> qualcuno ha qualche idea a riguardo??
>>>>>>>>   
>>>>>>>>     
>>>>>>>>       
>>>>>>>>         
>>>>>>>>           
>>>>>>>>             
>>>>>>>>               
>>>>>>>>                 
>>>>>>> Semplicemente lettura e scrittura non sono sincronizzate...
>>>>>>> ...ovvero _quando scrivi_, non c'e` nessuno dall'altra parte in 
>>>>>>> ascolto...  :-)
>>>>>>>
>>>>>>>
>>>>>>>           Matteo
>>>>>>>
>>>>>>>   
>>>>>>>     
>>>>>>>       
>>>>>>>         
>>>>>>>           
>>>>>>>             
>>>>>>>               
>>>>>>>> grazie!!!
>>>>>>>>
>>>>>>>> ciao ciao :-)
>>>>>>>>
>>>>>>>> Marco
>>>>>>>>
>>>>>>>>   
>>>>>>>>     
>>>>>>>>       
>>>>>>>>         
>>>>>>>>           
>>>>>>>>             
>>>>>>>>               
>>>>>>>>                 
>>>>>>>   
>>>>>>>     
>>>>>>>       
>>>>>>>         
>>>>>>>           
>>>>>>>             
>>>>>>>               
>>>>>> ci avevo pensato ma pensavo che una volta che trasmettevo i dati 
>>>>>> andassero in un buffer che poi lo si svuotava in lettura...
>>>>>>     
>>>>>>       
>>>>>>         
>>>>>>           
>>>>>>             
>>>>> il device si puo` bufferizzare per una questione di performance... ma 
>>>>> prima devi inizializzare il device e cmq non ha molto senso essendo una 
>>>>> porta _seriale_.... :-)
>>>>>
>>>>>   
>>>>>     
>>>>>       
>>>>>         
>>>>>           
>>>>>>  magari 
>>>>>> domani faccio un po' di prove...
>>>>>>
>>>>>> grazie!  :-)
>>>>>>
>>>>>> p.s. tutto bene da quelle parti? se tutto va come previsto dovrei 
>>>>>> salirci a settembre/ottobre per frequentare ingegneria 
>>>>>> dell'automazione... :-)
>>>>>>   
>>>>>>     
>>>>>>       
>>>>>>         
>>>>>>           
>>>>>>             
>>>>> Vieni a fare ingegneria qui a Bologna ?
>>>>>
>>>>> Complimenti per l'ottima scelta! :-)
>>>>>
>>>>> ...buoni docenti e bella citta`.... :-)
>>>>>
>>>>>
>>>>>           Matteo
>>>>>
>>>>>   
>>>>>     
>>>>>       
>>>>>         
>>>>>           
>>>>>> ciao ciao
>>>>>>
>>>>>> Marco
>>>>>>   
>>>>>>     
>>>>>>       
>>>>>>         
>>>>>>           
>>>>>>             
>>>>>   
>>>>>     
>>>>>       
>>>>>         
>>>>>           
>>>> e per risolvere la questione del sincronismo come si potrebbe fare?
>>>>
>>>> avevo pensato di leggere di continuo la porta ed aspettare che arrivi 
>>>> qualcosa ma la funzione fread non termina se appunto non legge niente e 
>>>> nonostante i dati arrivino, non riesce a leggere niente.
>>>>
>>>> non ne sto venendo a capo... qualche idea in merito?
>>>>   
>>>>     
>>>>       
>>>>         
>>> forse non ho ben capito come hai implementato il tutto, ma mi pare di 
>>> capire che la parte in ascolto tu non la metti proprio in esecuzione... 
>>> o sbaglio ?
>>>
>>>   
>>>     
>>>       
>>>> x matteo: si vengo a Bologna a fare ingegneria! :-)
>>>>   
>>>>     
>>>>       
>>>>         
>>> Ancora complimenti per l'ottima scelta! :-)
>>>
>>>              Matteo
>>>
>>>   
>>>     
>>>       
>>>> ciao ciao
>>>>
>>>> Marco
>>>>
>>>>
>>>>   
>>>>     
>>>>       
>>>>         
>>>   
>>>     
>>>       
>> la parte in ascolto (che ho postato qualche email fa) la mando in 
>> esecuzione ma è come se andasse in loop non terminando mai, nonostante 
>> sulla seriale siano presenti dati.
>>   
>>     
> il codice che avevi postato e` questo:
>
> <?php
>      $filename = "/dev/ttyS0";
>      $fd = fopen($filename, "r");
>     
>      $contents = fread ($fd, 1);
>      echo $contents;
>     
>      fclose($fd);
> ?>
>
> ma non hai scritto _come_ lo mandi in esecuzione...  come fai ?
>
> ...cmq una volta in esecuzione, fa una sola lettura ed esce...  dovresti 
> looparlo sulla lettura...
>
>              Matteo
>
>   
>> p.s. ci vediamo a Bologna! :-)
>>
>> ciao ciao
>>
>> Marco
>>   
>>     
>
>   
lo mando in esecuzione esattamente così com'è scritto... creo una pagina 
con estenzione .php, copio il codice dentro, copio la pagina .php nella 
cartella root di apache apro mozilla e chiamo la pagina .php .

il problema è che l'esecuzione singola di quello script (senza looparlo 
sulla lettura) termina dopo 30 secondi per timeout. Ho provato a 
mandarlo in loop ma non funziona...

per ora ho risolto in modo brutale richiamando : $stread = exec ('dd 
bs=1 count=1 if=/dev/ttyS0 2> /dev/null');

grazie..

ciao ciao

Marco


Maggiori informazioni sulla lista LUGargano