Skip to main content

📈FB comunicación variadores por SDO ➡️ FB_SDO_Variadores

📘 Planteamiento detrás de la FB

El objetivo principal de la creación de esta Función Bloque (FB) es permitir la comunicación de velocidades desde la pantalla HMI hacia los variadores, a través de un PLC de la serie NX y utilizando el método SDO.

Este bloque de función ha sido diseñado para ser totalmente reutilizable, pudiendo implementarse en cualquier proyecto y adaptarse a un número indefinido de variadores, siempre que el PLC tenga capacidad de comunicación con ellos.


⚙️ Desarrollo y pruebas

Para el desarrollo y validación del bloque, se realizaron pruebas con los siguientes elementos:

  • Controlador: NX102

  • Comunicación: EtherCAT

  • Variadores: 4 unidades MX2 con tarjeta opcional instalada

  • Configuración: parámetros ajustados según la documentación técnica

Además, se utilizó la función EC_CoESDOWrite (descrita en el documento  Manual FB SO_Write (1).SO_Write.pdf) para gestionar la escritura de los valores mediante SDO. Si al ejecutar el bloque de función tenemos un error, podemos ayudarnos del siguiente documento el cual describe los posibles errores al ejecutar la FB SDO_ABORT_CODES.pdf


🧩 Resultado

El resultado es una FB flexible y escalable, capaz de integrarse fácilmente en distintas aplicaciones, simplificando la comunicación de datos entre la HMI, el PLC y los variadores MX2 a través de EtherCAT.

ℹ️ Introducción de la FB

Para realizar la comunicación por SDO se utiliza una función de Sysmac studio llamada EC_CoESDOWrite. 

image.png

✏️ Objeto Ethercat A020

Para configurar bien esta instrucción debemos crear una variable de tipo SdoObj en la cual se define el objeto Ethercat a comunicar, este objeto lo sacamos del Manual de comunicaciones de Ethercat del variador MX2.

Para escribir en el canal A020 el cual es el canal para la multi-velocidad 0 debemos configurar el objeto Ethercat de la siguiente manera:

// PARAMETRO A020 -> ES EL REGISTRO 1216 HEX Y EL INDICE 4012 hex y SUBINDICE 3B
OBJ_SDO_A020.Index:= UINT#16#4012;
OBJ_SDO_A020.Subindex:= USINT#16#3B;
//TAMAÑO DE DATOS 32 BITS
WteSize:=UINT#4;

Tal y como se describe en dicho Manual de comunicaciones Ethercat. apartado A-4 MX2 Series Parameter List:

image.pngimage.png

El tamaño de datos es muy importante configurarlo adecuadamente ya que de lo contrario no funcionaría.

ℹ️ Explicación función EC_CoESDOWrite y lógica de la FB general

También es muy importante introducir correctamente el tipo de datos en el parámetro WriteDat según el tipo de datos que vayamos a leer. En nuestro caso, el parámetro WriteDat va a venir de desde un array de velocidades de tipo UDINT. ( VelocidadVariadores[])

image.png

Tal y como se puede apreciar en la línea de programa, se configura el bloque con un array (VelocidadVariadores[] )  y un índice iNodoSDO, este índice se va recorriendo desde el 1 hasta el número máximo de variadores a comunicar, tiene una lógica añadida la cual nos permite avanzar la comunicación aunque uno de los variadores no esté en conectado a la red en ese momento, gracias a esto, permitimos una comunicación mucho más rápida y sin interrupciones.

En este caso se comunican 52 Variadores, una vez que se ha completado la instrucción, doneSDO, se incrementa el numero del índice a comunicar el cual se utiliza tanto para el NodeAdr como el array de velocidad a comunicar.

image.png

Una vez completado, se vuelve a realizar la comunicación, 1 ms más tarde. Esto nos brinda rapidez a la hora de comunicar con muchos nodos como es este caso.

image.png

En este apartado se gestionan alarmas para que el usuario sepa que variadores no están comunicando y cuales si, además nos indicará si ha tenido un fallo en la ejecución de la FB.

⚙️Configuración de la FB

Una vez explicado el funcionamiento, hay que definir el bloque de función en el programa, el cual se presenta de la siguiente manera y requiere ciertas entradas y salidas.

image.png

Tal y como vemos, para activar la ejecución de la FB tenemos que alimentar el IN con un contacto o siempre que esté el PLC encendido. si en algún momento queremos pausar la comunicación, debemos de poner a TRUE el bit StopSDO del FB, esto, detendrá la comunicación en el nodo que esté comunicando en ese momento.

En el parámetro VelocidadVariadores, tenemos que introducir un array de longitud el mismo numero de variadores que vamos a comunicar, en este caso, el tipo de datos es UDINT tal y como se ha explicado en la descripción del objeto.

La velocidad es un número entero, por lo tanto, si deseamos poner 42,10 hz  deberemos poner el valor 4210 en la velocidad de ese variador.

En el siguiente parámetro, NodosAComunicar, introducimos un valor fijo. La entrada de bResetSDO, sirve para resetear fallos en la ejecución de la instrucción.

En las salidas tenemos el bErrorSDOVariadores, el cual también es un array de BOOL del mismo tamaño que variadores se vayan a comunicar.

Parámetros a configurar en el variador.

Configurar el parámetro A001 ➡️ 2  (referencia de frecuencia desde multi-velocidad A020).

El parámetro A002 ➡️* 1 Depende de la configuración pero en este caso se utilizaron entradas digitales.

Si deseamos que el valor se mantenga aunque se produzca un fallo de tensión o la comunicación se interrumpa por un periodo largo de tiempo, debemos configurar los siguientes parámetros: C101 ➡️ 1 y C104 >➡️1 . Estos parámetros se encargan de la retención de frecuencia aunque se quede sin alimentación el variador. Guardan el valor en la EEPROM y lo leen en el primer arranque.