Exemple : AC Module Teaching
Produit: CODESYS Application Composer
Cet exemple montre comment créer et utiliser des modules apprenants au moyen de simples commandes d'éclairage.
Description
Le CODESYS Application Composer offre la possibilité d'une configuration modulaire d'une application. Lorsque la structure est définie une fois dans l'arborescence du module, une application CEI statique est générée à partir de celle-ci. Lorsque cela se produit, les modules sont connectés directement à leurs sous-modules et ne peuvent pas être modifiés lors de l'exécution.
Cet exemple montre comment créer une configuration dynamique à partir d'un pool de modules distincts lors de l'exécution.
De plus, cette configuration est stockée de manière persistante afin que la dernière configuration définie puisse être téléchargée à chaque redémarrage de l'application.
Vous pouvez utiliser la bibliothèque incluse sans aucune modification. Le projet montre simplement un cas d'utilisation possible de cette bibliothèque. Toutes les modifications requises ont été marquées dans le code au moyen de commentaires utilisant le mot-clé AC_ModuleTeaching
.
Informations Complémentaires
Architecture
L'idée de modules apprenables repose sur le principe élève-sujet-enseignant.
Les élèves peuvent apprendre des matières qui leur sont enseignées par un enseignant. La décision de savoir si un élève peut ou non apprendre une matière particulière appartient à l'élève. Par conséquent, une configuration de module fonctionnel doit toujours être composée d'un enseignant, d'au moins un élève et d'au moins une matière.
Compte tenu de l'architecture du AC_ModuleTeaching
bibliothèque, les résultats de conception suivants :
![]() |
Le TeacherModule
, SubjectModule
, et PupilModule
(ou TeacherRegistration
) les blocs fonctionnels dérivent de la AC.Module
bloc fonctionnel. Cela permet de configurer ces trois types de modules dans une arborescence de modules.
Seuls deux blocs fonctionnels sont pertinents pour la mise en œuvre de modules apprenants :
SubjectModule
etPupilModule
.TeacherModule
peut être inséré en tant que module dans l'arborescence des modules sans aucune modification ou configuration supplémentaire.
Séquence
La phase d'initialisation se déroule comme suit :
![]() |
Init()
est appelée depuis le contexte Application Composer de base dans le premier cycle de l'automate.
TeacherModule
: Ce module analyse toutes les instances de module et fait un rapport pour chaque instance deSubjectModule
etPupilModule
(Register(THIS^)
). Ceci établit le cadre de base pour la communication croisée des modules.SubjectModule
: Chacun de ces modules s'attribue un uniqueSubjectID
(UDINT
).PupilModule
: Chaque module doit enregistrer son propreSubjectIDs
, qu'il devrait pouvoir apprendre, viaAddSubjectID(UDINT)
.
L'apprentissage se déroule comme suit :
![]() |
Pour tout événement (par exemple, cliquer sur le bouton "Apprendre" dans une visualisation), un SubjectModule
l'instance relève d'un TeacherModule
à propos de l'appel de ReportTeacher()
. Dans ReportTeacher()
, Report(THIS^)
de la TeacherModule
est appelé implicitement. Le TeacherModule
fournit le SubjectModule
interface avec tous PupilModule
instances via Learn(ISubject)
avec la possibilité d'apprendre SubjectModule
. Apprendre un SubjectModule
signifie que le PupilModule
doit éventuellement lancer et marquer le SubjectModule
lui-même (par exemple, en le stockant dans une variable membre).
Application
Pour toute application spécifique, vous devez réfléchir à quoi et qui assumera respectivement le rôle de "sujets" et "d'élèves". Par exemple, les sujets peuvent être représentés par des capteurs et les élèves par des acteurs. Dans l'exemple, un capteur de lumière est utilisé pour un sujet et une lumière pour un élève. La lumière peut apprendre à écouter différents capteurs ou les oublier plus tard.
Concernant la mise en œuvre, il convient de noter ce qui suit :
Lumière PROLONGE ACMT.Pup
Init()
: Ajouter l'apprenableSubjectID
Learn()
: Cette méthode doit être écrasée. Au début, l'implémentation de base devrait alors s'appeler :IF SUPER^.Learn(itfSubjectToLearn := itfSubjectToLearn) = ACMT.ERROR.NO_ERROR THEN
Si cela réussit, alors le sujet peut être appris. Sinon, le sujet n'est pas apprenable et peut être ignoré.
END_IF
ForgetAll()
: Cette méthode doit également être écrasée et les sujets stockés locaux supprimés à nouveau.SwitchPush EXTENDS ACMT.SubjectModule // indirectement via la chaîne d'héritage SwitchOnOff -> SwitchBase
Init()
: Définir laSubjectID
CallPrioMediumStart()
: Appel deReportTeacher
si le capteur a été appuyé plus de 3 secondes.Gestionnaire de persistance
En ajoutant le gestionnaire de persistance, les sujets appris peuvent être enregistrés. Par conséquent, le dernier état est restauré au redémarrage de l'application.
Configuration système requise et restrictions
Système de programmation | CODESYS Development System (version 3.5.5.0 ou supérieure) |
Système d'exécution | CODESYS Control Win (version 3.5.5.0) |
Composants complémentaires | CODESYS Application Composer |
Avis
TÉLÉCHARGER Projet
Après l'installation du paquet, vous trouverez le projet d'exemple dans le répertoire C:\Users\<user>\CODESYS Examples\AC Module Teaching Example
.