Skip to main content

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:

_example_img_ac_module_teaching1.png

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 E PupilModule.

  • TeacherModule può essere inserito come modulo nell'albero dei moduli senza alcuna modifica o configurazione aggiuntiva.

Sequenza

La fase di inizializzazione procede come segue:

_example_img_ac_module_teaching2.png

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 di SubjectModule E PupilModule (Register(THIS^)). Ciò stabilisce la struttura di base per la comunicazione incrociata dei moduli.

  • SubjectModule: Ciascuno di questi moduli si assegna un univoco SubjectID (UDINT).

  • PupilModule: Ogni modulo deve registrarsi da solo SubjectIDs, che dovrebbe essere in grado di apprendere, tramite AddSubjectID(UDINT).

L'apprendimento procede come segue:

_example_img_ac_module_teaching3.png

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'apprendibile SubjectID

    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 il SubjectID

    CallPrioMediumStart(): Chiamata di ReportTeacherse 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

_example_icon.png SCARICAMENTO Progetto

Dopo aver installato il pacchetto, troverete il progetto di esempio nella directory C:\Users\<user>\CODESYS Examples\AC Module Teaching Example.