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.
Trabajo preparatorio
Crear uno nuevo CODESYS proyecto de la Proyecto estándar con Application Composer plantilla. Seleccionar
AC_ModuleBasecomo la biblioteca.
El módulo de nivel superior
RoomAgregue una nueva declaración de módulo al grupo de POU del proyecto. Asígnele el nombre.
Rooma la declaración del módulo y al bloque de función asociado. El bloque de función también debe extender elAC.Modulebloque de función que se define en elAC_ModuleBaseBiblioteca. LaAC.ModuleEl bloque de funciones ya proporciona numerosos métodos y propiedades que no es necesario sobrescribir.
La declaración comienza con la palabra clave
MODULEseguido del nombre del módulo y la palabra clave adicionalIMPLEMENTED_BY, así como por el bloque de funciones que implementa el módulo. En concreto, este bloque de funciones es elRoombloque de función que se acaba de crear. En la mayoría de los casos, elMetaDataLa sección está declarada ahora.Para obtener información detallada sobre todos los parámetros y secciones, consulte: Editor de módulos.
Porque el
Roommódulo es el módulo de nivel superior en nuestro ejemplo, declara elToplevelSecció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 laToplevelSección. Esta tarea esStandard_TaskEn este ejemplo, se define como unMEDIUMtarea y contiene elCREATE_IF_MISSINGyUPDATE_IOSbanderas.
Todos los íconos y cadenas que se utilizan como marcadores de posición para las descripciones e íconos (
Desc,Icon_16, yIcon_32Los 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.TLy un fondo de imágenesIPen el grupo POU que contiene los íconos y textos referenciados.Submódulo:
SwitchCree una declaración de módulo y un bloque de función correspondiente llamado
SwitchEste módulo no es un módulo de nivel superior y, por lo tanto, no requiere unToplevelsección. Como todos los bloques de función que representan módulos, elSwitchEl bloque de función también debe extenderseAC.modules. Además,Switchimplementa elISwitchinterfaz que también necesitas crear. A su vez, elISwitchla interfaz se extiendeAC.IModulepero 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
IOsección, utilizando elxInvariable de entrada de laSwitchBloque de funciones. Además, se necesita un tiempo de referencia para distinguir las dos funciones del interruptor: pulsar el interruptor durante el tiempo indicado.tTimerInicia la función de atenuación: una pulsación breve solo enciende o apaga la luz. Define la variable de entrada.tTimercomo parámetro del módulo (ParametersSección). De esta manera, podrá configurar fácilmente la hora más tarde al utilizar los módulos.Tú defines las variables
xInytTimercomo entradas de laSwitchbloque de función, donde se establece un valor inicial de 500 ms para eltTimerparámetro.
También es necesario ampliar la lista de texto y el grupo de imágenes para poder mostrar las descripciones.
Submódulo:
SwitchSimpleEl 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
tTimerLas variables no son obligatorias. Además, no se implementan.ISwitchperoISwitchSimple, que también se extiendeAC.IModule.
Submódulo:
LightAl igual que antes para los interruptores, para la luz también es necesario crear una declaración de módulo.
Lightcon elLightbloque de función yILightinterfaz.Para insertar el
Lightmódulo debajo de una habitación, es necesario agregar elSlotssección a laLightDeclaración del módulo. En esta sección, se declara una subsección.Slot_Multi, a lo que llamasLightsy que puede albergar los módulos de tipoILightLa cantidad de luces que se deben o pueden agregar a una habitación se especifica medianteCardinalityTambién defines las variablesVariableyVar_County vincularlos a la declaración del módulopLights(POINTER TO ILight)yuiNumberOfLights (UINT). Esto garantiza que solo los módulos cuyos bloques de función implementan laILightSe puede añadir una interfaz a laLightsranura.
Con el
Lightmódulo, también se define una ranura donde se puede insertar un interruptor. Por lo tanto, es necesario agregar unSwitchranura para elLightDeclaración del módulo. Parámetros adicionales delLightmódulo son la velocidad del reguladorrSpeedy el brillo máximouiMaxValueFinalmente, 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 laLightbloque de función.
Submódulo:
LightSimpleEl ú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
LightSimplebloque de función que se extiendeAC.Modulee implementa lo existenteILightinterfaz. Las diferencias con laLightLos módulos son los siguientes: la salida debe ser del tipoBOOLy tener el nombrexSwitchedOn. Además, elrSpeedEl parámetro no es obligatorio.
Implementación
Para la implementación de la función para la
Switchmódulo, utilice elCallPrioMediumStartmétodo deAC.Moduley anularla con su propia implementación. Esta función está seleccionada porqueRoomEl módulo de nivel superior declara unMEDIUMtarea. Esto significa que laCallPrioMediumStartmétodo de laSwitchEl 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 variablexPushLong. La variablexPushEs VERDADERO cuando el interruptor se presiona solo por un corto tiempo. Para ambas variablesxPushLongyxPush, las propiedades se agregan tanto en elSwitchbloque de función y la interfaz para que puedan usarse desde el bloque de función de luz padre.También el
LightEl bloque de función anula elCallPrioMediumStartMé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...rSpeedSe 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.
Ingeniería
Crea el árbol de módulos en el Módulos vista. Para ello, primero agregue el
Roommódulo de nivel superior al árbol de módulos después de que se hayan importado los módulos. En elLightsranura, añadir unoLighty unoLightSimple. A cada uno de ellos, asígnele unSwitcho unaSwitchSimpleA 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 Compositor → Crear 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.

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
DESCARGAR Proyectos