W&T conecta
Interfaces para TCP/IP, Ethernet, RS-232, RS-485, USB, 20mA, fibra óptica de vidrio y de plástico, http, SNMP, OPC, Modbus TCP, I/O digital, I/O analógico, ISA, PCI

Aplicación:

Protocolizar datos seriales en la base de datos SQLite


motherbox php data request

El ejemplo presentado aquí ilustra las siguientes características funcionales de pure.box 2:

  • Ejecución de un script PHP en la recepción de datos en un puerto TCP.
  • Lectura de los datos recibidos a través de una entrada estándar.
  • Archivación de la información leída en una base de datos SQLite interna.

Planteamiento

Una empresa tiene varias rampas de carga en las que se efectúa la carga de paquetes en camiones para los envíos. Antes de ser cargados los paquetes, un operario tiene que leer los códigos de barras con un escáner manual. Esos códigos escaneados tienen que ser guardados a continuación, con sello de tiempo, en una base de datos central.

El escáner manual utilizado dispone de una interfaz RS232 con la que será conectado a un servidor COM de W&T. Los códigos de barras escaneados son enviados por el servidor COM a través de la red hasta la pure.box2, que lee los datos recibidos y los guarda en una base de datos SQLite. Luego esa base de datos puede ser leída por otros programas con la clásica sintaxis SQL.

El archivo PHP necesario para realizar este ejemplo save_data.php puede ser descargado aquí. En la carpeta encontrará además el archivo show_data.php, que al entrar en el navegador abre la base, lee los datos y los representa en forma de tablas.

Configuración del servidor COM

Para que el servidor COM utilizado pueda enviar los datos escaneados manualmente a la pure.box por la red son necesarios los siguientes pasos de configuración:

  • La configuración serial (velocidad en baudios, procedimiento Handshake, paridad, etc.) debe ser definida en la configuración del servidor COM en el escáner manual.
  • El servidor COM tiene que ser cambiado al modo TCP, que permite el reenvío de datos recibidos serialmente a una dirección IP predefinida y un número de puerto (aquí: puerto 8000) de la pure.box.

Configuración de pure.box2

Guarde el archivo save_data.php vía FTP o bien a través del recurso compartido SMB en la carpeta programs de la pure.box2, el archivo show_data.php en la carpeta websites. A continuación son necesarios los siguientes pasos de configuración:

  • Entre en la página de inicio de pure.box2 introduciendo la dirección IP en el campo de dirección de su navegador.
    Página Web de Motherbox
  • Seleccione Registrar en los menús y regístrese a través de la ventana de diálogo abierta con su contraseña.
    Ventana de login de Motherbox
  • Navegue por la página Home >> Configuración >> Mis documentos. Dentro del listado general de archivos pulse en la carpeta programs. El archivo save_data.php está ahora visible.
    Navegador de archivos Motherbox
  • Un clic sobre el icono Editar propiedades de archivos (arriba a la izquierda save_data.php) abre la ventana de editar.
    Editar propiedades de archivos
  • Active la opción Control sucesos. Seleccione TCP y cambie el Port a 8000. Confirme los cambios con Guardar...¡Listo!
    Control de sucesos

Ahora, cuando se envíe datos del escáner manual a través del servidor COM al puerto TCP 8000 de la pure.box2 se activa el script save_data.php El script lee los datos recibidos, les aplica un sello de tiempo y los guarda en una base de datos SQLite en la pure.box. En general se debe prestar atención a que la ejecución del intérprete de PHP finalice automáticamente al cabo de dos minutos. Por tanto la acción programada debería ser ejecutable en el tiempo más breve.

Texto fuente

En las primeras líneas se abre la entrada estándar para la lectura de los datos.

$in = fopen('php://stdin', 'r');

En un bucle tiene lugar la lectura de los datos entrantes por caracteres, añadiéndose las variables de la cadena $input. Del bucle se sale cuando se detecta un cambio de línea (Line Feed, tabla ASCII: 10).


						$input = '';
						do
						{
						$input .= fread($in, 1);
						}
						while(substr($input, -1, 1) != chr(10));
				

A continuación se cierra de nuevo la entrada estándar.

fclose($in);

Para poder guardar los datos leídos en la base de datos es necesario crear primero un objeto de base de datos con acceso de escritura, aquí: $db. Si aún no existe la base de datos, por ejemplo cuando se activa el script por primera vez, será necesario crear la tabla received con las dos columnas, time para el sello de tiempo y data para los datos recibidos.


						$db = new PDO('sqlite:../data.sqlite');
						$db -> exec('CREATE TABLE IF NOT EXISTS received (time INTEGER, data TEXT)');

Mediante el uso de un comando SQL-INSERT se amplía la tabla received con una nueva entrada. En la columna time se escribe la hora actual en formato UTC, data contiene el texto recibido. A continuación se cierra de nuevo la base de datos.


						$db -> exec('INSERT INTO received (time, data) VALUES (' . time() . ', "' . $input . '")');
						$db = null;

Con ello el script PHP queda completamente cerrado y se sale de él. Se reinicia cuando se reciben datos de nuevo, ejecutándose como se ha descrito más arriba.

Si ha copiado previamente el archivo show_data.php en la subcarpeta websites podrá acceder a ella con el siguiente URL en su navegador.

http://<IP-Adresse>/websites/show_data.php

La página extrae de la base los datos recibidos hasta el momento y los representa en forma de tablas.

Lectura de la base de datos

Resumen

Con la pure.box2 pueden realizarse aplicaciones de servidor sencillas tan solo conociendo el PHP. La función de servidor ya es parte integrante de la box. Solo falta programar la acción a ejecutar al recibir los datos.