Archivi categoria: i miei allievi

Open PLC – Lezione 4 – installare OpenPLC Editor e realizzare un programma in LADDER

OpenPLC Editor consente di scrivere programmi PLC per il runtime OpenPLC. I programmi sono scritti secondo lo standard IEC 61131-3. L’editor è molto semplice da usare e supporta tutti e cinque i linguaggi definiti nello standard: Ladder Logic (LD), Function Block Diagram (FBD), Instruction List (IL), Structured Text (ST) e Sequential Function Chart (SFC).

Se avete scaricato la versione Windows di OpenPLC, l’editor viene installato automaticamente con OpenPLC runtime, nel caso comunque abbiate necessità di prelevare solo l’editor questo il link:

OpenPLC Editor v1.0 for Windows

Installazione Windows

Effettuate il download, scompattare il file zip, doppio clic su OpenPLC Editor.

Installazione Linux

Aprite il terminale e digitate le seguenti quattro linee di comando

sudo apt-get install git
git clone https://github.com/thiagoralves/OpenPLC_Editor
cd OpenPLC_Editor
./install.sh

Quando l’installazione termina troverete un collegamento all’applicazione dal menù delle applicazioni.

Realizziamo il primo programma

Per illustrare il funzionamento riprenderò il medesimo esempio presente sul sito di riferimento e sul medesimo circuito realizzeremo altre semplici automazioni.

Gli esempi proposti presuppongono una conoscenza di base sulla programmazione in Ladder Logic (LD).

Sono necessari:

  • OpenPLC
  • N.2 pulsanti normalmente aperti
  • N. 1 LED

Per semplicità di utilizzo per gli studenti, lavoreremo a bassa tensione, 5V cc.

Si realizzi il seguente circuito:

Osservazioni

  1. +V è la tensione positiva del vostro dispositivo, +5V per Arduino, +3,3V per Raspberry Pi e +24V per un impianto industriale.
  2. Pulsante1 e Pulsante2 sono due pulsanti, R1 and R2 sono due resistori di pull-down che possono essere scelti con valori tra 1K Ohm a 10K Ohm. Se utilizzate un PLC industriale i resistori di pull-down  sono integrati all’interno del dispositivo pertanto i pulsanti Pulsante1 e Pulsante2 possono essere collegati direttamente agli ingressi dello slave, nel nostro caso trattandosi di una scheda Arduino saranno: %IX100.0 e %IX100.1.
  3. Fate attenzione che su Raspberry Pi, i primi due ingressi (%IX0.0 e %IX0.1) sono negati direttamente nell’hardware e ciò potrebbe causare qualche confusione, quindi per mantenere le stesse funzionalità del circuito indicato sopra potete, nel LADDER, usare contatti negati, oppure più semplicemente potete utilizzare due ingressi diversi come %IX0.2 e %IX0.3.

Per realizzare un nuovo programma aprite OpenPLC Editor e fate clic su File -> Nuovo

Continua a leggere

Open PLC – Lezione 3: Slave Arduino – configurare gli I/O

E’ possibile utilizzare una scheda Arduino come slave per espandere gli I/O di un dispositivo hardware su cui funziona OpenPLC. Questa operazione è particolarmente utile se state lavorando con OpenPLC in esecuzione su un computer Windows o Linux, in questo modo collegando una scheda Arduino potremo aggiungere un’interfaccia fisica di gestione degli I/O del nostro PLC.

La scheda Arduino può essere utilizzata solo come dispositivo slave, pertanto è essenziale impostare un host, ovvero avere un OpenPLC Runtime installato su un computer con sistema operativo Windows o Linux, così come visto nelle lezioni precedenti. Vedremo inoltre nella successiva lezione come installare OpenPLC su un computer Raspberry Pi e su un Raspberry Pi 400 ed utilizzare la GPIO come I/O del nostro PLC.

Effettuare l’upload del Firmware su Arduino

Selezionate la versione corretta del firmware (si tratta di uno sketch Arduino che deve essere eseguito) per la scheda che possedete, scompattate e caricatela sulla scheda Arduino:

Aggiungere lo slave ad OpenPLC

Installato il firmware sulla scheda e mantenendo la scheda connessa al computer con cavo USB, avviare il OpenPLC Runtime sul vostro computer, effettuate il login con le vostre credenziali. Accedere al menù “Slave Devices” e clic su “Add new device”:

Compilare tutti i campi, evitare caratteri accentati come ad esempio: ç, é, ó, ñ, selezionare la scheda Arduino utilizzata, la porta COM viene identificata automaticamente, in ogni caso se doveste avere dei problemi vi ricordo che la porta COM a cui è connessa la scheda può essere desunta dall’IDE di Arduino oppure verificando dal vostro sistema operativo, quali sono le periferiche connesse.

Avviate il PLC facendo clic su “Start PLC”. Se all’interno della dashboard di OpnePLC vengono visualizzati messaggi di timeout, non preoccupatevi è una situazione normale, tutte le schede Arduino hanno una funzione di ripristino automatico che riavvia la scheda ogni volta che viene effettuata una nuova connessione USB, quindi una volta che OpenPLC avvia una comunicazione, il primo tentativo di inviare un messaggio alla scheda fallisce perché la scheda Arduino si sta ancora avviando dopo un ripristino. Dopo pochi millisecondi la scheda è completamente operativa, dovreste vedete i LED Tx ed Rx lampeggiare, ciò identifica il funzionamento del sistema.

Mappa dei Pin

Nelle tabelle che seguono è indicata la mappatura dei pin per le schede Arduino Uno e Arduino Mega. La mappatura si riferisce all’ultima versione di OpenPLC, la v3.
Ricordate che, per quanto riguarda le schede Arduino, gli I/O hanno una numerazione che differisce da altri hardware.

Mappatura pin Arduino UNO

input digitali Arduino Pin OpenPLC I/O
2 %IX100.0
3 %IX100.1
4 %IX100.2
5 %IX100.3
6 %IX100.4
output digitali 7 %QX100.0
8 %QX100.1
12 %QX100.2
13 %QX100.3
input analogici A0 %IW100
A1 %IW101
A2 %IW102
A3 %IW103
A4 %IW104
A5 %IW105
output analogici 9 %QW100
10 %QW101
11 %QW102

Mappatura pin Arduino MEGA

input digitali Arduino Pin OpenPLC I/O
22 %IX100.0
24 %IX100.1
26 %IX100.2
28 %IX100.3
30 %IX100.4
32 %IX100.5
34 %IX100.6
36 %IX100.7
38 %IX101.0
40 %IX101.1
42 %IX101.2
44 %IX101.3
46 %IX101.4
48 %IX101.5
50 %IX101.6
52 %IX101.7
14 %IX102.0
15 %IX102.1
16 %IX102.2
17 %IX102.3
18 %IX102.4
19 %IX102.5
20 %IX102.6
21 %IX102.7
output digitali 23 %QX100.0
25 %QX100.1
27 %QX100.2
29 %QX100.3
31 %QX100.4
33 %QX100.5
35 %QX100.6
37 %QX100.7
39 %QX101.0
41 %QX101.1
43 %QX101.2
45 %QX101.3
47 %QX101.4
49 %QX101.5
51 %QX101.6
53 %QX101.7
input analogici A0 %IW100
A1 %IW101
A2 %IW102
A3 %IW103
A4 %IW104
A5 %IW105
A6 %IW106
A7 %IW107
A8 %IW109
A9 %IW109
A10 %IW110
A11 %IW111
A12 %IW112
A13 %IW113
A14 %IW114
A15 %IW115
output analogici 2 %QW100
3 %QW101
4 %QW102
5 %QW103
6 %QW104
7 %QW105
8 %QW106
9 %QW107
10 %QW108
11 %QW109
12 %QW110
13 %QW111

Buon Making (di automazione) a tutti 🙂

Open PLC – Lezione 2: installare il software su Linux

L’installazione di OpenPLC è possibile anche su sistemi operativi Linux, così come indicato nella sezione specifica del sito di riferimento l’operazione è estremamente rapida.

Il modo migliore per installare OpenPLC sul vostro computer Linux è utilizzando Git che su molte distribuzioni Linux risulta già installato, nel caso in cui non lo fosse, è possibile installarlo da terminale.

Se operate con un sistema Ubuntu aprite il pannello delle applicazioni e cercate Terminale:

Digitate sul terminale il comando che segue

sudo apt-get install git

Vi verrà richiesto di inserire la vostra password

Bisogna confermare l’installazione, S per continuare

A questo punto digitate a terminale i seguenti tre comandi

git clone https://github.com/thiagoralves/OpenPLC_v3.git
cd OpenPLC_v3
./install.sh linux

Il risultato dell’azione dei tre comandi sopra indicati è il seguente:

Il processo di installazione potrebbe richiedere parecchio tempo, su alcuni computer anche 1 ora, pazientate ed attendete che il processo giunga al termine. Alla fine dell’installazione il computer sarà riavviato.
Se il riavvio non viene eseguito automaticamente procedete voi manualmente a riavviare il computer. Le modalità per il riavvio sono diverse, da interfaccia grafica, oppure in maniera più semplice da terminale.

Il reboot da interfaccia grafica viene eseguito nel modo indicato di seguito:

Il reboot da terminale avviene digitando il seguente comando:

reboot

il riavvio immediato di un PC Linux può avvenire anche utilizzando il comando shutdown in una delle due modalità indicate di seguito:

shutdown -r now
shutdown -r +0

A questo punto l’avvio di OpenPLC segue le stesse modalità viste nella lezione 1, aprite un browser e digitate:

localhost:8080

Comparirà l’interfaccia di login:

La username di default è: openplc e la password di default è: openplc.

A questo punto seguite le medesime indicazioni di cambio password che trovate al fondo della Lezione 1.

Buon Making (di automazione) a tutti 🙂

Open PLC – Lezione 1: installare il software su Windows

Durante il percorso di automazione che seguono i miei studenti, vengono utilizzati diverse tipologie di PLC impiegati in campo industriale, però al fine di rendere lo studio più agevole, completo e accessibile dal punto di vista economico a tutti gli studenti, soprattutto in una fase iniziale di un percorso di studi, un’alternativa che considero molto interessante e che utilizzerò in questo anno scolastico per le classi terze è OpenPLC un prodotto Open Source gratuito che viene impiegato anche a livello industriale.

Un PLC generalmente ha costi elevati, quindi risulta un oggetto tecnologico non accessibile a tutti gli allievi e l’utilizzo avviene principalmente a scuola. Un PLC dal punto di vista dei costi, non è paragonabile ad una scheda Arduino, scheda che nella maggior parte dei casi viene acquistata ed usata dai tutti i miei studenti.

Ma se lo studente usasse un PLC software, OpenPLC, a cui connettere uno slave per disporre degli I/O fisici realizzato con una scheda Arduino il tutto diventerebbe didatticamente ed economicamente molto interessante per le famiglie. OpenPLC non richiede risorse di calcolo elevate pertanto è usabile su PC anche poco performanti.

L’IDE di programmazione e la modalità di realizzazione delle automazioni che possono essere realizzate con OpenPLC ha delle similitudini operative simili di TIA Portal della Siemens, quindi certamente ne facilita l’approccio di utilizzo quando verranno utilizzati PLC Siemens nei successivi anni scolastici.

Questa lezione, come le successive che seguiranno nei prossimi giorni sono di supporto per  le sperimentazioni dei miei studenti. Le lezioni sono tratte dal sito di riferimento di OpenPLC. Il mio ringraziamento va a Thiago Alves che ha sviluppato il progetto.

Nella prossime lezioni vedremo:

  • Installazione su PC Linux
  • Configurazione di un dispositivo slave (Arduino) per aggiungere I/O fisici
  • Realizzazione di un programma di esempio in LADDER
  • Esercizi aggiuntivi di esempio
  • … ed altro

In questa lezione vedremo come installare ed avviare il vostro PLC software, OpenPLC, su PC Windows e come superare alcuni problemi che potrebbero esserci in fase di installazione, non capita spesso, ma in questa guida trovate tutte le indicazioni per superare i problemi, nel caso non troviate soluzione leggendo i miei appunti vi rimando al forum sul sito di riferimento.

OpenPLC è costituito da tre componenti:

  • Runtime;
  • Editor;
  • HMI Builder e ScadaBR;

Il Runtime deve essere installato sul dispositivo fisico ed è responsabile dell’esecuzione del programma.
L’Editor è il software che funzionerà sul vostro computer (PC Windows, Linux, Raspberry Pi) e che servirà per scrivere il programma PLC.
HMI Builder e ScadaBR permettono di creare delle animazioni grafiche all’interno di una pagina web che rifletto lo stato del processo industriale e consentono di comunicare  con il Runtime attraverso una connessione Modbus/TCP.

Continua a leggere

Arduino – misurare tensioni superiori a 5V dc utilizzando un partitore di tensione

Nella precedente lezione abbiamo visto come misurare una tensione non superiore ai 5V dc, vedremo ora come realizzare un semplice circuito che permette mediante un partitore di tensione la misurazione di tensioni fino a 9 Volt. Dimensionando opportunamente le resistenze di partizione potremo effettuare misure per tensioni elettriche superiori.

Precisazione importante

Gli esempi riportati in questa e nella precedente lezione ed inoltre la gran parte degli esempio classici che trovate online, sono pensati per far comprendere il funzionamento del convertitore A/D, ma è opportuno fare alcune considerazioni sulla precisione di lettura, ovvero degli errori commessi dal convertitore A/D e sull’imprecisione delle tensioni di riferimento usate dal microcontrollore per fornirvi la misura. Questo sarà argomento di una prossima lezione e vedremo come ridurre l’errore di misura.

Per rendere semplice la realizzazione utilizzeremo la batteria da 9V, ma se intendete avere dei limiti di misura diversi e superiori a 9V dovrete apportare modifiche ai valori dei componenti, ma le formule esposte restano le medesime.

Prima di procedere con la realizzazione pratica è essenziale comprendere come dimensionare le resistenze del partitore, inoltre è essenziale che la tensione sul pin analogico A0 non superi il valore di 5V. Per effettuare il dimensionamento del circuito fissiamo la massima tensione misurabile Vmis_max  a 9V e imponiamo il valore di uno dei due resistori, ad esempio R1 in modo da poter ricavare il valore di R2.

Vi ricordo inoltre che sarebbe opportuno, una volta fissate le resistenze, fare qualche considerazione sulla corrente massima entrante in A0 in modo che non venga superato il valore di 40 mA corrente massima di I/O sui pin analogici e digitali di Arduino Uno R3, ma come le resistenze che sono state scelte non correremo alcun rischio, però esporrò ugualmente il calcolo.

Nello schema che segue Vmis rappresenta la tensione da misurare, Vadc la tensione sul pin A0. I è la corrente totale che circola nel circuito.

Sappiamo che la tensione Vadc ai capi di R2 non dovrà superare i 5V. Le tensioni su R1 ed R2 saranno:

(a) VR1 = R1*I
(b) VR2 = R2*I

Pertanto la tensione Vmis sarà

(c) Vmis = VR1 + VR2 = R1*I+R2*I = (R1+R2)*I

da cui ricaviamo:

(d) I = Vmis /(R1+R2)

Sostituendo I in (a) e (b) avremo:

(e) VR1 = R1*I = R1 * Vmis /(R1+R2)
(f) VR2 = R2*I = R2 * Vmis /(R1+R2)

Per il calcolo di R2 consideriamo la formula (f) sostituendo i valori fissati, Vmis_max e R1, ricordando che VR2 è la tensioni in A0, cioè Vadc:

⇒ VR2 =  R2 * Vmis /(R1+R2)

⇒ R2 /(R1+R2)  = VR2/Vmis_max

⇒ R2 /(R1+R2)  = 5/9

⇒ R2 /(R1+R2)  = 0,56

⇒ R2  = 0,56*R1 + 0,56*R2

⇒ R2*(1-0,56) = 0,56*R1

⇒ R2 = 0,56 *R1/0,44

⇒ R2 = 0,56 * 27 * 103/0,44 = 34,363 * 103 = 34,363 Kohm

Scelgo come valore commerciale prossimo (e che dispongo nel mie scorte) il valore di 33 Kohm, quindi:

  • R1 = 27 Kohm
  • R2 = 33 Kohm

Per quanto riguarda la corrente entrante in A0, utilizziamo la formula (b):

VR2 = R2*I

I = VR2/R2

I = 5V/33000 Ω = 0,00015 A = 0,15 mA

ben al di sotto del valore massimo del valore accettabile su un pin I/O di Arduino che è di 40mA.

Schema di collegamento

Programmazione

Sviluppiamo il codice necessario per la lettura della tensione e partendo dal primo sketch della lezione precedente modifichiamone alcune parti, nei commenti la spiegazione delle varie parti.

Nel codice bisognerà tenere in conto che la tensione su A0 è data dal calcolo della partizione di tensione, pertanto sapendo che Vmis = Vadc, dalla forma (f) abbiamo:

⇒ VR2 = R2*I = R2 * Vmis /(R1+R2)

⇒ VR2 = Vadc = R2 * Vmis /(R1+R2)

⇒ Vmis = Vadc * (R1+R2)/R2

Che sarà la formula che ci consentirà di rilevare la misura.

// Prof. Maffucci Michele
// Esempio 01: Misura una tensione di 9V con Arduino
// utilizzando variabili di tipo float
// Data: 03.10.2021

// tensione di riferimento massima misurabile
const float tensioneDiRiferimento = 5.0;

float R1 = 27000.0; // 27 Kohm
float R2 = 33000.0; // 33 Kohm

float volt_adc = 0.0;
float volt_mis = 0.0;

void setup() {
  Serial.begin(9600);
  //analogReference(DEFAULT);
}
void loop() {
  // legge il valore su A0 (su R2), cioè la tensione Vadc e lo trasforma
  // in un valore numerico tra 0 e 1023

  int valoreLetto = analogRead(A0);

  // Tensione in ingresso ad A0, cioè la tensione Vadc
  // calcolo della proporzione
  // volt:tensioneDiRiferimento = valoreLetto:1023.0
  // da cui si ricava la formula che segue

  volt_adc = (valoreLetto/1023.0) * tensioneDiRiferimento;

  //Stampa del valore letto dall'ADC
  Serial.print("Valore ADC = ");
  Serial.println(valoreLetto);

  // calcolo della tensione di ingresso Vmis

  volt_mis = volt_adc*(R1+R2)/R2;

  // stampa sulla Serial Monitor la tensione misurata
  Serial.print("Tensione di ingresso = ");
  Serial.println(volt_mis);
  Serial.println(" ");

  delay(1000);
}

Esercizi per i miei studenti

Esercizio 1
Dimensionare il Circuito per misurare una tensione massima di 12V

Esercizio 2
Realizzare uno sketch Arduino che permette di dimensionare il circuito prendendo in  input, attraverso la Serial Monitor il valore massimo misurabile ed il valore di R1 e restituisce il valore di R2 calcolato.

Esercizio 3
Realizzare le medesime funzionalità dell’esercizio 2, ma il valore restituito di R2 deve essere sia quello calcolato che quello commerciale immediatamente superiore o inferiore al valore calcolato.

Buon Coding a tutti 🙂