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_ModuleBase
como la biblioteca.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 elAC.Module
bloque de función que se define en elAC_ModuleBase
Biblioteca. LaAC.Module
El bloque de funciones ya proporciona numerosos métodos y propiedades que no es necesario sobrescribir.La declaración comienza con la palabra clave
MODULE
seguido 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 elRoom
bloque de función que se acaba de crear. En la mayoría de los casos, elMetaData
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 elToplevel
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 laToplevel
Sección. Esta tarea esStandard_Task
En este ejemplo, se define como unMEDIUM
tarea y contiene elCREATE_IF_MISSING
yUPDATE_IOS
banderas.Todos los íconos y cadenas que se utilizan como marcadores de posición para las descripciones e íconos (
Desc
,Icon_16
, yIcon_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ágenesIP
en el grupo POU que contiene los íconos y textos referenciados.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 unToplevel
sección. Como todos los bloques de función que representan módulos, elSwitch
El bloque de función también debe extenderseAC.modules
. Además,Switch
implementa elISwitch
interfaz que también necesitas crear. A su vez, elISwitch
la interfaz se extiendeAC.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 elxIn
variable de entrada de laSwitch
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
ytTimer
como entradas de laSwitch
bloque de función, donde se establece un valor inicial de 500 ms para eltTimer
parámetro.También es necesario ampliar la lista de texto y el grupo de imágenes para poder mostrar las descripciones.
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
peroISwitchSimple
, que también se extiendeAC.IModule
.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 elLight
bloque de función yILight
interfaz.Para insertar el
Light
módulo debajo de una habitación, es necesario agregar elSlots
sección a laLight
Declaración del módulo. En esta sección, se declara una subsección.Slot_Multi
, a lo que llamasLights
y que puede albergar los módulos de tipoILight
La cantidad de luces que se deben o pueden agregar a una habitación se especifica medianteCardinality
También defines las variablesVariable
yVar_Count
y 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 laILight
Se puede añadir una interfaz a laLights
ranura.Con el
Light
módulo, también se define una ranura donde se puede insertar un interruptor. Por lo tanto, es necesario agregar unSwitch
ranura para elLight
Declaración del módulo. Parámetros adicionales delLight
módulo son la velocidad del reguladorrSpeed
y el brillo máximouiMaxValue
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 laLight
bloque de función.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 extiendeAC.Module
e implementa lo existenteILight
interfaz. Las diferencias con laLight
Los módulos son los siguientes: la salida debe ser del tipoBOOL
y tener el nombrexSwitchedOn
. Además, elrSpeed
El parámetro no es obligatorio.Implementación
Para la implementación de la función para la
Switch
módulo, utilice elCallPrioMediumStart
método deAC.Module
y anularla con su propia implementación. Esta función está seleccionada porqueRoom
El módulo de nivel superior declara unMEDIUM
tarea. Esto significa que laCallPrioMediumStart
método de laSwitch
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 variablexPushLong
. La variablexPush
Es VERDADERO cuando el interruptor se presiona solo por un corto tiempo. Para ambas variablesxPushLong
yxPush
, las propiedades se agregan tanto en elSwitch
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 elCallPrioMediumStart
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.
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 elLights
ranura, añadir unoLight
y unoLightSimple
. A cada uno de ellos, asígnele unSwitch
o unaSwitchSimple
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 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