Cargar un sketch a un PLC mediante Ethernet - Paso 2 - Archivo binario

24 de diciembre de 2018 por
Cargar un sketch a un PLC mediante Ethernet - Paso 2 - Archivo binario
Alejandro Jabalquinto

Introducción

En este post veremos cómo tomar el archivo binario de un sketch.ino


Requisitos

Ethernet o 20 I/Os PLC:      Ethernet PLC             20 I/Os PLC     

Placas de Industrial Shields:   Placas de Industrial Shields:   


Descripción

En primer lugar, tenemos que conocer las diferencias entre la carga de un código a través de USB y la carga a través de Ethernet. Cuando se sube un código a una placa Arduino usando el USB, el software Arduino IDE hace automáticamente su magia y transforma el código sketch.ino en un archivo.hex que es el que se sube automáticamente. Si queremos subir un código a través de Ethernet tenemos que hacerlo manualmente. Para empezar, no subimos un archivo .hex como en el USB, ahora es un archivo .bin por lo que la primera parte es conseguir este archivo binario.

Es un proceso diferente para obtener el archivo binario usando Windows que usando Linux, así que este post será separado en estas 2 partes.

1. Parte común. Modificación de una preferencia en el software Arduino IDE.

En el software Arduino IDE vaya a Archivo -> Preferencias. marca la casilla Mostrar salida verbosa durante la compilación *opcional: Cargar (no es necesario).

 Modificación de una preferencia en el software Arduino IDE

2. Verifica tu boceto en el software Arduino IDE.

 Verificar el boceto en el software Arduino IDE

*Ten en cuenta por el momento que quieres cargar un código usando Ethernet tienes que ser hecho un Reset al PLC, si el PLC no ha sido configurado para resetearse automáticamente, tendrá que ser manualmente (presionando físicamente el botón de reset). Aquí se deja el post que explica el código que hay que añadir para hacer un reset remoto. 

COMO RESETEAR UN PLC USANDO EL ETHERNET SHIELD

3. Windows 

Para crear el archivo binario necesitamos saber dónde se encuentra el archivo .hex. Este archivo se crea en una carpeta temporal. En el momento en que se verifica un código teniendo esta marca de Compilación (en Preferencias), podremos ver la ruta.

Dónde se encuentra el archivo .hex

Tenemos que situarnos en las últimas líneas. Después de "Enlazando todo..." la siguiente línea muestra este camino. No se muestra en la primera foto porque es demasiado grande para representarla en una sola foto. En la siguiente foto acabo de mover a la derecha las ventanas negras encontrando la ruta del archivo temporal. (SUGERENCIA: busque /Temp/)

Ventanas negras encontrando la ruta del archivo temporal.

Por defecto, debe guardarse en la carpeta temporal del sistema Windows de su usuario.

Si vas a ese directorio encontrarás algo así en la carpeta temporal:

Carpeta temporal

Como se puede ver he encontrado mi archivo .hex creado después de verificar mi boceto. 

3.1 Abrir CMD

CMD - Cargar un sketch a un PLC mediante Ethernet

Esta es una terminal para insertar comandos que Windows entiende, usaremos esta terminal para enviar un comando que ejecutará una herramienta de Arduino IDE que convertirá el .hex en el .bin. 

Comando que ejecutará una herramienta de Arduino IDE que convertirá el .hex en el .bin.

Si sabes cómo funciona CMD tienes que ir al directorio del archivo .ino.hex que es el que hemos visto antes. Esto se hace usando el comando cd "$ruta" como se muestra en la foto.
Una vez que nos situamos en el directorio correcto necesitamos utilizar este comando para usar la herramienta Arduino IDE que transforma el .hex en .bin. La ruta en el primer camino puede ser ligeramente diferente dependiendo del lenguaje y la arquitectura de tu ordenador (los ordenadores de 32bits tienen \ Archivos de programa (x86)\N-).
 
C:\Program Files\Arduino\hardware\tools\avr\bin\avr-objcopy.exe" -I ihex [sketchname].ino.hex -O binary [sketchname].ino.bin
 
Aquí está el resultado:
 Archivo .bin - Cargar un sketch a un PLC mediante Ethernet
Ahora aparece el archivo .bin
 

 
Linux
 
Para crear el archivo binario necesitamos saber dónde se encuentra el archivo .hex. Este archivo se crea en una carpeta temporal. En el momento en que se verifica un código teniendo este tick de Compilación, podremos ver la ruta.


Tenemos que situarnos en las últimas líneas. Después de "Enlazando todo..." la siguiente línea muestra esta ruta.  (SUGERENCIA: busque /Tmp/)

 Por defecto, debe guardarse en la carpeta temporal del sistema Linux.

 Si vas a ese directorio encontrarás algo así en la carpeta temporal:

carpeta temporal - Cargar un sketch a un PLC mediante Ethernet

Como se puede ver he encontrado mi archivo .hex creado después de verificar mi boceto. 

Una vez que hemos llegado a esta parte tenemos que convertir el archivo .hex en un archivo .bin utilizando la herramienta de Arduino IDE avr-objcopy. Para implementar esta parte necesitamos abrir una terminal y dirigirnos al directorio donde se encuentra el archivo .hex usando el comando cd "path". Una vez que hayamos llegado allí tendremos que utilizar el siguiente comando para implementar la compilación binaria del archivo .hex.

para implementar la compilación binaria del archivo .hex.

avr-objcopy -I ihex [sketch].hex -O binary [sketch].bin


Y aquí está el resultado:

Resultado - Cargar un sketch a un PLC mediante Ethernet

 Ahora aparece el archivo .bin.
 
Entonces se crea el archivo .bin. Este archivo será cargado directamente al PLC usando Ethernet. Para enviar este archivo es necesario utilizar un servidor que pueda comunicarse con el Arduino. En este caso, se utilizará el cliente tftp. Esto se mostrará en la 3ª parte de este post, ¡no te lo pierdas!
 
 

Buscar en nuestro blog

Cargar un sketch a un PLC mediante Ethernet - Paso 2 - Archivo binario
Alejandro Jabalquinto 24 de diciembre de 2018
Compartir

¿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.


Industrial PLC comparison >>>