2012-07-27 18 views
5

Ho provato a giocare con l'accesso a una porta seriale con PHP, ma non ho avuto molta fortuna.Accesso alla porta seriale via php

Ho provato a utilizzare fsockopen, fopen, proc_open, ecc. Non riesco a leggere o scrivere sulla presa.

Esempio:

$fp = fopen("/dev/ttyUSB0", "w+"); 
fwrite("enable"); 
echo fread($fp, 1024); 
+1

fa l'utente esegue lo script avere permanenti di scrittura su quel dispositivo? 'ls -l/dev/ttyUSB0' –

+0

Se installi un pacchetto UUCP,' cu/dev/ttyUSB0' o 'tip/dev/ttyUSB0' funziona come previsto? ('screen' può anche fare cose seriali, se non hai un facile accesso a UUCP ...) – sarnold

+1

Non ho mai avuto accesso a una porta seriale in php, ma non dovresti impostare il baud, la parità, le interruzioni, ecc. in qualche modo? – hackattack

risposta

3

Ho eseguito in questo molte volte in passato. Una volta stava creando un'interfaccia di gestione per un Cisco 2811. Questo potrebbe funzionare per il tuo, anche se non sono sicuro della tua versione IOS (supponendo Cisco a causa della tua console fwrite();).

Verificare se l'utente ha accesso prima al dispositivo. Facilmente, questo può essere fatto con screen /dev/ttyUSB0. Esegui i tuoi comandi, per staccare, premere ctrl+a quindi d.

I più comunemente uso la famiglia stream_* per qualcosa di simile.

Ecco un esempio:

$stream = stream_socket_client("udg:///dev/ttyUSB0", $errno, $errstr, 30); 
fwrite($stream, "enable"); 

while(true){ 
    $line = stream_get_contents($stream); 
    if($line == 'exit'){ 
     break; 
    } 
} 

Per impostazione predefinita, stream_socket_client si avvia in modalità di blocco, quindi non c'è bisogno di manualmente ginocchiera esso.

Un'altra cosa che puoi fare se non ti dispiace installare un'estensione è l'estensione DirectIO. Possiede funzioni che ti consentono di impostare la velocità di trasmissione e tutte le funzioni, example here.

Si può anche dare un'occhiata a questo progetto: http://code.google.com/p/php-serial/source/browse/trunk/

+0

DirectIO è la strada che prenderò. Grazie! –

Problemi correlati