Ejemplo para leer memoria EEPROM del PLC desde Visual C#

  • 1 Respuestas
  • 306 Vistas

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 1911
  • Soporte Técnico
Ejemplo para leer memoria EEPROM del PLC desde Visual C#
« : febrero 07, 2018, 18:30:58 pm »
¡Buenas tardes foro de Slicetex!... en esta oportunidad, subimos un ejemplo de gran utilidad.

DESCRIPCIÓN

El actual ejemplo permite acceder desde un programa diseñado en Microsoft Visual C# a la memoria EEPROM del PLC y leer sus bytes de datos.

Posteriormente desde el programa en Visual C# puede procesar la información recibida y almacenarla en un archivo, realizar tablas, gráficos en excel, etc.

Este programa requiere un PLC con memoria EEPROM.

FUNCIONAMIENTO

El programa del PLC  llamado "EepromServerPLC" tiene un funcionamiento simple.

A grandes rasgos, activa el evento @OnUdpRx(), el cual será llamado cuando un paquete de datos UDP / IP sea recibido por Ethernet. Es decir, actúa como un servidor esperando una petición a la cual responde.

Cuando el paquete de datos es recibido se lo procesa y se comprueba que sea del tipo RX_TYPE_READ_EEPROM (ver constantes en globals.inc del proyecto PLC). Esto significa, que el primer byte del paquete recibido tenga el valor 0xB0.

Una vez identificado el tipo de paquete, obtiene en otros bytes dentro del mismo paquete la dirección inicial a leer de EEPROM (START_ADDRESS) y la cantidad de bytes solicitados (QUANTITY).

La aplicación en Visual C# se encarga de realizar una petición de este tipo, respetando el formato del paquete.

Luego se llama a la función EepromReadMakeData(), la cual se encarga de leer los bytes desde memoria EEPROM y almacenarlos en un array final, el cual será un paquete con el formato de datos tipo TX_TYPE_EEPROM_DATA (ver constantes en globals.inc) para que luego pueda ser procesado correctamente con la aplicación en Visual C#.

Nota-1: El programa del PLC fue diseñado para aceptar solo una petición de 100 bytes de lectura de memoria EEPROM por petición, por lo que si deben leerse más bytes, la aplicación en Visual C# realizará varias conexiones (peticiones) que no excedan los 100 bytes, hasta completar la lectura completa (por ejemplo para 10000 bytes, realizará 100 peticiones).

Nota-2: El programa del PLC al inicio, guarda valores de prueba en la memoria EEPROM del PLC. Dichos valores podrán ser leídos luego desde la aplicación en Visual C#.

Nota-3: Es importante señalar que la memoria EEPROM almacena bytes, es decir valores que no exceden los 8-bits (números de 0 a 255), por lo que si almacenamos enteros de 32-bits o variables float (decimales), los mismos se componen de 4 bytes, por lo tanto luego desde la aplicación en Visual C# debemos "unilos" nuevamente para poder interpretarlos como un entero de 32-bits o un float de 32-bits. Se recomienda almacenar las variables de 32-bits en direcciones de memoria que sean múltiplos de 4. Vea el código de ejemplo en C#.

APLICACIÓN VISUAL C#

La aplicación llamada "EepromVisualAccess" (con su código fuente) en Visual C# asociada a este ejemplo  se puede descargar desde nuestro sitio web o foro de soporte técnico (al final de este post).

A continuación mostramos una captura de pantalla de la aplicación en Visual C# y los datos recibidos de la memoria EEPROM almacenados en un archivo de texto (ver fondo de imagen).



También la aplicación ofrece guardar los datos de la memoria EEPROM en formato CSV, es decir, valores separados por "coma", así luego puede importarlo desde Excel y realizar tablas o gráficos con los valores (ver siguiente post).

Para utilizar la aplicación, recuerde antes en el código fuente Visual C# configurar la dirección IP y modelo de PLC, en la línea:

PioBoard = new Stx8xxx("192.168.1.81", 0, Stx8xxxId.STX8091)

La aplicación solicita al PLC una cantidad de bytes a leer en memoria EEPROM a partir de una direccion inicial, la cual es configurada en la ventana de la aplicación.

Todo comienza cuando se hace "click" en el botón "Leer EEPROM", el cual ejecuta el evento butReadEeprom_Click() en el código de la aplicación.

El método encargado de realizar la petición de lectura en EEPROM a través de Ethernet UDP/IP es SendReadEeprom().

Como el PLC solo puede responder 100 bytes por petición, este programa se encarga de dividir las peticiones en fragmentos en caso de solicitar más de 100 bytes de datos.

Luego la aplicación llama al método WaitPlcResponse(), el cual espera la respuesta del PLC con los bytes leídos de memoria EEPROM.

Finalmente se llama al método SaveEepromDataToFile() para guardar los datos en un archivo de texto TXT y CSV.

El usuario puede optar por almacenar los datos recibidos en archivos con formato para valor byte, formato para valor 32-bits con signo y formato para valor Float (decimal). Esto es de acuerdo a como se almacenaron los datos en memoria EEPROM, según se explicó con
anterioridad.

Nota-1: Si el programa lo solicita, es probable que le pida acceso al firewall de Windows para recibir la respuesta del PLC, por lo tanto, permitalo.

LECTURAS RECOMENDADAS

Se recomienda leer las funciones del PLC para enviar datos UDP y leer la memoria EEPROM, esto lo puede encontrar en el manual de programación del PLC:

STX80XX-MP-PLC-AX_CX_DX.pdf

También para entender el código en Visual C# puede ser útil leer la nota de aplicación AN001, que explica con dos ejemplos simples como leer, transmitir datos al PLC y usar la librería Slicetex.

LINKS DE DESCARGA

El código fuente de los ejemplos puede ser descargado de los siguientes enlaces:


PRUEBA INCIAL

Cargue el proyecto EepromServerPLC.zip al PLC (antes seleccione su modelo de PLC y compile) con StxLadder.

Luego descargue el proyecto EepromVisualAccess.zip a su computadora, abra el proyecto con Microsoft Visual C#. Configure de acuerdo a como se comentó en los párrafos de arriba la dirección IP y modelo de su PLC.

Ejecute la aplicación C# en modo "DEBUG" y luego haga click en botón "Leer EEPROM".

Si la aplicación en Windows le pide acceso o permiso a su firewall, permitalo.

Si todo sale bien, la aplicación le informará sobre la lectura de EEPROM del PLC. En este punto, puede ver en el directorio de la aplicación un archivo TXT y otro CSV con los valores leídos.

Fin de ensayo.
« Última Modificación: febrero 07, 2018, 19:21:45 pm por Soporte »
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 1911
  • Soporte Técnico
Re:Ejemplo para leer memoria EEPROM del PLC desde Visual C#
« Respuesta #1 : febrero 07, 2018, 18:48:57 pm »
IMPORTAR ARCHIVO CSV A EXCEL

Una vez leída la memoria EEPROM del PLC con la aplicación en Visual C# es posible almacenar los datos en un archivo CSV, que no es más que un archivo de texto que tiene en cada línea campos de datos separado por una coma.

Por ejemplo, supongamos recibir dos bytes de la direcciones 4 y 5 de la memoria EEPROM, con los valores 25 y 30 respectivamente.

En un archivo CSV lo almacenaríamos de la siguiente forma:

4, 25
5, 30


Donde la primera parte corresponde a la dirección y la segunda parte luego de la coma al valor de byte recibido.

Esto en Excel puede importarse especificando que la primera parte sea la columna "dirección" y la segunda parte la columna "valor".

A partir de allí, ya tenemos una tabla y podemos generar un gráfico.

A continuación mostramos en imágenes el procedimiento de importación de un archivo CSV en Excel hasta generar un gráfico con los valores de memoria recibidos.

Click en las imágenes para AMPLIAR:






















« Última Modificación: febrero 07, 2018, 18:52:37 pm por Soporte »
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com