Skip to main content

Progettazione e Sviluppo

Quando si programma graficamente nel diagramma di classe, le modifiche apportano automaticamente adattamenti per gli oggetti in POU vista e Dispositivi Visualizza. Nuovi oggetti vengono inseriti nella loro struttura di base e gli oggetti esistenti vengono adattati. Ad esempio, è possibile inserire dichiarazioni nelle POU tramite il diagramma delle classi.

Ciò consente di progettare l'architettura della propria applicazione in un diagramma di classe e ottenere le POU adatte in modo sincrono. Quindi integri le implementazioni nelle POU.

I passaggi seguenti creano un diagramma di classe per un'applicazione.

1. Creazione di un progetto

  1. Aprire CODESYS.

  2. Clic File → Nuovo progetto.

  3. Specificare il nome e la posizione e selezionare il Progetto standard modello.

    Il Progetto standard si apre la finestra di dialogo.

  4. Per PLC_PRG in, seleziona il Testo strutturato (ST) linguaggio di attuazione.

    Il progetto è creato.

  5. Seleziona il Applicazione codice e fare clic Aggiungi oggetto → Diagramma di classe UML.

    Il Aggiungi diagramma di classe UML si apre la finestra di dialogo.

  6. Specificare il nome dell'oggetto CD_Simple.

  7. Seleziona il Importa la struttura del progetto nel diagramma di classe attivo opzione.

  8. Clic Aggiungere.

    _uml_img_cd_simple.png
  9. Salva il progetto come SimpleMachine.project.

2. Identificazione delle interfacce

Le interfacce determinano metodi e proprietà pubblicamente visibili per implementare le classi.

  1. Apri l'editor del diagramma di classe CD_Simple.

  2. Nel Cassetta degli attrezzi visualizzare, selezionare un'interfaccia.

  3. Trascina l'interfaccia nell'editor.

    Il Aggiungi interfaccia si apre la finestra di dialogo.

  4. Specificare il nome IBaseMachine. Clic Aggiungere per uscire dalla finestra di dialogo.

  5. Nel Cassetta degli attrezzi visualizzare, selezionare un metodo.

  6. Trascina il metodo nell'interfaccia.

    Il Aggiungi metodo di interfaccia si apre la finestra di dialogo.

  7. Specificare il nome DoIt.

  8. Specificare il tipo di reso BOOL. Clic Aggiungere per uscire dalla finestra di dialogo.

  9. Nel Cassetta degli attrezzi visualizzare, selezionare una proprietà.

  10. Trascina la proprietà nell'interfaccia.

    Il Aggiungi proprietà interfaccia si apre la finestra di dialogo.

  11. Specificare il nome StateNumber.

  12. Specificare il tipo di reso INT. Clic Aggiungere per uscire dalla finestra di dialogo.

    _uml_img_cd_simple_imachine.png

Suggerimento

Per ulteriori informazioni sulle interfacce, vedere: Oggetto: interfaccia e Oggetto: Proprietà interfaccia

3. Identificazione delle classi e implementazione di un'interfaccia

Classi diverse che implementano la stessa interfaccia contengono gli stessi metodi e proprietà. Se l'interfaccia viene modificata o estesa in un secondo momento, ciò influirà su tutte le classi di implementazione.

  1. Apri l'editor del diagramma di classe CD_Simple.

  2. Nel Cassetta degli attrezzi visualizzare, selezionare una classe.

  3. Trascina la classe nell'editor.

    Il Aggiungi POU si apre la finestra di dialogo.

  4. Specificare il nome FB_Machine.

  5. Seleziona il Blocco funzione opzione.

  6. Per la lingua di implementazione, selezionare Carta di stato UML (SC). Clic Aggiungere per uscire dalla finestra di dialogo.

    La classe FB_Machine viene aggiunto al diagramma di classe.

  7. Seleziona la classe.

    Le icone dei comandi vengono visualizzate sopra la classe.

  8. Clicca il _uml_icon_realization.png Realizzazione (IMPLEMENTS) icona del comando e fare clic su IMachine interfaccia.

    Il Seleziona Lingua di implementazione si apre la finestra di dialogo.

  9. Selezionare Testo strutturato (ST).

    La classe FB_Machine eredita le proprietà ei metodi dell'interfaccia e quindi implementa l'interfaccia IMachine.

    _uml_img_cd_simple_fbmachine.png

4. Generalizzare

In generale, una classe eredita le proprietà ei metodi di un'altra classe.

  1. Apri l'editor del diagramma di classe CD_Simple.

  2. Nel Cassetta degli attrezzi visualizzare, selezionare una classe.

  3. Trascina una classe nell'editor.

    Il Aggiungi POU si apre la finestra di dialogo.

  4. Specificare il nome FB_Machine_A.

  5. Seleziona il Si estende opzione e specificare la classe FB_Machine nel campo di immissione.

    Il blocco funzione FB_Machine è esteso e quindi è una generalizzazione di FB_Machine_A.

  6. Per la lingua di implementazione, selezionare Carta di stato UML (SC). Clic Aggiungere per uscire dalla finestra di dialogo.

    La classe FB_Machine_A viene creato nel diagramma di classe. Esiste una generalizzazione tra le classi FB_Machine e FB_Machine_A. FB_Machine_A eredita le sue proprietà e metodi da FB_Machine.

  7. Nel Cassetta degli attrezzi visualizzare, selezionare il Dichiarazione variabile elemento e trascinalo nella classe FB_Machine_A.

    Il Dichiarare la variabile si apre la finestra di dialogo.

  8. Specificare il nome iCounter e il tipo di dati INT. Clic ok per uscire dalla finestra di dialogo.

    Ora la classe FB_Machine_A ha le proprie variabili oltre alle proprietà e ai metodi ereditati.

  9. In classe FBMachine_A, selezionare il metodo DoIt() e premere il Del chiave.

    Il metodo viene rimosso dal diagramma, così come l'oggetto nel file Dispositivi Visualizza. Il blocco funzione ereditario FBMachine_A non necessita di una propria implementazione speciale per il metodo. Invece, chiama il metodo DoIt del blocco funzione di base FBMachine quando necessario.

    Nota

    Quando si richiamano metodi assegnati a un blocco funzione di base ed ereditati, utilizzare il puntatore SUPER.

    _uml_img_cd_simple_fbmachine_a.png

Suggerimento

Per ulteriori informazioni, vedere Estensione di un blocco funzione e Puntatore: SUPER.

5. Istanziare

  1. Apri l'editor del diagramma di classe CD_Simple.

  2. Seleziona il programma PLC_PRG.

    Le icone dei comandi vengono visualizzate sopra il programma.

  3. Clicca il _uml_icon_composition.png Composizione (VAR) icona del comando e fare clic su FB_Machine_A classe.

    Il Dichiarazione variabile si apre la finestra di dialogo.

  4. Specificare il nome fb_A.

    L'oggetto fb_A della classe FBMachine_A è istanziato. Ora, l'istanza della classe nella sua forma concreta viene generata in fase di esecuzione.

    _uml_img_cd_simple_plc_prg.png

Il diagramma di classe mostra tutti gli oggetti rilevanti per la generazione del codice dell'applicazione. Soprattutto, però, il diagramma delle classi visualizza le relazioni tra gli oggetti: chi implementa chi? Chi eredita da chi? Chi istanzia cosa? In caso contrario, queste informazioni sono nascoste nella dichiarazione e ad esempio non possono essere visualizzate nel Dispositivi Visualizza.

6. Implementazione

  1. Aprire il blocco funzione FBMachine.

  2. Dichiarare le variabili del blocco funzione.

    FUNCTION_BLOCK FBMachine IMPLEMENTS IBaseMachine
    VAR
        iState: INT;
        iMachine : INT;
    END_VAR
  3. Implementare il blocco funzione.

    iState := iState + 1; // Dummy for control ID
  4. Implementa il suo metodo DoIt.

    METHOD PUBLIC DoIt : BOOL
    iMachine := iMachine + 1; // Dummy
  5. Implementare il metodo Get della proprietà StateNumber di FBMachine.

    StateNumber := iState;
  6. Implementare il metodo Set della proprietà StateNumber di FBMachine.

    iState := StateNumber;
  7. Aprire il blocco funzione FBMachine_A.

  8. Dichiarare le variabili del blocco funzione.

    FUNCTION_BLOCK FBMachine IMPLEMENTS IBaseMachine
    VAR
     iCounter: INT;
    END_VAR
  9. Implementare il blocco funzione.

    iCounter := iCounter + 1;
  10. Implementare il metodo Get della proprietà StateNumber di FBMachine_A.

    StateNumber := iCounter;
  11. Implementare il metodo Set della proprietà StateNumber di FBMachine_A.

    iCounter := StateNumber;
  12. Clic Crea → Genera codice.

    L'applicazione viene compilata senza errori.

    _uml_img_cd_simple_objects.png
  13. Scarica e avvia l'applicazione.

    È possibile monitorare l'istanza del blocco funzione fb_A.

    _uml_img_cd_simple_monitoring.png