Esempio: Primi passi
Prodotto: CODESYS Application Composer
Questo esempio mostra come iniziare a creare e utilizzare i moduli per CODESYS Application Composer A questo scopo, creerai una stanza con luci e interruttori.
Descrizione
Nell'esempio, viene implementato un breve scenario di automazione degli edifici: dotare una stanza di luci e relativi interruttori. Gli interruttori possono essere utilizzati anche come dimmer. Pertanto, le luci dovrebbero supportare diversi livelli di luminosità.
Lavori preparatori
Crea un nuovo CODESYS progetto dal Progetto standard con Application Composer modello. Seleziona
AC_ModuleBasecome la biblioteca.
Il modulo di livello superiore
RoomAggiungi una nuova dichiarazione di modulo al pool POU del progetto. Assegna il nome
Roomalla dichiarazione del modulo e al blocco funzione associato. Il blocco funzione deve anche estendere ilAC.Moduleblocco funzione che è definito nelAC_ModuleBasebiblioteca. LaAC.ModuleIl blocco funzione fornisce già numerosi metodi e proprietà che non devono essere sovrascritti.
La dichiarazione inizia con la parola chiave
MODULEseguito dal nome del modulo e dalla parola chiave aggiuntivaIMPLEMENTED_BY, nonché dal blocco funzionale che implementa il modulo. Nello specifico, questo blocco funzionale è ilRoomblocco funzione appena creato. Nella maggior parte dei casi, ilMetaDatala sezione è ora dichiarata.Per informazioni dettagliate su tutti i parametri e le sezioni, vedere: Editor di moduli.
Poiché il
Roomil modulo è il modulo di primo livello nel nostro esempio, lo dichiariToplevelsezione successiva. In questa sezione, si definisce un nome per l'elenco delle variabili globali che contiene il nome dell'istanza del blocco funzione di primo livello dopo la generazione. Successivamente, è ancora necessario definire almeno un altro task nella sezioneToplevelsezione. Questo compito èStandard_Taskin questo esempio. È definito come unMEDIUMcompito e contiene ilCREATE_IF_MISSINGEUPDATE_IOSbandiere.
Tutte le icone e le stringhe utilizzate come segnaposto per le descrizioni e le icone (
Desc,Icon_16, EIcon_32parametri) devono essere referenziati negli elenchi di testo e nei pool di immagini. Per questo motivo, si crea un elenco di testo corrispondente.TLe un pool di immaginiIPnel pool POU che contiene le icone e i testi a cui si fa riferimento.Sottomodulo:
SwitchCreare una dichiarazione di modulo e un blocco funzione corrispondente denominato
SwitchQuesto modulo non è un modulo di primo livello e quindi non richiede unToplevelsezione. Come tutti i blocchi funzionali che rappresentano moduli, ilSwitchil blocco funzione deve anche estendersiAC.modules. Inoltre,Switchimplementa ilISwitchinterfaccia che devi anche creare. A sua volta, ilISwitchl'interfaccia si estendeAC.IModulema non aggiunge nuovi metodi o proprietà.Inoltre, l'interruttore richiede un segnale di ingresso per riconoscere quando viene premuto. Si dichiara questo segnale nel
IOsezione, utilizzando ilxInvariabile di input delSwitchblocco funzione. Inoltre, è necessario un tempo di riferimento per distinguere le due funzioni dell'interruttore: premere l'interruttore per la durata del tempotTimerAvvia la funzione dimmer: una pressione più breve accende o spegne solo la luce. È possibile definire la variabile di input.tTimercome parametro del modulo (Parameterssezione). In questo modo, sarà possibile impostare facilmente l'ora in un secondo momento quando si utilizzano i moduli.Definisci le variabili
xInEtTimercome input delSwitchblocco funzione, in cui si imposta un valore iniziale di 500 ms per iltTimerparametro.
Per visualizzare le descrizioni è inoltre necessario ampliare l'elenco di testo e il pool di immagini.
Sottomodulo:
SwitchSimpleIl secondo modulo switch che crei è un semplice switch con solo due stati: acceso e spento. Per farlo, devi creare una dichiarazione di modulo e un blocco funzione che differiscono dall'interruttore esistente solo per i seguenti punti: il parametro e il
tTimerle variabili non sono obbligatorie. Inoltre, non è necessario implementareISwitchMaISwitchSimple, che si estende ancheAC.IModule.
Sottomodulo:
LightCome prima per gli interruttori, anche per la luce è necessario creare una dichiarazione di modulo
Lightcon ilLightblocco funzione eILightinterfaccia.Per inserire il
Lightmodulo sotto una stanza, è necessario aggiungere ilSlotssezione alLightdichiarazione del modulo. In questa sezione, si dichiara una sottosezioneSlot_Multi, che tu chiamiLightse che può contenere i moduli di tipoILightIl numero di luci che devono o possono essere aggiunte a una stanza è specificato daCardinalityDefinisci anche le variabiliVariableEVar_Counte collegarli alla dichiarazione del modulopLights(POINTER TO ILight)EuiNumberOfLights (UINT). Ciò garantisce che solo i moduli i cui blocchi funzionali implementano l'ILightl'interfaccia può essere aggiunta aLightsfessura.
Con il
Lightmodulo, si definisce anche uno slot in cui è possibile inserire un interruttore. Pertanto, è necessario aggiungere unSwitchfessura per ilLightdichiarazione del modulo. Parametri aggiuntivi delLightil modulo è la velocità del dimmerrSpeede la massima luminositàuiMaxValueInfine, è necessario definire un output che rappresenti la luminosità della luce. È necessario aggiungere tutti i parametri, gli slot e gli output, nonché le variabili per l'Lightblocco funzionale.
Sottomodulo:
LightSimpleL'ultimo modulo che crei è una luce semplificata che funziona con un semplice interruttore. Per farlo, hai bisogno di una dichiarazione di modulo e di un
LightSimpleblocco funzionale che estendeAC.Modulee implementa l'esistenteILightinterfaccia. Le differenze rispetto all'Lightmodulo sono i seguenti: l'output dovrebbe essere di tipoBOOLe hanno il nomexSwitchedOnInoltre, ilrSpeedil parametro non è obbligatorio.
Implementazione
Per l'implementazione della funzione per la
Switchmodulo, utilizzare ilCallPrioMediumStartmetodo daAC.Modulee sovrascriverlo con la propria implementazione. Questa funzione è selezionata perchéRoomil modulo di primo livello dichiara unMEDIUMcompito. Ciò significa che ilCallPrioMediumStartmetodo delSwitchIl blocco funzione viene chiamato automaticamente a ogni ciclo dell'attività. Tuttavia, la caratteristica principale dell'interruttore è la distinzione tra accensione/spegnimento e dimmerazione. Dopo aver premuto l'interruttore, un timer si avvia con un tempo preimpostabile con i parametri utente. Allo scadere del timer e con l'interruttore ancora premuto, viene applicata la funzione dimmer, rappresentata dalla variabilexPushLongLa variabilexPushè TRUE quando l'interruttore viene premuto solo per un breve periodo. Per entrambe le variabilixPushLongExPush, le proprietà vengono aggiunte in entrambi iSwitchblocco funzione e l'interfaccia in modo che possano essere utilizzati dal blocco funzione luce padre.Anche il
Lightil blocco funzione sovrascrive ilCallPrioMediumStartMetodo. A seconda del valore delle rispettive variabili di input, la luce viene attenuata o semplicemente accesa/spenta. Per il dimmer, il valore della velocità del parametro dichiaratorSpeedviene utilizzato. Una volta raggiunto il valore massimo o minimo di dimmerazione, la dimmerazione si interrompe. Se la luce è dimmerata e si preme l'interruttore, la luce si accende.Potete vedere una possibile implementazione nel progetto di esempio.
Ingegneria
Si crea l'albero dei moduli in Moduli vista. Per fare ciò, aggiungi prima il
Roommodulo di primo livello nell'albero dei moduli dopo che i moduli sono stati importati. NelLightsslot, aggiungine unoLighte unoLightSimpleA ciascuno di questi, assegnare unSwitcho unSwitchSimple. Quindi è possibile impostare i parametri e gli I/O delle istanze del modulo. A scopo di test, è consigliabile collegare gli input e gli output alle variabili in un elenco di variabili globali.Infine, utilizzare il Compositore → Creare Comando per creare il progetto. Dopo averlo scaricato su un dispositivo, puoi testare l'esempio come preferisci. Puoi anche variare la disposizione della stanza senza dover modificare il codice o i moduli. Puoi anche modificare i valori dei parametri di istanza del modulo e verificarne gli effetti. I valori dei parametri possono essere modificati sia offline che online.

Requisiti di sistema e restrizioni
Sistema di programmazione | CODESYS Development System (versione 3.5.17.0 o superiore) |
Sistema di esecuzione | CODESYS Control Win (versione 3.5.17.0) |
Componenti aggiuntivi | CODESYS Application Composer |
Avviso
SCARICAMENTO Progetti