Se trovi utile il mio blog sostienimi con una piccola donazione. GRAZIE

Arduino + Automa a stati finiti in linguaggio LADDER IEC 61131-3

In questo post non spiegherò cosa sia un Automa a Stati finiti ma solo del come implementarlo in linguaggio Ladder nel modo più semplice possibile .

E’ indubbio che in Automazione lo scrivere un programma utilizzando questa tecnica presenta dei vantaggi non indifferenti , il più importante è sicuramente quello di non ritrovarsi mai a lottare con comportamenti non progettati dell’impianto.

Un’altro vantaggio non indifferente è quello di trovarsi con un programma facilmente manutentibile e modificabile.

Anche se non spiegherò nel detaglio cosa sono gli Automi a stati finiti vi allego sotto la definizione .

Un automa a stati finiti (Finite State Automata) o macchina a stati finiti (Finite State Machine) è in generale un dispositivo che in ogni istante può trovarsi in uno fra un numero finito di stati. La transizione da uno stato a quello successivo dipende dallo stato di partenza e dagli eventuali ingressi applicati all’automa. Inoltre l’automa può produrre dei valori di uscita che dipendono sia dallo stato che dagli ingressi.

Nell’esempio che vi allego sotto avremo due uscite ed un’ingresso che servirà a validare le transizioni tra uno stato e l’altro.

Ovviamente nella realtà non avrete un solo ingresso per rendere valide le transizioni e sicuramente la vostra rete avrà anche dei rami in esecuzione parallela ma nel nostro caso avremo solo solo cinque stati e di tipo sequenziale.

Per la programmazione di Arduino in linguaggio Ladder fate riferimento al seguente articolo :

Programmare Arduino in linguaggio LADDER IEC 61131-3

Sotto riporto il programma in LADDER

LDmicro export text.
Source file: Z:\home\francesco\Scrivania\Arduino PLC\LD\ldAutoma\ladder.ld from 01/04/2017 18:32:40
for 'ANSI C Code', 16 MHz crystal, 10,000 ms cycle time

LADDER DIAGRAM:
    ||                                                                                                                                                         ||
    || ; Programma di esempio per l'implementazione di un Automa a stati finiti con il linguaggio LADDER su piattaforma Arduino.                               ||
0001||                                                                                                                                                         ||
    ||                                                                                                                                                         ||
    ||                                                                                                                                                         ||
    || ; Nel programma verranno utilizzate due uscite ed un ingresso di trigger per l'avanzamento negli stati dell'Automa.                                     ||
0002|| ; Ovviamente nella realtà gli ingressi potranno essere quanti vorrete e diversi per ogni stato.                                                         ||
    ||                                                                                                                                                         ||
    ||                                                                                                                                                         ||
    || ; >> Implementazione di un lampeggiatore                                                                                                                ||
0003||                                                                                                                                                         ||
    ||                                                                                                                                                         ||
    ||                                                                                                                                                         ||
    ||      RToff             TT1                                                                                                                RLampeggio    ||
0004||-------]/[---------{TON 100 ms}----------------------------------------------------------------------------------------------------------------( )-------||
    ||                                                                                                                                                         ||
    ||                                                                                                                                                         ||
    ||   RLampeggio          Tnew                                                                                                                   RToff      ||
0005||-------] [---------{TON 100 ms}----------------------------------------------------------------------------------------------------------------( )-------||
    ||                                                                                                                                                         ||
    ||                                                                                                                                                         ||
    || ; >> Controllo delle condizioni iniziali della macchina a stati finiti                                                                                  ||
0006||                                                                                                                                                         ||
    ||                                                                                                                                                         ||
    ||                                                                                                                                                         ||
    ||      XIn2            _    _                                                                                                                RTrigger     ||
0007||-------] [---------[_/ OSR/ \_]----------------------------------------------------------------------------------------------------------------( )-------||
    ||                                                                                                                                                         ||
    ||                                                                                                                                                         ||
    ||    RStep1Run       RStep1Done        RStep2Run       RStep2Done        RSTep3Run       RSTep3Done        RStep4Run       RStep4Done        RReadyRun    ||
0008||-------]/[--------------]/[--------------]/[--------------]/[--------------]/[--------------]/[--------------]/[--------------]/[--------------( )-------||
    ||                                                                                                                                                         ||
    ||                                                                                                                                                         ||
    ||    RReadyRun        RStep5Run       RStep5Done                                                                                             RReadyRun    ||
0009||-------] [--------------]/[--------------]/[---------------------------------------------------------------------------------------------------( )-------||
    ||                                                                                                                                                         ||
    ||                                                                                                                                                         ||
    || ; >> Step1                                                                                                                                              ||
0010||                                                                                                                                                         ||
    ||                                                                                                                                                         ||
    ||                                                                                                                                                         ||
    ||    RStep1Run        RTrigger                                                                                                              RStep1Done    ||
0011||-------] [--------------] [------+-------------------------------------------------------------------------------------------------------------(S)-------||
    ||                                 |                                                                                                                       ||
    ||                                 |                                                                                                          RStep1Run    ||
    ||                                 +-------------------------------------------------------------------------------------------------------------(R)-------||
    ||                                                                                                                                                         ||
    ||                                                                                                                                                         ||
    ||    RReadyRun       RStep1Done        RTrigger                                                                                              RStep1Run    ||
0012||-------] [--------------]/[--------------] [---------------------------------------------------------------------------------------------------(S)-------||
    ||                                                                                                                                                         ||
    ||                                                                                                                                                         ||
    || ; >> Step2                                                                                                                                              ||
0013||                                                                                                                                                         ||
    ||                                                                                                                                                         ||
    ||                                                                                                                                                         ||
    ||    RStep2Run        RTrigger                                                                                                              RStep2Done    ||
0014||-------] [--------------] [------+-------------------------------------------------------------------------------------------------------------(S)-------||
    ||                                 |                                                                                                                       ||
    ||                                 |                                                                                                          RStep2Run    ||
    ||                                 +-------------------------------------------------------------------------------------------------------------(R)-------||
    ||                                                                                                                                                         ||
    ||                                                                                                                                                         ||
    ||   RStep1Done       RStep2Done        RTrigger                                                                                              RStep2Run    ||
0015||-------] [--------------]/[--------------] [---------------------------------------------------------------------------------------------------(S)-------||
    ||                                                                                                                                                         ||
    ||                                                                                                                                                         ||
    || ; >> Step3                                                                                                                                              ||
0016||                                                                                                                                                         ||
    ||                                                                                                                                                         ||
    ||                                                                                                                                                         ||
    ||    RStep3Run        RTrigger                                                                                                              RStep3Done    ||
0017||-------] [--------------] [------+-------------------------------------------------------------------------------------------------------------(S)-------||
    ||                                 |                                                                                                                       ||
    ||                                 |                                                                                                          RStep3Run    ||
    ||                                 +-------------------------------------------------------------------------------------------------------------(R)-------||
    ||                                                                                                                                                         ||
    ||                                                                                                                                                         ||
    ||   RStep2Done       RStep3Done        RTrigger                                                                                              RStep3Run    ||
0018||-------] [--------------]/[--------------] [---------------------------------------------------------------------------------------------------(S)-------||
    ||                                                                                                                                                         ||
    ||                                                                                                                                                         ||
    || ; >> Step4                                                                                                                                              ||
0019||                                                                                                                                                         ||
    ||                                                                                                                                                         ||
    ||                                                                                                                                                         ||
    ||    RStep4Run        RTrigger                                                                                                              RStep4Done    ||
0020||-------] [--------------] [------+-------------------------------------------------------------------------------------------------------------(S)-------||
    ||                                 |                                                                                                                       ||
    ||                                 |                                                                                                          RStep4Run    ||
    ||                                 +-------------------------------------------------------------------------------------------------------------(R)-------||
    ||                                                                                                                                                         ||
    ||                                                                                                                                                         ||
    ||   RStep3Done       RStep4Done        RTrigger                                                                                              RStep4Run    ||
0021||-------] [--------------]/[--------------] [---------------------------------------------------------------------------------------------------(S)-------||
    ||                                                                                                                                                         ||
    ||                                                                                                                                                         ||
    || ; >> Step5                                                                                                                                              ||
0022||                                                                                                                                                         ||
    ||                                                                                                                                                         ||
    ||                                                                                                                                                         ||
    ||    RStep5Run        RTrigger                                                                                                              RStep5Done    ||
0023||-------] [--------------] [------+-------------------------------------------------------------------------------------------------------------(S)-------||
    ||                                 |                                                                                                                       ||
    ||                                 |                                                                                                          RStep5Run    ||
    ||                                 +-------------------------------------------------------------------------------------------------------------(R)-------||
    ||                                                                                                                                                         ||
    ||                                                                                                                                                         ||
    ||   RStep4Done       RStep5Done        RTrigger                                                                                              RStep5Run    ||
0024||-------] [--------------]/[--------------] [---------------------------------------------------------------------------------------------------(S)-------||
    ||                                                                                                                                                         ||
    ||                                                                                                                                                         ||
    || ; --Fine del ciclo e reset per il riavvio della sequenza--                                                                                              ||
0025||                                                                                                                                                         ||
    ||                                                                                                                                                         ||
    ||                                                                                                                                                         ||
    ||   RStep5Done                                                                                                                              RStep1Done    ||
0026||-------] [------+------------------------------------------------------------------------------------------------------------------------------(R)-------||
    ||                |                                                                                                                                        ||
    ||                |                                                                                                                          RStep2Done    ||
    ||                +------------------------------------------------------------------------------------------------------------------------------(R)-------||
    ||                |                                                                                                                                        ||
    ||                |                                                                                                                          RStep3Done    ||
    ||                +------------------------------------------------------------------------------------------------------------------------------(R)-------||
    ||                |                                                                                                                                        ||
    ||                |                                                                                                                          RStep4Done    ||
    ||                +------------------------------------------------------------------------------------------------------------------------------(R)-------||
    ||                |                                                                                                                                        ||
    ||                |                                                                                                                          RStep5Done    ||
    ||                +------------------------------------------------------------------------------------------------------------------------------(R)-------||
    ||                                                                                                                                                         ||
    ||                                                                                                                                                         ||
    ||    RStep1Run       RStep1Done                                                                                                               YOut23      ||
0027|+-------] [--------------]/[-----------------------+--------------------------------------------------------------------------------------------( )-------||
    ||                                                  |                                                                                                      ||
    ||    RStep3Run       RStep3Done       RLampeggio   |                                                                                                      ||
    |+-------] [--------------]/[--------------] [------+                                                                                                      ||
    ||                                                  |                                                                                                      ||
    ||    RStep5Run       RStep5Done       RLampeggio   |                                                                                                      ||
    |+-------] [--------------]/[--------------] [------+                                                                                                      ||
    ||                                                                                                                                                         ||
    ||                                                                                                                                                         ||
    ||    RStep2Run       RStep2Done                                                                                                               YOut25      ||
0028|+-------] [--------------]/[-----------------------+--------------------------------------------------------------------------------------------( )-------||
    ||                                                  |                                                                                                      ||
    ||    RStep4Run       RStep4Done       RLampeggio   |                                                                                                      ||
    |+-------] [--------------]/[--------------] [------+                                                                                                      ||
    ||                                                  |                                                                                                      ||
    ||    RStep5Run       RStep5Done       RLampeggio   |                                                                                                      ||
    |+-------] [--------------]/[--------------]/[------+                                                                                                      ||
    ||                                                                                                                                                         ||
    ||                                                                                                                                                         ||
    ||                                                                                                                                                         ||
  28||------[END]----------------------------------------------------------------------------------------------------------------------------------------------||
    ||                                                                                                                                                         ||
    ||                                                                                                                                                         ||

I/O ASSIGNMENT:
  Name                       | Type                     | Pin             | Port | Pin name
 ----------------------------+--------------------------+-----------------+------+-----------
  XIn2                       | Input digitale           | (non assegnato) |      | 
  YOut23                     | Uscita digitale          | (non assegnato) |      | 
  YOut25                     | Uscita digitale          | (non assegnato) |      | 
  RLampeggio                 | Relè interno             |                 |      | 
  RReadyRun                  | Relè interno             |                 |      | 
  RSTep3Done                 | Relè interno             |                 |      | 
  RSTep3Run                  | Relè interno             |                 |      | 
  RStep1Done                 | Relè interno             |                 |      | 
  RStep1Run                  | Relè interno             |                 |      | 
  RStep2Done                 | Relè interno             |                 |      | 
  RStep2Run                  | Relè interno             |                 |      | 
  RStep3Done                 | Relè interno             |                 |      | 
  RStep3Run                  | Relè interno             |                 |      | 
  RStep4Done                 | Relè interno             |                 |      | 
  RStep4Run                  | Relè interno             |                 |      | 
  RStep5Done                 | Relè interno             |                 |      | 
  RStep5Run                  | Relè interno             |                 |      | 
  RToff                      | Relè interno             |                 |      | 
  RTrigger                   | Relè interno             |                 |      | 
  TT1                        | ritardo all' eccitazione |                 |      | 
  Tnew                       | ritardo all' eccitazione |                 |      | 

VAR LIST:
    2 bytes TT1
    2 bytes Tnew

Quello sotto invece è in contenuto del file pinmap.ini

; Questo file contiene la mappattura tra le variabili utilizzate e il PIN
; corrispondente su Arduino.
; E conveniente utilizzare sempre questo file per avere controllo delle assegnazioni

; In questo progetto ci sono due led.

;Ingresso pulsante su pin2
In2 = 2

; Led Rosso sul PIN 23
Out23 = 23

; Led Verde sul PIN 25
Out25 = 25

Dal link sotto potete scaricare l’archivio del progetto completo .

ldAutoma.zip

Comments are closed.