Cómo trabajar con la Librería DALI Arduino y un PLC industrial

Librería Arduino IDE y DALI para control industrial
17 de junio de 2020 por
Cómo trabajar con la Librería DALI Arduino y un PLC industrial
Boot & Work Corp. S.L., DAVID SEGOVIA LOPEZ

Introducción

DALI son las siglas de Interfaz de iluminación direccionable digital. Una red DALI consta de un controlador industrial y una o más luces que tienen interfaces DALI. El controlador PLC (maestro DALI) puede monitorizar y controlar cada iluminación mediante un intercambio de datos bidireccional.

La comunicación es a través de un bus de dos cables de bajo voltaje que opera a baja velocidad (1200 bits por segundo). Los niveles de señal se definen como 0±4,5 V para el "0" lógico y 16±6,5 V para el "1" lógico. El estado de reposo del autobús es el "1" lógico. La codificación Manchester se utiliza con cuadros de avance de 16 bits (más inicio y parada) y cuadros de retorno de 8 bits. En la codificación de Manchester, el estado de los bits se define por una transición en el centro de la ventana de bits: transición en marcha positiva = '1', transición en marcha negativa = '0'. El protocolo DALI permite que las luminarias sean dirigidas individualmente. También incorpora mensajes de difusión de Grupo y Escena para dirigirse a múltiples luces simultáneamente. Una sola red DALI puede controlar hasta 64 luminarias.


Cada bit toma dos períodos. La velocidad de bits DALI definida es de 1200 bps. Por lo tanto, un período de 1 bit es de ~834 µseg. Un cuadro se inicia con un bit de inicio y termina con dos bits de parada de alto nivel (sin desplazamiento de fase). Los datos se transmiten primero con el MSB. Entre los cuadros, el bus está en estado de inactividad (alto).


DALI bit rate - How to work with DALI Arduino Library and an industrial PLC
Cómo trabajar con la biblioteca Arduino DALI y un PLC industrial

Requisitos

Para trabajar con la librería DALI Arduino, necesitarás los siguientes elementos:


Software
Arduino-DALI Library implements the DALI communication protocol in the Arduino-based M-Duino-DALIbasados en Arduino.

Inicio

Esta sección muestra los requisitos previos necesarios y la instalación de las placas de Industrial Shields para utilizar esta biblioteca.


Instalación

Pasos para instalar las placas de Industrial Shields en el IDE de Arduino:

    1. Abre el IDE de Arduino, versión 1.8.10 o superior.

    2. Presiona la opción "Preferencias" del menú "Archivo" y abra la ventana de preferencias.

    3. En el cuadro de texto "URLs adicionales del gestor de tableros", añade la dirección:

    http://apps.industrialshields.com/main/arduino/boards/package_industrialshields_index.json

    4. Cierra la ventana de preferencias con el botón "OK".

    5. Haz clic en el menú "Herramientas", abre el submenú "Placas", y haz clic en la opción "Administrador de Placas", para abrir la ventana Administrador de Tablas.

    6. Busca "industrialshields" en el filtro de búsqueda y selecciona en la lista y haz clic en "Instalar". Descargue la versión 1.1.24 o superior.

    7. Cierra el "Administrador de Placas".


Una vez que realizados todos los pasos, puedes seleccionar cada PLC Arduino con el que desees trabajar en "Herramientas" > "Placas".


Librería DALI para Arduino IDE

La librería DALI envía y recibe datos a través de los pines DALI utilizados en los controladores de la familia M-Duino DALI y Ardbox DALI. Consulta el manual de usuario de tu PLC de la familia DALI para ver la ubicación de los pines de transferencia de datos a través de DALI. Nuestra empresa te proporciona dos ejemplos con el propósito de ofrecer una introducción a DALI.

Para trabajar correctamente, debes incluir nuestra biblioteca DALI.h proporcionada en la integración de las placas de Industrial Shields.

#include "DALI.h"


En primer lugar, tienes que introducir el siguiente enunciado para decirle a los controladores de la familia DALI las conexiones internas entre la placa Arduino y el módulo DALI adjunto dentro del PLC Arduino.

DALI dali;


Dentro de la función de setup, debes entrar la función begin() para configurar el hardware. Para el DALI, no es necesario pasar  ningún parámetro.

dali.begin()


Si no has utilizado antes ninguna comunicación DALI o desconoces las direcciones de los drivers, debes inicializar los nodos ya que serán necesarios para una comunicación fiable. La función initNodes() se introducirá después de los enunciados begin. Si solo hay un controlador que configurar, se proporcionará una dirección uint8_t. En este ejemplo, estamos inicializando el nodo 6:

int initNodes(6);


Para controlar dos o más nodos; tendrás que declarar una lista constante de direcciones uint8_t junto con el número máximo de nodos que quieras configurar. Pasarás estos dos parámetros a la función initNodes() como puedes observar en el siguiente ejemplo. Se inicializarán 5 nodos:

const uint8_t addresses[] = { 6, 7, 8, 9, 10 };
const int maxAddresses = sizeof(addresses) / sizeof(uint8_t);

int initNodes(const uint8_t* addresses, uint8_t numAddresses);



Se ha implementado un test configurando 5 drivers e imprimiendo qué dirección le corresponde a cada nodo.

void setup() {
  Serial.begin(9600UL);
  dali.begin();
  Serial.println("Initialize DALI nodes...");
  int numAddresses = dali.initNodes(addresses, maxAddresses);
  Serial.println("Found nodes:");
  for (int i = 0; i < numAddresses; ++i) {
    Serial.print("Node number: ");
    Serial.print(i, DEC);
    Serial.print(", node address: ");
    Serial.println(addresses[i], HEX);
  }
}


Los valores de los nodos DALI se controlan mediante 3 funciones. Se debe pasar una dirección uint8_t a todas ellas, ya que será el nodo afectado. 

void turnOff(uint8_t nodeAddress);
void setMax(uint8_t nodeAddress);
void setValue(uint8_t nodeAddress, uint8_t value);

La función turnoff(), como su nombre indica, apaga las luces conectadas al nodo correspondiente, mientras que la función setMax() las encenderá. En el caso de que se requiera una mayor precisión, al proporcionar el valor exacto a la función setValue(), se puede establecer una intensidad deseada. Este valor va de 0 a 254.

El siguiente código se ha hecho para pruebas. Dentro de la función Arduino Ide loop() aumentaremos los LEDs correspondientes al driver nº. 6 por 10 como máximo cada 5 milisegundos.

void loop() {
  if (millis() - lastStepTime > 5) {
    value += 10;
    if (value > 254) {
      value = 0;
    }
    dali.setValue(6, value);
    lastStepTime = millis();
  }
}

¿Quieres más información sobre aplicaciones DALI con PLC Arduino industriales?

Contacta con nosotros, te ayudaremos.

Buscar en nuestro blog

Cómo trabajar con la Librería DALI Arduino y un PLC industrial
Boot & Work Corp. S.L., DAVID SEGOVIA LOPEZ 17 de junio de 2020
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 >>>