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:
SubjectModule
EPupilModule
.TeacherModule
può 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 diSubjectModule
EPupilModule
(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'apprendibileSubjectID
Learn()
: Questo metodo deve essere sovrascritto. All'inizio, l'implementazione di base dovrebbe quindi essere chiamata:IF SUPER^.Learn(itfSubjectToLearn := itfSubjectToLearn) = ACMT.ERROR.NO_ERROR THEN
Se ciò ha successo, allora l'argomento può essere appreso. Altrimenti, l'argomento non è apprendibile e può essere ignorato.
END_IF
ForgetAll()
: 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 ilSubjectID
CallPrioMediumStart()
: Chiamata diReportTeacher
se 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
.