Skip to main content

Ejemplo: AC Module Teaching

Producto: CODESYS Application Composer

Este ejemplo muestra cómo crear y usar módulos de aprendizaje por medio de controles de iluminación simples.

Descripción

El CODESYS Application Composer proporciona la capacidad de una configuración modular de una aplicación. Cuando la estructura se define una vez en el árbol de módulos, se genera una aplicación IEC estática a partir de ella. Cuando esto sucede, los módulos se conectan directamente con sus submódulos y no se pueden cambiar en tiempo de ejecución.

Este ejemplo muestra cómo crear una configuración dinámica a partir de un grupo de módulos separados en tiempo de ejecución.

Además, esta configuración se almacena de forma persistente para que la última configuración establecida se pueda descargar cada vez que se reinicia la aplicación.

Puede utilizar la biblioteca incluida sin ninguna modificación. El proyecto simplemente muestra un posible caso de uso de esta biblioteca. Todas las modificaciones requeridas han sido marcadas en el código por medio de comentarios usando la palabra clave AC_ModuleTeaching.

Información adicional

Arquitectura

La idea de los módulos de aprendizaje se basa en el principio alumno-asignatura-profesor.

Los alumnos pueden aprender las materias que les enseña un profesor. La decisión de si un alumno puede o no aprender un tema en particular depende del alumno. Por lo tanto, una configuración de módulo en funcionamiento siempre debe constar de un profesor, al menos un alumno y al menos una asignatura.

Teniendo en cuenta la arquitectura de la AC_ModuleTeaching biblioteca, los siguientes resultados de diseño:

_example_img_ac_module_teaching1.png

El TeacherModule, SubjectModule, y PupilModule (o TeacherRegistration) los bloques de funciones se derivan de la AC.Module bloque de funciones Esto permite configurar estos tres tipos de módulos en un árbol de módulos.

Solo dos bloques de funciones son relevantes para la implementación de módulos de aprendizaje:

  • SubjectModule y PupilModule.

  • TeacherModule se puede insertar como un módulo en el árbol de módulos sin ninguna modificación o configuración adicional.

Secuencia

La fase de inicialización procede de la siguiente manera:

_example_img_ac_module_teaching2.png

Init() se llama desde el contexto base de Application Composer en el primer ciclo del PLC.

  • TeacherModule: Este módulo escanea todas las instancias del módulo e informa de cada instancia de SubjectModule y PupilModule (Register(THIS^)). Esto establece el marco básico para la comunicación cruzada de los módulos.

  • SubjectModule: Cada uno de estos módulos se asigna a sí mismo un único SubjectID (UDINT).

  • PupilModule: Cada módulo tiene que registrar su propio SubjectIDs, que debería ser capaz de aprender, a través de AddSubjectID(UDINT).

El aprendizaje se desarrolla de la siguiente manera:

_example_img_ac_module_teaching3.png

Para cualquier evento (por ejemplo, hacer clic en el botón "Aprender" en una visualización), un SubjectModule instancia informa a un TeacherModule sobre la llamada de ReportTeacher(). En ReportTeacher(), Report(THIS^) del TeacherModule se llama implícitamente. El TeacherModule proporciona el SubjectModule interfaz para todos PupilModule instancias a través de Learn(ISubject) con la posibilidad de aprender la SubjectModule. aprendiendo un SubjectModule significa que el PupilModule posiblemente tiene que lanzar y marcar el SubjectModule mismo (por ejemplo, almacenándolo en una variable miembro).

Solicitud

Para cualquier aplicación específica, debe pensar qué y quién asumirá el papel de "sujetos" y "alumnos", respectivamente. Por ejemplo, los sujetos pueden ser representados por sensores y los alumnos por actores. En el ejemplo, se utiliza un sensor de luz para un sujeto y una luz para una pupila. La luz puede aprender a escuchar diferentes sensores u olvidarlos más tarde.

En cuanto a la implementación, cabe señalar lo siguiente:

  • Light EXTIENDE ACMT.Pup

    Init(): Añadir el aprendizaje SubjectID

    Learn(): Este método debe sobrescribirse. Al principio, la implementación base debería llamarse:

    IF SUPER^.Learn(itfSubjectToLearn := itfSubjectToLearn) = ACMT.ERROR.NO_ERROR THEN

    Si eso tiene éxito, entonces el tema se puede aprender. De lo contrario, el tema no se puede aprender y se puede ignorar.

    END_IF

    ForgetAll(): Este método también debe sobrescribirse y los temas almacenados locales deben eliminarse nuevamente.

  • SwitchPush EXTENDE ACMT.SubjectModule // indirectamente a través de la cadena de herencia SwitchOnOff -> SwitchBase

    Init(): Definir el SubjectID

    CallPrioMediumStart(): Llamada de ReportTeachersi el sensor fue presionado por más de 3 segundos.

  • Administrador de persistencia

    Al agregar el Administrador de persistencia, los temas aprendidos se pueden guardar. Como resultado, el último estado se restaura cuando se reinicia la aplicación.

Requisitos y restricciones del sistema

Sistema de programación

CODESYS Development System (versión 3.5.5.0 o superior)

Sistema de tiempo de ejecución

CODESYS Control Win (versión 3.5.5.0)

Componentes adicionales

CODESYS Application Composer

Aviso

_example_icon.png DESCARGAR Proyecto

Tras instalar el paquete, encontrará el proyecto de ejemplo en el directorio C:\Users\<user>\CODESYS Examples\AC Module Teaching Example.