[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