Cómo almacenar el MAC de tu PLC Arduino en el EEPROM (memoria no volátil)
Almacenamiento de datos en el EEPROM (memoria no vol√°til) de tu PLC Arduino
29 octubre, 2019 por
Cómo almacenar el MAC de tu PLC Arduino en el EEPROM (memoria no volátil)
Boot & Work Corp. S.L., Support Team

Index

Introducción

Todos los controladores lógicos programables industriales basados en Arduino tienen 3 tipos diferentes de memorias:

  • Flash: no vol√°til, donde grabamos el sketch (incluyendo el gestor de arranque).

  • SRAM (Memoria est√°tica de acceso aleatorio): vol√°til, donde las variables se almacenan durante su funcionamiento.¬†

  • EEPROM: no vol√°til, que podemos usar para guardar informaci√≥n entre reinicios.¬†

Si almacenamos valores en la memoria¬†flash o SRAM, estos se perderan una vez que el¬† controlador industrial PLC se reinicie, aunque a veces queramos que se mantengan determinados valores entre reinicios. Por ejemplo, identificadores √ļnicos, valores de calibraci√≥n, medidas y fechas o tiempos para hacer dataloggers (registrador de datos), guardar un contador, o saber cu√°l era el estado del procesador cuando se quedo sin energ√≠a, entre muchos otros.¬†

En esta ocasión, guardaremos la dirección MAC en nuestro EEPROM, pero el proceso para guardar cualquier otro tipo de datos en el EEPROM es el mismo.

Memoria EEPROM

                      Requisitos

                      Requisitos de Hardware:  

                      Todos nuestros PLCs Arduino tienen un EEPROM interno, puedes consultar toda la gama de nuestros controladores indsutriales para automatización que te permiten almacenar datos en el the EEPROM:

                      Requisitos de Software: 


                      Características de las memorias en un PLC Arduino

                      • La memoria flash (espacio de programa) es donde se almacena el boceto de Arduino.

                      • SRAM (Memoria est√°tica de acceso aleatorio)¬†es donde el sketch crea y manipula variable cuando se est√° ejecutando.

                      • La EEPROM es un espacio de memoria que los programadores pueden utilizar para almacenar informaci√≥n a largo plazo.

                      FlashLa memoria Flash y la memoria EEPROM son no volátiles (la información persiste después de apagar la alimentación). La memoria SRAM es volátil y se perderá cuando se apague la alimentación.

                      Los tama√Īos de la memoria son diferentes dependiendo del modelo de PLC basado en Arduino que tengas:¬†

                      Para los modelos de la familia Ardbox: 

                       Flash 32k bytes (of which 4k is used for the bootloader)
                       SRAM 2,5k bytes
                       EEPROM 1k byte

                      Para los modelos de la familia M-DuinoM-Duino Family Models:

                       Flash 256k bytes (of which 8k is used for the bootloader)
                       SRAM 8k bytes
                       EEPROM 4k bytes

                      Características principales de la EEPROM

                      La memoria EEPROM tiene sus propias características y peculiaridades que lo diferencian de las otras memorias. Principalmente, tal y como hemos visto antes, no es volátil, por lo tanto mantiene los valores almacenados cuando la energía se termina.

                      Una desventaja de la memoria EEPROM es que es mucho m√°s lenta que la memoria SRAM. El proceso de escribir una celda (byte) cuesta alrededor de 3.3 ms. El proceso de lectura es mucho m√°s r√°pido (aunque sigue siendo m√°s lento que la SRAM), leer 1024 bytes cuesta alrededor de 0.3ms, es decir, 10,000 veces m√°s r√°pido que escribir.

                      Otra peculiaridad de la memoria EEPROM es que tiene una vida limitada, que se reduce con cada operación de escritura. No hay límites para las operaciones de lectura. 

                      Las especificaciones garantizan que cada celda tenga una vida √ļtil de al menos 100,000. Aunque en la pr√°ctica puede ser mucho m√°s alta, incluso hasta un mill√≥n de operaciones, alrededor de¬† 100,000 de ellas no est√°n garantizadas.¬†

                      Cabe mencionar que la memoria¬†EEPROM ha sido dise√Īada para escribir con tiempos prolongados entre cada operaci√≥n, no para hacer un uso constante de ello.¬†

                      El Arduino estándar IDE incorpora una biblioteca  Librería EEPROM.h que contiene las funciones necesarias para manipular la memoria no volátil de Arduino.

                      Las funciones m√°s senzillas son la funci√≥n Leer y la funci√≥n Escribir que, respectivamente, leer y escribir un byte en una direcci√≥n de memoria. La direcci√≥n de memoria puede tener valores de¬†0 a N-1, donde N es el n√ļmero de bytes disponibles (de 0 a 1023 en los modelos de la familia Ardbox y de 0 a 4095 en los modelos de la familia M-Duino).

                      Las siguientes funciones registran un solo byte al EEPROM: 

                      //Reads a unique byte from address "addr"
                      EEPROM.Read(addr);
                      //Writes a unique byte from address "addr"
                      EEPROM.Write(addr);

                      A menudo, necesitaremos guardar variables que sean más grandes que un byte. Para esto tenemos las funciones Put, Get y Update, que son las que utilizaremos con más frecuencia.

                      // Functions for complete variables (takes into account the size of the variable)
                      EEPROM.Put(address, variable)

                      // Read a variable in the address addr
                      EEPROM.Get(address, variable) 

                      //Update the value of a variable, that is, read it first, and only save it if its value is different from the one we are going to save. This favors reducing the number of writes, and extending the useful life of the memory.
                      EEPROM.Update(addr,variable)

                      Ejemplo de programa

                      La dirección MAC aleatoria se genera en el primer arranque. En cada arranque subsiguiente, es decir, después del primero, se volverá a leer desde EEPROM para asegurar de que se mantiene igual.

                      #include <SPI.h>
                      #include <Ethernet.h>
                      #include <EEPROM.h>
                      
                      byte mac[6] = { 0xBA, 0xBE, 0x00, 0x00, 0x00, 0x00 };
                      char macstr[18];
                      
                      void setup() {
                        Serial.begin(9600);
                        // Random MAC address stored in EEPROM
                        if (EEPROM.read(1) == '#') {
                          for (int i = 2; i < 6; i++) {
                            mac[i] = EEPROM.read(i);
                          }
                        } else {
                          randomSeed(analogRead(0));
                          for (int i = 2; i < 6; i++) {
                            mac[i] = random(0, 255);
                            EEPROM.write(i, mac[i]);
                          }
                          EEPROM.write(1, '#');
                        }
                        snprintf(macstr, 18, "%02x:%02x:%02x:%02x:%02x:%02x", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
                      
                        // Start up networking
                        Serial.print("DHCP (");
                        Serial.print(macstr);
                        Serial.print(")...");
                        Ethernet.begin(mac);
                        Serial.print("success: ");
                        Serial.println(Ethernet.localIP());
                      }
                      
                      void loop() {
                      
                      }

                      Encuentra lo que buscas.¬°Busca en nuestro Blog!

                      Cómo almacenar el MAC de tu PLC Arduino en el EEPROM (memoria no volátil)
                      Boot & Work Corp. S.L., Support Team
                      29 octubre, 2019
                      Compartir
                      Archivar

                      ¬ŅEst√°s buscando tu Controlador L√≥gico Programable ideal?

                      Echa un vistazo a esta comparativa de producto de varios controladores industriales basados en Arduino.

                      Comparamos entradas, salidas, comunicaciones y otras especificaciones con las de los equipos de otras marcas destacadas.


                      Comparación PLC industrial >>>

                      ¬ŅQuieres m√°s informaci√≥n?

                      ¬°Rellena el formulario!

                      ¬°Cu√©ntame m√°s!