Blog

Puerto Serie II

Puerto Serie II 1En el artículo “Puerto serie I”, describimos nociones generales acerca del nuevo objeto puerto serie y su configuración, por lo que en este artículo trataremos más directamente su programación y uso desde el cliente.
Para las operaciones sobre el puerto, se ha creado un grupo de comandos “Puerto serie” que utilizaremos a través de procesos/eventos. Los posibles comandos son los siguientes: Abrir puerto, cerrar puerto, enviar, recibir, y configurar.
Las operaciones típicas de una aplicación usarán todos estos comandos. A continuación ponemos las capturas de unos eventos enlazados a botones de un formulario que permiten trabajar sobre el dispositivo, y los iremos comentando.

Supongamos la siguiente aplicación:
Aplicación de ejemplo de puerto serie
Los botones de configurar, abrir y cerrar estarían asociados a procesos muy simples, que no necesitan comentarios.
Proceso para abrir un puerto serie:
Proceso para abrir el puerto serie
Proceso para lanzar la configuración de un puerto serie:
Proceso para lanzar la configuración del puerto serie
El siguiente proceso es el asociado al botón enviar:
Proceso para enviar/recibir información del puerto serie
Vemos que en el proceso existen 2 variables, VAR_INPUT y VAR_OUTPUT. La primera está asociada al edit superior, y contiene el texto que deseamos enviar al dispositivo. La segunda almacenará la respuesta y está asignada al edit inferior, de modo que en nuestra aplicación podremos visualizar la respuesta que nos haya llegado.
En la primera linea del proceso enviamos VAR_INPUT y añadimos un retorno de carro porque el dispositivo que hemos conectado al puerto serie para esta prueba, así lo requiere. En caso de que exista un problema de configuración con el puerto, o si este no fue abierto previamente, devolverá BOK_ENVIANDO a cero, y podremos tratar el error como deseemos, en nuestro caso simplemente mostramos un mensaje de error.
Una vez enviado el texto, lanzamos una operación de “Puerto serie: Recibir” para leer la respuesta. Es importante tener en cuenta que esta operación se ejecuta de forma sincrona, es decir, bloqueante, y se quedará esperando el tiempo que se haya marcado en el parámetro Timeout en la configuración del puerto serie. Al igual que el comando enviar, dispone de un retorno booleano que nos indicará si la operación de recibir se ha realizado correctamente.
El resultado se guarda en la variable VAR_OUPUT que se visualizará en el edit.
Remarcamos otra vez (ya se comentó en el artículo Puerto serie I), la importancia de poder reconfigurar el puerto serie en tiempo de ejecución invocando el comando “Puerto serie: Configurar”, sin necesidad de editar la aplicación.
Utilización de adaptadores USB-Serie
Un problema que podemos encontrarnos con el puerto serie en estos tiempos, es que nos conectemos a través de un adaptador USB-Serie, ¿como haríamos esto?. Los dispositivos USB-Serie instalan un driver para hacer transparente el hecho de que tenga interface USB. La problemática para los distintos sistemas operativos sería la siguiente:
– Microsoft Windows: estos adaptadores crean un nuevo puerto COMx (COM3 por ejemplo), de modo que bastará con seleccionarlo en la configuración del puerto serie desde v7.
– Mac OS: lo habitual es que cree un nuevo dispositivo de entrada/salida, por ejemplo podría ser «/dev/tty.usbserialport», pero como vemos, este nombre no está listado como posible opción de los puertos POSIX. En este caso recomendamos redirigir el dispositivo instalado al estandar «/dev/ttys0» mediante el comando «sudo ln -fsv /dev/tty.usbserialport /dev/ttys0». De modo que en la configuración de v7 debemos seleccionar «/dev/ttys0» para acceder.
– Linux: la problemática es idéntica a Mac OS, con la única diferencia es que el puerto estandar suele tener la «S» mayúscula (/dev/ttyS0), y en el comando «ln» puede variar ligeramente algún parámetro. Para este caso el comando a lanzar sería por ejemplo «sudo ln -bfs /dev/tty.usbserialport /dev/ttyS0»