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:
![]() |
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
yPupilModule
.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:
![]() |
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 deSubjectModule
yPupilModule
(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 únicoSubjectID
(UDINT
).PupilModule
: Cada módulo tiene que registrar su propioSubjectIDs
, que debería ser capaz de aprender, a través deAddSubjectID(UDINT)
.
El aprendizaje se desarrolla de la siguiente manera:
![]() |
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 aprendizajeSubjectID
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 elSubjectID
CallPrioMediumStart()
: Llamada deReportTeacher
si 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
DESCARGAR Proyecto
Tras instalar el paquete, encontrará el proyecto de ejemplo en el directorio C:\Users\<user>\CODESYS Examples\AC Module Teaching Example
.