¡Buenas tardes foro de Slicetex!... en esta oportunidad, subimos un ejemplo de gran utilidad.
DESCRIPCIÓNEl 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.FUNCIONAMIENTOEl 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 RECOMENDADASSe 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.pdfTambié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 DESCARGAEl código fuente de los ejemplos puede ser descargado de los siguientes enlaces:
PRUEBA INCIALCargue 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.