Skip to main content

Ejemplo: Primeros pasos

Producto: CODESYS Application Composer

Este ejemplo muestra cómo comenzar a crear y usar módulos para el CODESYS Application Composer Para ello, crearás una habitación con luces e interruptores.

Descripción

En el ejemplo, se implementa un breve escenario de automatización de edificios: equipar una habitación con luces y sus interruptores correspondientes. Los interruptores también pueden usarse como reguladores de intensidad. Por lo tanto, las luces también deben admitir diferentes niveles de brillo.

  1. Trabajo preparatorio

    Crear uno nuevo CODESYS proyecto de la Proyecto estándar con Application Composer plantilla. Seleccionar AC_ModuleBase como la biblioteca.

    _ex_ac_img_first_steps1.png
  2. El módulo de nivel superior Room

    Agregue una nueva declaración de módulo al grupo de POU del proyecto. Asígnele el nombre. Room a la declaración del módulo y al bloque de función asociado. El bloque de función también debe extender el AC.Module bloque de función que se define en el AC_ModuleBase Biblioteca. La AC.Module El bloque de funciones ya proporciona numerosos métodos y propiedades que no es necesario sobrescribir.

    _ex_ac_img_first_steps2.png

    La declaración comienza con la palabra clave MODULE seguido del nombre del módulo y la palabra clave adicional IMPLEMENTED_BY, así como por el bloque de funciones que implementa el módulo. En concreto, este bloque de funciones es el Room bloque de función que se acaba de crear. En la mayoría de los casos, el MetaData La sección está declarada ahora.

    Para obtener información detallada sobre todos los parámetros y secciones, consulte: Editor de módulos.

    Porque el Room módulo es el módulo de nivel superior en nuestro ejemplo, declara el Toplevel Sección siguiente. En esta sección, se define un nombre para la lista de variables globales que contiene el nombre de la instancia del bloque de función de nivel superior una vez generado. Después, aún se debe definir al menos una tarea más en la Toplevel Sección. Esta tarea es Standard_Task En este ejemplo, se define como un MEDIUM tarea y contiene el CREATE_IF_MISSING y UPDATE_IOS banderas.

    _ex_ac_img_first_steps3.png

    Todos los íconos y cadenas que se utilizan como marcadores de posición para las descripciones e íconos (Desc, Icon_16, y Icon_32 Los parámetros deben estar referenciados en las listas de texto y los grupos de imágenes. Por ello, se crea una lista de texto correspondiente. TL y un fondo de imágenes IP en el grupo POU que contiene los íconos y textos referenciados.

  3. Submódulo: Switch

    Cree una declaración de módulo y un bloque de función correspondiente llamado Switch Este módulo no es un módulo de nivel superior y, por lo tanto, no requiere un Toplevel sección. Como todos los bloques de función que representan módulos, el Switch El bloque de función también debe extenderse AC.modules. Además, Switch implementa el ISwitch interfaz que también necesitas crear. A su vez, el ISwitch la interfaz se extiende AC.IModule pero no le agrega ningún método o propiedad nueva.

    Además, el interruptor requiere una señal de entrada para reconocer cuándo se presiona. Esta señal se declara en el IO sección, utilizando el xIn variable de entrada de la Switch Bloque de funciones. Además, se necesita un tiempo de referencia para distinguir las dos funciones del interruptor: pulsar el interruptor durante el tiempo indicado. tTimer Inicia la función de atenuación: una pulsación breve solo enciende o apaga la luz. Define la variable de entrada. tTimer como parámetro del módulo (Parameters Sección). De esta manera, podrá configurar fácilmente la hora más tarde al utilizar los módulos.

    Tú defines las variables xIn y tTimer como entradas de la Switch bloque de función, donde se establece un valor inicial de 500 ms para el tTimer parámetro.

    _ex_ac_img_first_steps4.png

    También es necesario ampliar la lista de texto y el grupo de imágenes para poder mostrar las descripciones.

  4. Submódulo: SwitchSimple

    El segundo módulo de interruptor que crea es un interruptor simple con solo dos estados: encendido y apagado. Para ello, necesita crear una declaración de módulo y un bloque de función que difieren del interruptor existente solo en los siguientes puntos: el parámetro y el tTimer Las variables no son obligatorias. Además, no se implementan. ISwitch pero ISwitchSimple, que también se extiende AC.IModule.

    _ex_ac_img_first_steps5.png
  5. Submódulo: Light

    Al igual que antes para los interruptores, para la luz también es necesario crear una declaración de módulo. Light con el Light bloque de función y ILight interfaz.

    Para insertar el Light módulo debajo de una habitación, es necesario agregar el Slots sección a la Light Declaración del módulo. En esta sección, se declara una subsección. Slot_Multi, a lo que llamas Lights y que puede albergar los módulos de tipo ILight La cantidad de luces que se deben o pueden agregar a una habitación se especifica mediante Cardinality También defines las variables Variable y Var_Count y vincularlos a la declaración del módulo pLights(POINTER TO ILight) y uiNumberOfLights (UINT). Esto garantiza que solo los módulos cuyos bloques de función implementan la ILight Se puede añadir una interfaz a la Lights ranura.

    _ex_ac_img_first_steps6.png

    Con el Light módulo, también se define una ranura donde se puede insertar un interruptor. Por lo tanto, es necesario agregar un Switch ranura para el Light Declaración del módulo. Parámetros adicionales del Light módulo son la velocidad del regulador rSpeed y el brillo máximo uiMaxValue Finalmente, debe definir una salida que represente el brillo de la luz. Debe agregar todos los parámetros, ranuras y salidas, así como las variables para la Light bloque de función.

    _ex_ac_img_first_steps7.png
  6. Submódulo: LightSimple

    El último módulo que creas es una luz simplificada que funciona con un interruptor simple. Para ello, necesitas una declaración de módulo y un LightSimple bloque de función que se extiende AC.Module e implementa lo existente ILight interfaz. Las diferencias con la Light Los módulos son los siguientes: la salida debe ser del tipo BOOL y tener el nombre xSwitchedOn. Además, el rSpeed El parámetro no es obligatorio.

    _ex_ac_img_first_steps8.png
  7. Implementación

    Para la implementación de la función para la Switch módulo, utilice el CallPrioMediumStart método de AC.Module y anularla con su propia implementación. Esta función está seleccionada porque Room El módulo de nivel superior declara un MEDIUM tarea. Esto significa que la CallPrioMediumStart método de la Switch El bloque de función se llama automáticamente en cada ciclo de la tarea. Sin embargo, la característica principal del interruptor es la diferenciación entre encendido/apagado y atenuación. Tras pulsar el interruptor, se inicia un temporizador con un tiempo preestablecido por el usuario. Cuando transcurre el tiempo y el interruptor sigue pulsado, se aplica la función de atenuación, representada por la variable xPushLong. La variable xPush Es VERDADERO cuando el interruptor se presiona solo por un corto tiempo. Para ambas variables xPushLong y xPush, las propiedades se agregan tanto en el Switch bloque de función y la interfaz para que puedan usarse desde el bloque de función de luz padre.

    También el Light El bloque de función anula el CallPrioMediumStart Método. Según el valor de las variables de entrada, la luz se atenúa o simplemente se enciende/apaga. Para el regulador, el valor de velocidad del parámetro declarado... rSpeed Se utiliza. Tras alcanzar el valor de atenuación máximo o mínimo, la atenuación se detiene. Si la luz está atenuada y se pulsa el interruptor, se enciende.

    Puedes ver una posible implementación en el proyecto de muestra.

  8. Ingeniería

    Crea el árbol de módulos en el Módulos vista. Para ello, primero agregue el Room módulo de nivel superior al árbol de módulos después de que se hayan importado los módulos. En el Lights ranura, añadir uno Light y uno LightSimple. A cada uno de ellos, asígnele un Switch o una SwitchSimple A continuación, puede configurar los parámetros y las E/S de las instancias del módulo. Para realizar pruebas, se recomienda vincular las entradas y salidas a variables de una lista global de variables.

    Por último, utilice el CompositorCrear Comando para crear el proyecto. Tras descargarlo a un dispositivo, puedes probar el ejemplo como quieras. También puedes modificar la distribución de la sala sin necesidad de modificar el código ni los módulos. También puedes modificar los valores de los parámetros de instancia del módulo y comprobar sus efectos. Los valores de los parámetros se pueden cambiar tanto en línea como sin conexión.

    _ex_ac_img_first_steps9.png

Requisitos y restricciones del sistema

Sistema de programación

CODESYS Development System (versión 3.5.17.0 o superior)

Sistema de tiempo de ejecución

CODESYS Control Win (versión 3.5.17.0)

Componentes adicionales

CODESYS Application Composer

Aviso

_example_icon.png DESCARGAR Proyectos