<< anterior

Lectura de las básculas 'en tiempo real' desde otras aplicaciones (ERP, AS400, Baan, Navision, SAP)

En ocasiones, puede que exista la necesidad de que el ERP que se usa de forma paralela a Tránsito Pesado .NET u otra aplicación externa a Tránsito Pesado .NET, necesite tomar el peso de las básculas. Con dicho peso, el ERP o dichas aplicaciones realizará su gestión particular.

Según el escenario de actuación, a veces no es 'fácil' integrar un 'componente de lectura de básculas', sobre todo en un ERP.

Sin embargo, puede usarse el propio Tránsito Pesado .NET para realizar dicha tarea.

Tránsito Pesado .NET dispone de 3 tipos de "servidores de peso":

¿Que quiere decir que Tránsito Pesado actúa como un "servidor de peso"?

El ejemplo más sencillo de entender es el caso de "servidor de peso vía fichero". En este caso, Tránsito Pesado .NET procesa el peso de la báscula, pero de forma paralela genera un fichero de texto con información del peso, estabilidad y errores de la báscula.

Para un ERP y para en cualquier otra aplicación en general es mucho más cómodo procesar un fichero de texto donde ya se proporciona toda la información necesaria de la báscula que no implementar de forma interna un procesado de la báscula: Gestión de las comunicaciones, gestión de los posibles errores de báscula, gestión de la estabilidad, etc.

Los servidores de peso devuelven la siguiente información:

signo#PESO#ESTABILIDAD#ERRORBASCULA#HH:mm:ss

Nota: En el caso del servidor de peso vía fichero el 'separador' de conceptos es un espacio en blanco (ASCII 0x20) y se añade un CRC al final, que precisamente sirve para verificar que la trama del fichero es correcta:

signo PESO ESTABILIDAD ERRORBASCULA HH:mm:ss CRC

Significado de los datos:

signo: será siempre el carácter + (ASCII 0x2B) para todos los pesos mayores o iguales que cero. Para los pesos negativos el valor de "signo" es el carácter - (ASCII 0x2D)

PESO: será el peso que se visualiza en Tránsito Pesado .NET (y que a su vez es el peso que se procesa de la báscula)

ESTABILIDAD: Valor numérico que indica el valor de la estabilidad del peso de báscula. Los valores pueden ser:

En el caso del servicio WCF la estabilidad tiene estos valores:

 

¿Por qué es importante la estabilidad?. En el ERP / aplicación externa se debería comprobar la estabilidad a la hora de decidir en que momento se toma el peso para su procesamiento interno. Cuando se toma el peso en Tránsito Pesado .NET, éste se "espera" a que el peso sea estable para dar dicho peso por correcto.

ERRORBASCULA: Valores numéricos que indican de los posibles errores en báscula (báscula tarada, báscula en sobrepeso, etc.). El valor de "no hay error en báscula" es 0 y ese debería ser el valor "habitual".

HH:mm:ss valor de la fecha expresada en horas minutos y segundos. En el caso del servidor de peso vía fichero ese código de tiempo sirve para ver "como de antiguo es la información de la báscula de aquel fichero". Será tarea del ERP / aplicación externa dar por bueno o no dicho fichero comparando ese código de tiempo con la hora actual.

CRC (solo en caso de servidor vía fichero): OR exclusivo del valor ASCII de todos los caracteres la trama (incluyendo los espacios en blanco)

 

 Ejemplo de como leer los datos de la báscula con solo 1 línea de código (WCF)

Aunque los servidores de tipo Fichero o UDP son simples de usar a nivel de una aplicación externa, el servidor de tipo WCF es realmente trivial. No será necesario abrir un fichero, leerlo o abrir un socket, gestionar el socket, etc.

Para el ejemplo se ha utilizado Visual Studio 2010, donde se "simula" una aplicación que necesita procesar el peso de báscula.

Nota: Windows Comunication Fundation (WCF) puede usarse a partir de Visual Studio 2005 (mediante http://www.microsoft.com/en-us/download/details.aspx?id=31151). Para Visual Studio 2008 o superiores no es necesario ninguna extensión ya que WCF está integrado en dichos entornos de desarrollo.

Paso previo:

En Tránsito Pesado .NET será necesario establecer que la báscula actúa como servidor de peso. Los datos "importantes" están remarcados con una marca roja: 

WCF

Cuando una báscula actúa como servidor de peso, Tránsito Pesado .NET muestra un "icono verde" debajo del panel de peso. Si situamos el ratón encima de dicho icono se muestra información adicional sobre el servidor de peso:

WCF

 

Leyendo el peso en nuestro ERP / aplicación externa:

En nuestro proyecto de Visual Studio será necesario Agregar una referencia de servicio.

Nota: Para agregar la referencia de servicio Tránsito Pesado .NET debe estar ejecutándose.

Como Dirección se usará la que proporciona Tránsito Pesado .NET y que en este ejemplo en particular es:

net.tcp://direccion_IP_donde_se_está_ejecutando_Transito_Pesado:Puerto_del_servicio_que_se_especificó_en_Transito_Pesado

WCF

Al pulsar en el botón Ir se recupera la referencia de servicio y se muestra los datos del contrato de WCF: 

WCF

La función que devolverá la información sobre la báscula es la función ScaleData(int ID)

Una vez que se ha creado la referencia de servicio, nuestra solución tendrá el siguiente aspecto:

WCF

En este ejemplo, se añadirá un control botón (con nombre btnLeerPeso) y una etiqueta (con nombre lblPeso)

El formulario de pruebas quedaría más o menos así:

WCF

De tal forma que, cuando se pulse en el botón, se mostrará en la etiqueta la información de la báscula.

El código es el siguiente:

C#:

WCF

VB.NET:

WCF

Como se ve, lo único que hay que hacer es instanciar un objeto de la referencia de servicio y luego llamar a la función ScaleData(int ID), a la que se le pasa el ID de la báscula (ID que está configurado en el "servidor de peso" en Tránsito Pesado .NET)

Así por ejemplo, si en Tránsito Pesado .NET hay cero kg y se pulsa en el botón "Leer Peso" ocurre lo siguiente:

WCF

Si en Tránsito Pesado .NET hay un camión que pesa 8720 kg sobre la báscula y se pulsa en el botón "Leer Peso" ocurre lo siguiente:

WCF

Si en Tránsito Pesado .NET hay un camión que pesa 45120 kg sobre la báscula y se pulsa en el botón "Leer Peso" ocurre lo siguiente:

WCF

Como puede verse, una vez que se obtienen los datos de la báscula mediante la función ScaleData(int ID) ya es 'trivial' para el programador del ERP / aplicación externa obtener el peso de báscula, la estabilidad y los posibles errores de báscula y hacer con esos datos lo que quiera en su aplicación.