atom feed5 messages in net.php.lists.php-esRe: [PHP-ES] Leer datos de un puerto ...
FromSent OnAttachments
Fernando Herrero PeleteroAug 27, 2004 1:55 pm 
Pablo RivasAug 28, 2004 8:02 am 
Fernando Herrero PeleteroAug 28, 2004 10:39 am 
KekoAug 28, 2004 11:10 am 
Fernando Herrero PeleteroAug 28, 2004 11:37 am 
Subject:Re: [PHP-ES] Leer datos de un puerto serie FUNCIONA!!
From:Fernando Herrero Peletero (fher@noticiasdenavarra.com)
Date:Aug 28, 2004 10:39:35 am
List:net.php.lists.php-es

He conseguido leer datos del puerto serie mediante php en linux:

<? $port_name = '/dev/ttyS0'; $port_attr = array('baud' => 1200, 'bits' => 7, 'stop' => 2, 'parity' => 2);

$protek = dio_open($port_name, O_RDWR | O_NOCTTY | O_NONBLOCK); dio_fcntl($protek, F_SETFL, O_SYNC); dio_tcsetattr($protek, $port_attr);

$i = 0; do { dio_write($protek, ' '); while (($char = dio_read($protek)) != chr(13)) { echo $char; } echo "\n"; sleep(1); } while (++$i < 10); dio_close($protek); ?>

He de comentar que: 0. El código de mi anterior post tenia errores fáciles de detectar pero que lo hacian inútil. 1. El aparato conectado al puerto serie es un polímetro Protek 506 (http://www.hungchang.co.kr/eng/product/tester/dmm/506.html) 2. El "protocolo" de comunicación es muy sencillo: a. Se abre una conexión serie 7s2 (7 bits de datos, sin paridad -space-, 2 bits de stop). b. Se envia al puerto serie un carácter (cualquiera vale, yo suelo utilizar un espacio o un retorno). c. Se leen los datos del puerto serie (un máximo de 15, terminados por un retorno -código 13-). d. Para realizar otra lectura se vuelve al paso b 3. Sólo he probado con éxito en linux (Fedora Core 2 con PHP-4.3.8, aunque recompilé el srpm del php pasandole al php un "--enable-pcntl" (http://www.php.net/manual/en/ref.pcntl.php). Comento el tema del pcntl porque yo lo recompilé con esa opción por otros motivos pero según qué hagamos con las funciones "dio" es necesario tener "activadas" las funciones pcntl (http://www.php.net/manual/en/function.dio-fcntl.php) 4. Aun sabiendo que este código funciona, hay que tener en cuenta que cada dispositivo tiene su propio "protocolo" de comunicación, por lo que habrá que hacer un estudio y pruebas hasta dar con el código funcional en cada caso concreto. El código que muestro sólo ilustra que es posible leer datos de un puerto serie mediante PHP y las funciones a utilizar, no es una receta universal.

Saludos.

PD: Gracias Pablo, aunque sólo haya sido por mostrar interés, eso anima mucho ;-)