Vai al contenuto

Semplice programma per gestire macchina a stati

Home Forum Programmazione IEC 61131 (LogicLab) Semplice programma per gestire macchina a stati

Stai visualizzando 2 post - dal 1 a 2 (di 2 totali)
  • Autore
    Post
  • #36048
    Anonimo
    Inattivo

    Devo realizzare un programma per un macchina che deve fare una serie di operazioni (ingressi e uscite tutte digitali), volevo capire se il modo che ho impostato di procedere è corretto o se è più conveniente prendere altre strade. Ho cercato sul forum ma non ho trovato idee. In pratica, in questo esempio ho messo un pulsante Start, un pulsante Emergenza ed un pulsante Reset. Nel boot, azzero tutte le variabili poi un programma nel main ho realizzato questo programma che realizza una macchina a stati.

    // Gestione comandi.

    IF (Emergenza=TRUE) THEN  Stato:=99; //Se si preme il pulsante emergenza và a stato 99
    ELSIF ((Stato=0) AND (Start=TRUE)) THEN Stato:=1; //Se si preme il pulsante start và a stato 1
    ELSIF (Reset=TRUE) THEN Stato:=0; //Se si preme il pulsante di reset và a stato 0
    END_IF;

    // Macchina a stati.

    CASE Stato OF
      1: //Stato 1 avanti finchè il sensore fondo non si attiva
      IF (IM1Fondo=FALSE) THEN
         Motore1:=TRUE;
      ELSE
        Motore1:=FALSE;
        Stato:=2; //passa allo stato 2
      END_IF;

      2: //Stato 2 indietro finchè il sensore inizio non si attiva
      IF (IM1Inizio=FALSE) THEN
        Motore2:=TRUE;
      ELSE
        Motore2:=FALSE;
        Stato:=0; //torna allo stato 0
      END_IF;

      99: //Stato 99 emergenza: si ferma tutto
      Motore1:=FALSE;
      Motore2:=FALSE;
      
    ELSE //?
      Motore1:=FALSE;
      Motore2:=FALSE;
    END_CASE;

    In pratica è una macchina a stati, in cui lo stato 0 è tutto fermo. quando si preme il pulsante Start si passa allo stato 1 in cui si attiva il motore1 finchè non si raggiunge il fondo (sensore). A questo punto si passa allo stato 2 in cui si attiva il motore 2 finchè non si raggiunge l’inizio (altro sensore).

    Il pulsante Emergenza, premuto in qualsiasi momento, fa passare allo stato 99 (tutto fermo), e per tornare allo stato 0 si deve premere il pulsante Reset.

    Non so se magari sia più semplice usare delle FB per i vari spostamenti, ad esempio fare una FB con un parametro che indichi se spostare il carrello in avanti completamente o parzialmente (introducendo un altro sensore), o (se il motore lo permettesse con un ingresso analogico) un altro parametro per decidere la velocità di avanzamento, ecc…

    #39690
    Sergio Bertana
    Amministratore del forum

    Il tuo post rappresenta perfettamente come realizzare una macchina a stati e per come deve funzionare la macchina è la soluzione più logica che si possa adottare. Come consiglio metterei un pulsante di emergenza di tipo NC in modo che se si interrompe il filo la macchina và in emergenza.

    Poi naturalmente inserirei un controllo di timeout sulle varie sequenze, ad esempio si controlla il valore di Stato e se non cambia per un tempo superiore allo stabilito forzo Stato 99. Questo è importante per la sicurezza, nel caso in cui non funzioni più un sensore si evita di lasciare la macchina in funzione.

    L’uso di FB è auspicabile solo nel caso di sequenze ripetute per più parti di impianto, per intenderci il tuo programma gestisce il traslo di due assi. Se avessi un impianto che ha più coppie di assi da gestire tutti nello stesso modo, la tua macchina a stati può diventare un FB di gestione assi che poi sarà istanziato per tutte le coppie di assi presenti in macchina.

Stai visualizzando 2 post - dal 1 a 2 (di 2 totali)
  • Devi essere connesso per rispondere a questo topic.