Skip to main content

Comando: Generar

Símbolo: ac_icon_generate.png

Este comando (categoría "Compositor") inicia un proceso de compilación que genera automáticamente el CODESYS aplicación desde el árbol de módulos y la configuración del Configuración del generador.

Los mensajes y errores se mostrarán en la vista de mensajes.

Todos los objetos creados por el generador estándar (excepto los objetos de tareas y las aplicaciones) se almacenarán en la subcarpeta de la aplicación respectivamente. Grupo de POU nombrado AC_Std y AC_FBs. Si ya existe una carpeta con el mismo nombre, se creará un nombre único agregando un sufijo _0.

figura 39. Bloques de funciones generados
Bloques de funciones generados


Todos los objetos creados por el Generar El comando está marcado con un icono superpuesto de color azul. Si el usuario intenta eliminar, mover o modificar uno de estos objetos, se abrirá un cuadro de diálogo que le indica que esta acción puede causar problemas de compilación. Si el usuario continúa, el color del icono superpuesto cambia a rojo (consulte el bloque de funciones AC_PRG_RMP (PRG) en la captura de pantalla anterior).

Sugerencia

Si utiliza Application Composer junto con CODESYS SVN:

Todos los objetos generados por Composer están marcados con un Ignore on Commit para SVN. Además, SVN se cambia al modo fuera de línea para evitar bloqueos de SVN mientras se ejecuta el comando Construido.

Creación de instancias de bloques de funciones mediante el generador estándar.

Para cada instancia de módulo se creará un bloque de funciones (en la carpeta AC_FBs). Este bloque de funciones deriva del bloque de funciones del módulo.

El bloque de funciones contiene variables de entrada

  • Instancias de submódulo

  • Matrices de tamaño configurable

  • Variables de búfer de conexiones de E/S directas

  • Matrices de multislots y referencias de instancias.

El nombre de la variable de matriz respectiva se crea mediante el prefijo AC_ARRAY_ seguido del nombre de la variable de puntero respectiva. Para matrices con tamaño de índice variable (VarArrays), el nombre se puede sobrescribir con el parámetro VarArray.InstName.

La parte de implementación del bloque de funciones contiene el comando SUPER^(); que llama a la parte de implementación del bloque de funciones del módulo.

ejemplo 11. Ejemplo

La instancia del módulo ModuleInstanceA es de tipo ModuleA y bloque de funciones relacionado ModuleA_FB. Esta instancia tiene una instancia de submódulo de tipo ModuleB.

La instancia del módulo ModuleInstanceA es de tipo ModuleA y bloque de funciones relacionado ModuleA_FB. Esta instancia tiene una instancia de submódulo de tipo ModuleB.

FUNCTION_BLOCK AC_ModuleInstanceA EXTENDS ModuleA_FB

VAR_INPUT
        Inst_Sub1 : AC_ModuleInstanceB ;
END_VAR

El nombre del bloque de funciones se crea a partir de la ruta de la instancia del módulo y el prefijo AC_.

El nombre de la variable de la instancia del submódulo se crea a partir de un prefijo seguido del nombre de la instancia del submódulo respectivo.



Se crea una instancia de cada bloque de funciones una vez, la instancia de FB del módulo de nivel superior directamente en el GVL y el resto en los bloques de funciones correspondientes de las instancias principales.

Para cada instancia de módulo referenciada que esté ubicada en otra aplicación, se creará exactamente una instancia de bloque de funciones del FB proxy en una GVL de una instancia de módulo de referencia. El nombre de la instancia de proxy es AC_PROXY_<InstanceName> donde <InstanceName> es el nombre de la instancia de destino en la otra aplicación.

Se asignan direcciones únicas a todas las instancias del módulo. Las instancias de FB proxy se asignan mediante las direcciones de las instancias del módulo en la aplicación remota.

El método IBaseInstance.Main de las instancias de proxy se llama cíclicamente en la tarea de comunicación.

Creación de la aplicación y llamadas de tareas.

  • Si se asigna un módulo a una aplicación que no existe, se creará esta aplicación.

  • Creación de tarea estándar inexistente.

    • TASK_MODULE_HIGH

    • TASK_MODULE_MEDIUM

    • TASK_MODULE_LOW

    La prioridad y el tiempo de ciclo de las tareas se establecen de acuerdo con la configuración del generador. Además, se crearán tareas específicas del módulo con la configuración dada.

  • Creación de una lista de variables globales por nivel superior. En esta GVL, se crearán instancias de módulo que se encuentran debajo de las instancias de módulo de nivel superior de la misma aplicación. La lista de variables globales tiene el nombre definido en el módulo, o si no tiene un nombre definido, obtendrá el nombre GVL_MODULE. La GVL se encuentra debajo de la aplicación seleccionada o en el árbol de POU global.

    Creación de una GVL con el nombre GVL_ MODULE_TREE para cada aplicación. Esta lista contiene variables para gestionar el árbol de módulos. El GVL se creará en la carpeta AC_Std.

  • Creación de un código de inicialización que se llama automáticamente durante la descarga y el cambio en línea:

    • Se creará la estructura de árbol.

    • Se establecerán los valores de los parámetros.

    • Se asignarán referencias e instancias de submódulos.

    • Se completarán las matrices con tamaño variable.

    • Se establecerán referencias de instancia.

    Al descargar, solo se configurarán los parámetros que no estén configurados en su valor predeterminado. Al realizar el cambio en línea, se configurarán todos los parámetros. Las POU se crearán en la carpeta AC_Std.

  • Para cada punto de entrada definido, un PROGRAM Se creará una POU (lenguaje ST) que contiene las llamadas de los módulos de nivel superior. La llamada de esta nueva POU se agregará debajo de la tarea. En el caso de la tarea estándar, los nombres de las POU son:

    • MODULE_CALL_<TASKNAME>_START

    • MODULE_CALL_<TASKNAME>_END

    Las POU se crearán en la carpeta AC_Std.

  • Para módulos de nivel superior en el POU pool las llamadas de tarea se crearán en todas las aplicaciones.

Creación de la asignación de E/S

Dependiendo del tipo de asignación de E/S se realizarán las siguientes acciones:

  • [Canal de E/S]: En el canal del dispositivo correspondiente se agregará el nombre de la instancia de E/S de la instancia del módulo.

  • [Expresión ST]: Las asignaciones de las expresiones a las entradas o de las salidas a las expresiones serán para todas las instancias de módulo debajo de la misma instancia de nivel superior. Si hay asignaciones correspondientes, para cada instancia de nivel superior una función llamada

    • AC_Io_SetInputs_<instance name> o

    • AC_Io_SetOutputs_<instance name>

    se creará.

    La tarea que define entradas y salidas será identificada por la bandera UPDATE-IOS en la descripción del módulo. Esta tarea se denominará "tarea de E/S" en la siguiente descripción.

    La función para las entradas se llamará en la tarea de E/S antes de que se llame al método de tarea de la instancia del módulo. (Si la tarea de E/S es una tarea estándar, antes del método de inicio). La función para las salidas se llamará en la tarea de E/S después del método de tarea de la instancia del módulo. (Si la tarea de E/S es una tarea estándar, después del método final).

  • [Conexión directa al módulo de E/S, local]: Se creará una variable de búfer de tipo compatible en el bloque de funciones de la instancia de la entrada. El nombre de la variable del buffer comienza con el prefijo AC_Io_Buffer_.

    Las variables del búfer se inicializarán con los valores actuales de las salidas conectadas durante la inicialización de la aplicación. El generador maneja las asignaciones de entrada y salida como una asignación ST a esta variable de búfer (ver [expresión ST].

  • [Conexiones directas a E/S del módulo, remotas]: Para cada salida que se conecta a una entrada de una instancia de módulo de otra aplicación, se creará una variable de búfer con tipo compatible en la red de envío GVL correspondiente. El nombre de la variable del buffer comienza con el prefijo. AC_RemoteIo_Buffer_ y se construirá a partir de la ruta de la instancia y la ruta variable de la salida. Las variables del búfer se inicializarán con la expresión de inicialización de la variable de salida, si existe. Si el valor de esta expresión de inicialización no está contenido en la información de precompilación (porque la expresión usa ejemplos: variables, funciones y constantes), se crea un error.

    El generador maneja la asignación de salida como una asignación a esta variable de búfer. La asignación de entrada en la otra aplicación se maneja como una asignación de la variable correspondiente en el NVL del receptor (ver [expresión ST]).

    Nota: La sincronización entre la tarea en la que se actualizará la variable de red y la tarea de E/S del módulo aún no se ha realizado. Por lo tanto, es posible que los valores se hayan escrito de forma incompleta mientras la tarea de E/S los lee.

Creación de la infraestructura de comunicación.

Definición: En la siguiente descripción, la aplicación A1 envía a la aplicación A2 (o A2 recibe de A1) si se cumplen las siguientes condiciones:

  • Una instancia de módulo asignada a la aplicación A1 hace referencia a una instancia de módulo asignada a la aplicación A2 o viceversa.

  • Una salida de una instancia de módulo asignada a A1 se conecta a una instancia de módulo asignada a A2 mediante el uso de una conexión de E/S de módulo directa.

Todos los objetos mencionados a continuación se crearán en la carpeta. AC_RMP para cada aplicación creada por el generador.

  • Se creará una tarea de comunicación. (Tiempo de ciclo y prioridad según los ajustes de la configuración del generador). En esta tarea, se llamarán las instancias de proxy y se leerán las variables FB del proxy del módulo reflejado. escrito.

  • Para cada aplicación que envía a la aplicación actual, se creará una GVL (envío) y se definirán las configuraciones de red. (Protocolo "UDP", transmisión cíclica, suma de comprobación, tiempo de ciclo según la configuración, tarea de comunicación). El "identificador de lista", que debe ser un valor entero entre 1 y 2^15-1, se determinará aleatoriamente al comienzo de la generación y se incrementará en 1 después de cada envío de GVL. Este valor es al menos 128 y está dentro del rango válido. Si hay referencias de módulos entre las aplicaciones una variable de tipo RMPExchangeData se creará en el GVL. El nombre de la variable contiene el nombre de la aplicación de origen y de destino. Si una instancia de módulo define variables en su definición de proxy para reflejar (MirrorVar) y se hace referencia desde otra instancia de módulo, para cada una de estas MirrorVars se creará una variable en el GVL (envío) de la instancia de módulo a la que se hace referencia. Su nombre contiene la ruta de la instancia del módulo y el TargetID de la definición "MirrorVar" correspondiente.

  • Para cada aplicación A2, a la que envía la aplicación actual, se creará una NVL (de recepción) y se conectará a la GVL de envío correspondiente de A2 y a la tarea de comunicación.

  • Un bloque de funciones de tipo RMPService será instanciado en el GVL AC_RMP e inicializado en la declaración (con atributo init_on_onlchange). Dos matrices de tipo RMPConnection Se crearán las cuales hacen referencia a las variables de tipo creadas. RMPExchangeData en los GVL y NVL.

  • Un programa AC_PRG_RMP se creará el cual llama al bloque de funciones de tipo RMPService. Este programa se sumará a la tarea de comunicación. Además, el valor de las variables reflejadas ("MirrorVars") se establecerá y leerá en el AC_PRG_RMP programa. Esto significa que el proxy "MirrorVars" se asignará a las variables correspondientes del GVL (de recepción). Entonces el Main Se llama al método de la instancia de proxy y finalmente a las variables correspondientes del GVL (remitente) del módulo "MirrorVars". Esto sucede según la dirección de envío de las instancias del módulo a los servidores proxy.