Esempio: insegnamento del modulo AC
Prodotto: CODESYS Application Composer
Questo esempio mostra come creare e utilizzare moduli apprendibili mediante semplici controlli di illuminazione.
Descrizione
IL CODESYS Application Composer fornisce la capacità di una configurazione modulare di un'applicazione. Quando la struttura viene definita una volta nell'albero del modulo, da essa viene generata un'applicazione IEC statica. Quando ciò accade, i moduli sono collegati direttamente con i loro sottomoduli e non possono essere modificati in fase di esecuzione.
Questo esempio mostra come creare una configurazione dinamica da un pool di moduli separati in fase di esecuzione.
Inoltre, questa configurazione viene memorizzata in modo permanente in modo che l'ultima configurazione impostata possa essere scaricata ogni volta che l'applicazione viene riavviata.
È possibile utilizzare la libreria inclusa senza alcuna modifica. Il progetto mostra semplicemente un possibile caso d'uso di questa libreria. Tutte le modifiche richieste sono state contrassegnate nel codice mediante commenti utilizzando la parola chiave AC_ModuleTeaching.
Informazioni aggiuntive
Architettura
L'idea di moduli apprendibili si basa sul principio alunno-materia-insegnante.
Gli alunni possono apprendere materie insegnate loro da un insegnante. La decisione se un alunno può imparare o meno una particolare materia spetta all'alunno. Pertanto, una configurazione di modulo funzionante deve sempre essere composta da un insegnante, almeno un allievo e almeno una materia.
Considerando l'architettura del AC_ModuleTeaching libreria, i seguenti risultati progettuali:
![]() |
IL TeacherModule, SubjectModule, E PupilModule (O TeacherRegistration) i blocchi funzione derivano da AC.Module blocco funzione. Ciò consente di configurare questi tre tipi di modulo in un albero dei moduli.
Solo due blocchi funzione sono rilevanti per l'implementazione di moduli apprendibili:
SubjectModuleEPupilModule.TeacherModulepuò essere inserito come modulo nell'albero dei moduli senza alcuna modifica o configurazione aggiuntiva.
Sequenza
La fase di inizializzazione procede come segue:
![]() |
Init() viene richiamato dal contesto Application Composer di base nel primo ciclo PLC.
TeacherModule: questo modulo esegue la scansione di tutte le istanze del modulo e riporta per ogni istanza diSubjectModuleEPupilModule(Register(THIS^)). Ciò stabilisce la struttura di base per la comunicazione incrociata dei moduli.SubjectModule: Ciascuno di questi moduli si assegna un univocoSubjectID(UDINT).PupilModule: Ogni modulo deve registrarsi da soloSubjectIDs, che dovrebbe essere in grado di apprendere, tramiteAddSubjectID(UDINT).
L'apprendimento procede come segue:
![]() |
Per qualsiasi evento (ad esempio, facendo clic sul pulsante "Apprendi" in una visualizzazione), a SubjectModule rapporti di istanza a a TeacherModule sulla chiamata di ReportTeacher(). In ReportTeacher(), Report(THIS^) del TeacherModule è chiamato implicitamente. IL TeacherModule fornisce il SubjectModule interfaccia a tutti PupilModule istanze tramite Learn(ISubject) con la possibilità di apprendere il SubjectModule. Imparare A SubjectModule significa che il PupilModule possibilmente deve lanciare e segnare il SubjectModule stessa (ad esempio, memorizzando in una variabile membro).
Applicazione
Per ogni applicazione specifica, devi pensare a cosa e chi assumerà rispettivamente il ruolo di "soggetti" e "allievi". Ad esempio, i soggetti possono essere rappresentati da sensori e gli alunni da attori. Nell'esempio, un sensore di luce viene utilizzato per un soggetto e una luce per una pupilla. La luce può imparare ad ascoltare diversi sensori o dimenticarli di nuovo in seguito.
Per quanto riguarda l'attuazione, si segnala quanto segue:
Light ESTENDE ACMT.Pup
Init(): Aggiungi l'apprendibileSubjectIDLearn(): Questo metodo deve essere sovrascritto. All'inizio, l'implementazione di base dovrebbe quindi essere chiamata:IF SUPER^.Learn(itfSubjectToLearn := itfSubjectToLearn) = ACMT.ERROR.NO_ERROR THENSe ciò ha successo, allora l'argomento può essere appreso. Altrimenti, l'argomento non è apprendibile e può essere ignorato.
END_IFForgetAll(): Anche questo metodo dovrebbe essere sovrascritto e gli oggetti archiviati in locale dovrebbero essere nuovamente rimossi.SwitchPush EXTENDS ACMT.SubjectModule // indirettamente tramite catena di ereditarietà SwitchOnOff -> SwitchBase
Init(): Definire ilSubjectIDCallPrioMediumStart(): Chiamata diReportTeacherse il sensore è stato premuto per più di 3 secondi.Responsabile della persistenza
Aggiungendo il Persistence Manager, le materie apprese possono essere salvate. Di conseguenza, l'ultimo stato viene ripristinato al riavvio dell'applicazione.
Requisiti di sistema e restrizioni
Sistema di programmazione | CODESYS Development System (versione 3.5.5.0 o successiva) |
Sistema di esecuzione | CODESYS Control Win (versione 3.5.5.0) |
Componenti aggiuntivi | CODESYS Application Composer |
Avviso
SCARICAMENTO Progetto
Dopo aver installato il pacchetto, troverete il progetto di esempio nella directory C:\Users\<user>\CODESYS Examples\AC Module Teaching Example.


