Controllo di un PLC Beckhoff da applicazioni python e realizzazione di esempio su modulo "EL2008"
←
→
Trascrizione del contenuto della pagina
Se il tuo browser non visualizza correttamente la pagina, ti preghiamo di leggere il contenuto della pagina quaggiù
__________________________________________________________________________ OSSERVATORIO ASTROFISICO DI CATANIA Controllo di un PLC Beckhoff da applicazioni python e realizzazione di esempio su modulo “EL2008” Osservatorio Astrofisico di Catania A. Giuffrida(1), (1) INAF – Osservatorio Astrofisico di Catania Rapporti interni e tecnici 3/2018 INAF - Osservatorio Astrofisico di Catania Via Santa Sofia, 78 I-95123 Catania, Italy Tel.: +39- 095-7332 111 Fax: +39-095-330592 Sede “Mario G.Fracastoro” (Etna) – Tel +39-095-911580 Fax+39-095-916184
INTRODUZIONE Lo scopo del progetto è identificare un metodo per poter controllare da uno script Python un PLC BECKHOFF. Motivazione del progetto è l’integrazione del PLC nella nuova interfaccia telescopio/spettrografo per lo strumento CAOS, in uso a Serra la Nave. Il software di controllo dello spettrografo è già esistente e scritto in Python, e viene eseguito in una workstation collegata alla LAN della stazione osservativa. Volendo utilizzare il PLC per il controllo delle movimentazioni dell’interfaccia, e in futuro di tutto il controllo dello strumento, risulta necessario far dialogare tramite gli script Python tutto il sistema. La casa produttrice del PLC (Beckhoff New Automation technology) non mette a disposizione librerie per python, è stata di conseguenza individuata una soluzione di public domain (Pyads) di cui è stato studiato il funzionamento. Il progetto di funzionalità è testato usando un modulo “EL2008” IL PLC, MODULI E PROTOCOLLO ADS Il PLC (controllore logico programmabile) è un dispositivo usato nell'automazione industriale, è l’elemento base del sistema di controllo di macchine e processi, questo elabora segnali provenienti da sensori presenti in un impianto e comanda attuatori che svolgono particolari lavori, si tratta di un apparato progettato e costruito per poter operare in condizioni critiche di temperatura, umidità, sbalzi di tensioni, ambienti rumorosi e può rimanere acceso anche per lunghi periodi. È un vero computer e al suo interno vi è il processore, la ram e l’unità di storage, oltre a tutte le porte i/o per comunicare con tastiera, mouse, monitor ecc. Come qualsiasi computer vi è installato un sistema operativo. Il modulo più importante è certamente la CPU (Central Processing Unit) in esso avvengono elaborazione matematiche e la gestione del PLC. La CPU può contenere uno o più microprocessori, una memoria che influisce sulla velocità di elaborazione. La Ram contiene la sequenza delle istruzioni di programma e i dati da elaborare. In alcuni PLC sono presenti anche memorie di tipo flash che sono supporti di memorizzazione non volatile elettronici (a stato solido) che possono essere cancellate elettricamente e riprogrammate. L'interfaccia di I/O (analogica o digitale), serve per rilevare le condizioni operative dell'impianto (sensori, trasduttori ecc.) e dispositivi per comandare attuatori come i motori elettrici (valvole, elettrovalvole), converte il segnale elettrico di input in un segnale logico (bit o word) e lo riportano nell'output. Questa trasformazione o passaggio avviene per mezzo di collegamenti elettrici che prendono il nome di bus dati. IL PLC, generalmente è di piccole dimensioni e può essere inserito in un quadro elettrico. A questo si collegano dei moduli che possono gestire motori, frese, sensori, impianti elettrici ed è possibile automatizzare un ciclo di produzione industriale. 2
FIG1 schema di produzione industriale con un PLC Moduli La Beckhoff Automation produce per i propri PLC dei moduli che servono a pilotare gli attuatori, questi possono essere montati su una barretta DIN così come il PLC e possono essere di svariati usi, possono pilotare motori, sensori, I/O ecc
EtherCAT I moduli Beckhoff sono collegati al PLC tramite un BUS superveloce denominato EtherCAT (Ethernet per Control Automation Technology) è un sistema fieldbus basato su Ethernet, inventato da Beckhoff Automation. Il protocollo è standardizzato in IEC 61158 che è il linguaggio usato dai sistemi Beckhoff ed è adatto sia per le esigenze di calcolo in tempo reale sia per le tecnologie di automazione. L'obiettivo durante lo sviluppo di EtherCAT era di applicare Ethernet per applicazioni di automazione che richiedevano tempi di aggiornamento dei dati brevi (detti anche tempi di ciclo ≤ 100 μs) con bassa jitter di comunicazione (per scopi di sincronizzazione precisi ≤ 1 μs) e costi hardware ridotti EtherCAT ha le seguenti caratteristiche: velocità di trasmissione: 2 x 100 Mbit/s (Fast Ethernet, Full-Duplex) Tempi di aggiornamento: 256 digitali I/O in 11 μs 1000 digital I/O distribuiti su 100 nodi in 30 μs = 0.03 ms 200 analogiche I/O (16 bit) in 50 μs, 20 kHz Sampling Rate 100 Servo-Axis (ognuno 8 Byte In+Out) in 100 μs = 0.1 ms 12000 digitali I/O in 350 μs. Il Protocollo ADS Un computer remoto può dialogare con un singolo modulo del PLC perché l'architettura del sistema TwinCAT consente di trattarli come dispositivi indipendenti, i messaggi tra questi oggetti vengono scambiati attraverso una interfaccia ADS tramite il router di messaggi. Il protocollo utilizzato è ADS (Automation Device Specification) definisce un insieme di regole che permettono lo scambio di dati tra PLC e moduli ad esso collegati o tra moduli e moduli. ADS è un sistema di comunicazione basato su messaggi. Questo protocollo offre la libertà di utilizzare altri strumenti per comunicare con qualsiasi punto in TwinCAT. Se è necessario comunicare con un altro PC o dispositivo, il protocollo ADS viene utilizzato su TCP/IP. Ciò significa che in un sistema in rete, tutti i dati sono accessibili da qualsiasi punto desiderato. Per accedere ai dati si utilizzano delle funzioni che sono contenuti in alcuni librerie, quella utilizzabile dal linguaggio di programmazione Python è “Pyads”. AdsAmsNetID Ogni PC sulla rete può essere identificato in modo univoco da un indirizzo TCP / IP. Nel caso lo scambio di dati dovesse avvenire tra un personal computer e un modulo del PLC in rete, dovranno mettersi in comunicazione i router di messaggi TwinCAT, di entrambi, tali router vengono identificati tramite AdsAmsNetID, questo è un numero che viene creato durante l'installazione di TwinCAT, costruiti generalmente dall'indirizzo TCP/IP del dispositivo con L’aggiunta ".1.1" (come se fosse una "maschera di sottorete") . Il PLC del nostro progetto ha l’Internet protocol address 192.168.1.10, il conseguente AdsAmsNetID del router di messaggi creato ha il numero 192.168.1.10.1.1, il computer remoto che dovrà gestirlo ha l’IP 192.168.1.151 e il suo router di messaggi costruito è 192.168.1.151.1.1 Tuttavia L' AdsAmsNetID può essere scelto liberamente purché rispetti le regole della maschera di sottorete. 4
La libreria Pyads Pyads è un wrapper Python per la libreria ADS di TwinCAT. Ha lo scopo di fornire un modo pioneristico per comunicare con i dispositivi TwinCAT utilizzando il linguaggio di programmazione Python. Pyads utilizza l'API C fornita da TcAdsDll.dll su Windows e adslib.so su Linux. Pyads è una pura implementazione in Python per il protocollo ADS Beckhoff . È possibile inviare comandi ADS tipici come lettura / scrittura su TCP / IP. Non sono necessarie altre librerie (o TwinCAT su Windows).Twincat e ADS sono sviluppati da Beckhoff (http://www.Beckhoff .de). Pyads non è affiliato in alcun modo alla casa costruttrice. Pyads non contiene un router ADS: è progettato per una connessione diretta client-server. Chiariti questi concetti, non rimane che assemblare i nostri dispositivi. PROGETTO DI ESEMPIO Per testare il metodo di controllo del PLC tramite python e Pyads e dare un esempio di funzionamento di un sistema generico, si vuole realizzare un programmino che da remoto gestisca l’accensione di led collegati ad un modulo Beckhoff, ripercorriamo qui passo passo le operazioni hardware /software necessarie per installare tale sistema. In figura 2 lo schema hardware del collegamento dei nostri dispositivi. Le operazioni da effettuare sono: 1. Collegare il PLC e un computer in rete tramite un router-switch e assegnare un IP statico ad entrambi. 2. Installare il software di gestione nel PLC. 3. Installare il software che configuri il PLC nel computer remoto. 4. Configurare il PLC dal computer remoto. 5. Installare nel pc remoto il linguaggio di programmazione Python e le librerie. 6. Creare il programma in Python, che dal pc remoto, accenda e spenga dei led collegati al modulo “EL2008”
FIG4 caratteristiche del nostro PLC In Tale PLC è installato un Sistema operativo Microsoft xp Service Pack 3. Modulo “EL2008” Al CX5020 è collegato un modulo “EL2008” (fig. 5) questo è un terminale che ha 8 canali dalle quali può fornire una tensione continua di 24 V a carichi che assorbono un massimo 0.5 A. Lo scopo di tale modulo è quello di poter gestire un massimo di otto dispositivi elettrici sincronizzandoli secondo le esigenze dell’utente utilizzatore. Questo è possibile programmando il PLC tramite software applicativo o software proprietario della casa costruttrice. Le caratteristiche del modulo “EL2008” sono riportate nella figura 7. 8
FIG7 caratteristiche tecniche del “El2008”
La configurazione di rete Abbiamo collegato il nostro PLC tramite cavo di rete Lan Ethernet Cat 6 RJ45 ad un router di rete il quale gli fornisce un indirizzo IP (Internet Protocol address) fisso che nel nostro caso è: 192.168.1.10. Al router di rete abbiamo collegato anche un computer remoto a cui è stato dato un IP: 192.168.1.151 (figura 8). FIG8 schema di rete del nostro progetto Installare il software di gestione nel PLC La prima operazione da fare è quella di installare nel controllore logico programmabile un software fornito dalla casa costruttrice che configuri il sistema e permetta un accesso remoto. La Beckhoff mette a disposizione un programma chiamato TwinCAT “the Windows Control and Automation Technology”. Nel nostro progetto è stato utilizzato TwinCat ver 3.1 buld 4020. Il software di automazione TwinCAT rappresenta la piattaforma integrata per il controllo di funzionalità PLC. Nella versione 3 di TwinCAT, l'engineering viene notevolmente ® facilitato grazie all'integrazione di tutti i tool in un ambiente di sviluppo basato su Microsoft Visual Studio , nel quale vengono integrati i configuratori e l'ambiente di programmazione per IEC 61131. Con C e C++ sono disponibili altri linguaggi per la programmazione. Il programma compresso in formato zip è costituito da 2 file: Il primo “TC31-XAR-Setup.3.1.4020.39.exe” serve per installare TwinCat nel PLC e il secondo file “TC31-Full-Setup.3.1.4020.39.exe” nel pc gestore. E’ importante che entrambi i dispositivi abbiano installata la stessa versione poiché è stato accertato dai nostri test che non si ha una comunicazione “perfetta” se si usano file da 2 pacchetti differenti. Il software TC31-Full- Setup.3.1.4020.39.zip che contiene i 2 files, attualmente può essere scaricato dal seguente link: https://www.Beckhoff .com/english.asp?download/tc3-download-xar.htm necessita però la registrazione nel sito. TwinCat è gratuito per 7 giorni, e la licenza può essere rinnovata all’infinito. Scaricato e posto su una chiavetta TwinCat può essere installato facendo doppio click sul file “TC31-XAR-Setup.3.1.4020.39.exe”. Si rimanda ad altri testi l’installazione del software “TwinCat” sia nel PLC che nel pc di gestione, poiché ampiamente documentato in internet http://ftp.Beckhoff .com/download/software/TwinCAT/TwinCAT3/FirstSteps/TC3_Mini_Booklet_GB.PDF 12
il Pc di gestione Il computer utilizzato nel nostro progetto che dovrà pilotare il PLC ha le seguenti caratteristiche: CPU core i3 2,40 ghz Ram 4,00 GB Hard disk 500 GB E vi è installato un sistema operativo Windows 7 64 bit. Questo è stato collegato al router di rete e gli è stato dato un IP fisso pari al numero: 192.168.1.151. Anche in questo computer viene installato il software Twincat e precisamente il secondo file del pacchetto scaricato che ha il nome: TC31-Full-Setup.3.1.4020.39.exe. Facendo doppio click sul file anche nel pc di gestione viene avviato il wizard. Il file TC31-Full-Setup.3.1.4020.39.exe alla fine avrà installato sul computer i seguenti programmi: Microsoft Visual Studio 2013 Shell (integrated) Microsoft Visual Studio 2013 (Isolated) Beckoff TwinCat 3.1 (build 4020) Beckoff TwinCat 3 Scope Beckoff TwinCat PnP Drive Uso di TwinCat del Pc di gestione per configurare il PLC Come detto in precedenza si dovrà predisporre il controllore logico programmabile a ricevere istruzioni da un computer o da più pc posti nella stessa rete lan. A questo scopo si utilizzerà l’ambiente di sviluppo Microsoft Visual Studio 2013 Shell (integrated), installato nel pc di gestione, che si avvierà dopo aver cliccato sulla relativa icona.
FIG9 New Project Dal menu File selezionare New Project, figura 9. 14
FIG10 si sceglie la cartella dove posizionare i files di progetto Si dà il nome che nel nostro caso è EL2008, e la directory dove saranno posizionati i file del progetto, figura 10.
FIG11 a mbiente di sviluppo Comparirà un ambiente di sviluppo con una finestra chiamata Solution Explorer con dentro le cartelle del nostro programma. La principale che porta il nome del progetto e le sottocartelle: SYSTEM, MOTION, PLC, SAFETY,C++, I/O, figura 11. Sarà necessario stabilire il collegamento con il PLC e questo si potraà fare selezionando la voce “choose target system” dalla barra dei menu “TwinCat XAE Base”, si accede dalla freccetta in basso al lato della scritta: figura 12. FIG12 si stabilisce il collega mento con il plc 16
FIG13 si cerca sulla rete il PLC Comparirà una finestra titolata “Choose Target System” e bisognerà selezionare il pulsante “Search (Ethernet)” figura 13.
FIG14 ricerca del PLC tramite hostna me o IP address Nel caso si conoscesse già l’hostname o l’IP address del PLC basterà inserirlo nel riquadro al lato della label “Enter hostname/IP” altrimenti bisognerà cliccare sul pulsante “Broadcast Search” per fare una ricerca in rete, figura 14. 18
FIG15 schermata che ci conferma che il PLC è stato trovato Se il PLC è configurato in Ethernet, comparirà la videata di figura 15 e il programma ci dirà: 1. il nome del PLC 2. se questo è connesso con il pc di gestione, comparirà una x 3. L’AmsNetId che ricordiamo è l’indirizzo del router di messaggi del PLC che usualmente è composto dall’ indirizzo IP del PLC con l’aggiunta di ulteriori 2 bit generalmente .1.1 4. la versione di Twincat del PLC 5. il suo sistema operativo. Se noi clicchiamo sul pulsante Add Route il Twincat si collegherà al PLC.
FIG16 accesso al PLC tramite username e password Considerato che il controllore logico programmabile è protetto da un login e una password bisognerà fornire entrambi per stabilire il collegamento. figura 16. 20
FIG17 collega mento effettuato La videata di figura 17 ci conferma che il collegamento è stato stabilito.
FIG18 messaggio di TwinCat Il Programma si accorge che la piattaforma TwinCat del PLC è del tipo x86 e ci chiede se vogliamo commutare a quest’ultima, clicchiamo su “si”, figura 18. 22
Scansione di EtherCAT per aggiungere “El2008” al progetto FIG19 ricerca del modulo “EL2008” collegato al PLC Ricordando che lo scopo è quello di programmare i canali di un modulo “EL2008” collegato al PLC, come prossimo passo è quello di poter aggiungere questo componente al nostro progetto. Questa operazione avviene automaticamente con alcuni semplici passaggi: Da Solution Explorer nella cartella I/O selezionando con il pulsante destro del mouse la voce Devices e di seguito scan TwinCat cercherà tutti i dispositivi collegati al PLC, figura 19.
FIG20 avviso La videata di figura 20 ci informa che non è sicuro che tutti i dispositivi vengono riconosciuti automaticamente. Cliccare su Ok 24
FIG21 scansione dei dispositivi collegati al PLC tramite bus EtherCAT Il sistema trova dispositivi fieldbus EtherCAT e ci chiede in quale di questi bisognerà fare la scansione per trovare il modulo “EL2008” collegato. Scegliamo il primo e clicchiamo su ok, figura 21.
FIG22 scansione dei dispositivi collegati Cliccare su “si”, figura 22. 26
FIG23 dispositivi trovati La ricerca ha avuto esito positivo e sono stati trovati 2 terminali: “EL2008” che contiene tutti i canali che vogliamo programmare e un “EL1018” che non è oggetto del nostro studio. Il twincat riconosce automaticamente i moduli fabbricati dalla BECKHOFF e ci visualizza automaticamente i canali, figura 23. Creare le variabili dei canali da esportare per un linguaggio di programmazione esterno TwinCAT usa per la programmazione il linguaggio standard IEC 61131-3 o gli ambienti di sviluppo con i linguaggi C e C++ e si potrebbero utilizzare questi, noi per esigenze del progetto useremo il Python. Fortunatamente TwinCat ci dà la possibilità di condividere variabili sia in lettura che scrittura, che noi gestiremo con Pyads. Creeremo quindi 8 variabili, una per ogni canale, queste dovranno essere definite dentro un file main.prg nella directory PLC.
FIG24 inserimento di 8 variabili nel progetto Iniziamo cliccando con il tasto destro del mouse nella directory PLC, comparirà un menù, scegliere “Add New Item...”, figura 24. 28
FIG25 locazione dei files All’apertura della relativa finestra, scegliere “Standard PLC Project”, inserire il nome e il direttorio dove saranno posizionati i file. figura 25.
FIG26 creazione delle cartelle Si creeranno automaticamente delle sotto cartelle: “External Types”, “References”, “DUTs”, “GVLs”, “POUs” ”VISUs” , “Plc Task” e “EL2008 Instance”. Dentro il direttorio “POUs” c’è il file MAIN(PRG) che è quello dove dobbiamo dichiarare le nostre variabili. figura 26. 30
FIG27 definire le variabili Le variabili devono essere dichiarate nel formato IEC1131-3 standard e sono comprese tra le diciture VAR ed END_VAR, ne creeremo otto una per ogni canale che chiameremo chan1, chan2, chan3, chan4, chan5, chan6, chan7, chan8. I canali svolgono la funzione di fornire tensione continua elettrica a dei carichi quindi le variabili fungono da interruttori e non potrebbero essere altrimenti che dei booleani. I programmi PLC operano con nomi di variabili simbolici, evitando così il verificarsi di effetti collaterali (sovrapposizioni) quando si usano variabili. Per accedere al livello di input / output, è necessario che il programmatore sia in grado di assegnare un indirizzo fisso a singole variabili. Questo risultato si ottiene con la parola chiave "AT", che deve essere sempre specificata quando si dichiara una variabile. La parola chiave "AT" è seguita da numerosi parametri che forniscono informazioni sulla posizione dei dati (area di input / output o flag) e la larghezza dei dati (BIT, BYTE, WORD o DWORD). La dicitura AT %Q*: nel linguaggio IEC1131-3 sta ad indicare che il dato si trova nell’area di output. Collegare le variabili ai canali Le variabili cosi come sono state create non sono riferite a niente, per fare in modo che queste vengono collegate ai canali, bisognerà eseguire una operazione di linking.
FIG28 collega mento delle variabili dichiarate con i canali fisici del modulo “EL2008” Selezionando Channel 1 del terminale (EL2008) che si trova sotto la cartella a I/O di Solution Explorer e output, cliccare con il tasto destro del mouse e dal menù che appare selezionare Change Link, figura 28. 32
FIG29 operazione di linking comparirà una finestra titolata “Attach Variable Output(Output)” che visualizzerà tutte le variabili dichiarate nel file “main.prg”, ovviamene si sceglierà la variabile corrispondente al canale, figura 29.
FIG30 operazione effettuata per tutti i canali L’operazione dovrà essere ripetuta per tutti i restanti canali e relative variabili. 34
FIG31 operazione di linking di tutti i canali Se nella finestra “Attach Variable Output(Output)” viene spuntata la dicitura “Unused“ le variabili già collegate non verranno più visualizzate.
Attivare la configurazione, run e login Adesso il progetto è stato realizzato, affinché possa essere utilizzato bisognerà compilare il tutto. FIG32 attivare la configurazione creata Per attivare la configurazione bisognerà cliccare sull’icona indicata dalla freccia in fig 32. Ci vorrà qualche secondo e alla fine delle operazioni, apparirà un messaggio che ci chiede se vogliamo riavviare il sistema twincat in modo running 36
FIG33 riavviare il si stema cioè riavviare il sistema locale TwinCAT con la configurazione correntemente attivata, cliccare su ok, figura 33.
FIG34 run mode Si attiverà così l’icona che ci avverte di essere in run mode e si disattiverà quella del config mode. figura 34. Ultima operazione è quella di collegarsi con il PLC e trasferire la configurazione del progetto. Per far ciò bisognerà cliccare sull’icona di login e vedremo attivarsi il quadratino di colore rosso e disattivarsi quella di colore verde, figura 35. FIG35 trasferimento della configurazione al PLC 38
Si vedranno i valori delle variabili che abbiamo creato relativi ai canali, figura 36. FIG36 valori delle variabili
FIG37 salvataggio del progetto Non ci resta che salvare il tutto ed uscire, figura 37. Il PLC manterrà questa configurazione finché non sarà spento. Dopo un periodo di non utilizzo del PLC non sarà necessario rifare il progetto ma basterà accendere il controllore logico programmabile, avviare TwinCAT ed eseguire le operazioni di attivare la configurazione, run e login. 40
Installare Python Dopo aver configurato il PLC con Twincat e creato le variabili dei canali del modulo “EL2008”, bisognerà gestire le tensioni di uscita di questi. Come detto precedentemente queste operazioni saranno svolte da un programmino realizzato in Python. La versione scelta è: python-3.7.0a1-amd64 , scaricabile attualmente dal sito: https://www.python.org/ftp/python/3.7.0/python-3.7.0a1-amd64.exe. Python soltanto non basta, necessita un ulteriore libreria chiamata “Pyads”. che è scaricabile attualmente dal sito: https://pypi.python.org/packages/ec/7e/93440de4698724f383876af39875dadf82db3a7f8d06a171de554c65a6 9c/Pyads-2.2.6.tar.gz Il download è un file compresso chiamato: “Pyads-2.2.6.tar.gz” che contiene una cartella”Pyads-2.2.6”. All’interno del direttorio vi è un file chiamato “setup.py”. L’installazione della libreria avviene avviando il prompt dei comandi di windows, posizionandosi nella cartella dove è il file setup.py e digitare il seguente comando: “python setup.py install + enter” La Libreria si installerà nella seguente cartella Python37/Lib/site- packages/Pyads. L’ambiente di sviluppo in Python “IDLE” Per creare un file vuoto in python posizionarsi nella cartella in cui si vuole creare il file, cliccare il tasto destro del mouse, dal menù che compare scegliere nuovo e poi documento di testo, digitare il nome che si vuole dare con estensione “.py.” Python mette a disposizione sia una shell di comandi che consente di eseguire istruzione dopo istruzione, sia un ambiente visuale che concede di modificare, eseguire, e fare il debug di programmi Python da un’unica interfaccia: IDLE (Integrated Development and Learning Environment). Per eseguire il programma strutturato basterà cliccare su Run > Run Module . Il programmino in Python Il programma realizzato in Python che ci permette di gestire le uscite del modulo “EL2008” è composto da 2 classi: La prima ”class “GestPLC” permette di collegarsi, controllare il collegamento, leggere i valori dei canali, modificare le uscite e chiudere in collegamento con il PLC. La seconda: “ class Mask() ” invece importa l’immagine del modulo “El2008” e su questa disegna i led e i bottoni che ci permettono di modificare le uscite dei canali. Questo programma chiamato EL2008.py, funziona solamente se è stata fatta la configurazione tramite TwinCAT del PLC e se sono state create le variabili e se il sistema è attivato. EL2008.py esegue i seguenti passi: 1. Si collega al PLC, se risulta connesso, carica una lista e vi inserisce i valori delle tensioni dei canali in quell’istante, altrimenti comunica che il collegamento non è stato stabilito ed esce. 2. Resta in attesa che venga cliccato un canale, se questo avviene, cambia il valore della tensione es: se l’uscita è 0 volt commuta e permette al canale di fornire 24 v o viceversa, aggiorna il valore di quel canale nella lista. 3. Nel caso si dovesse cliccare il bottone di uscita, esce dal programma
Il programma riga per riga FIG38 si importano le librerie Per prima cosa si importano le librerie: 1. “tkinter” ci permette di creare interfacce grafiche, 2. il modulo “functools” con la sua la classe “partial”, ci permette di impacchettare una funzione rimodulandola con parametri aggiuntivi secondo le nostre necessità. 3. La libreria Pyads è fondamentale per il nostro progetto, fornisce funzioni python per comunicare con dispositivi TwinCAT. Si creano delle costanti, si crea una lista chan di 8 boolean che si settano a false. Si crea una variabile “ConnPlc” che contiene la connessione al PLC identificato dall’ AdsAmsNetID = ‘192.168.1.10.1.1’ e dalla porta ‘851’ che per default è quella che stabilisce il runtime di sistema. Il corpo del programma è il seguente: 42
FIG39 istruzioni per la connessione Per prima cosa esegue la funzione connetti() della classe GestPLC se la connessione va a buon fine , esegue la funzione leggi , disegna la finestra , aggiunge la foto del modulo “El2008”, altrimenti connetti() restituisce un valore False ed il programma stampa un messaggio a video e comunica che il PLC non è disponibile o non è stata attivata la configurazione, run-login, quindi esce, figura 40. FIG40 messaggio di errore se la connessione non è avvenuta
La classe GestPLC : FIG41 class GestPLC() La classe GestPLC figura 41, contiene la funzione connetti() che è la prima funzione ad essere eseguita, “ConnPlc” è la variabile che contiene AdsAmsNetID e la porta del runtime di sistema. “.open()” è una funzione della libreria Pyads che serve ad aprire la connessione con il controllore logico programmabile , nel caso che il collegamento non fosse stabilito non viene segnalato alcun errore e quindi non viene eseguita l’except, per far ciò si usa l’istruzione ConnPlc.read_device_info(), se si riescono a leggere le informazioni del PLC , la funzione restituisce il valore “True” ,altrimenti except restituisce “False”. La seconda funzione chiamata “GestPLC.leggi()” scansiona i valori dei canali che attualmente ha il modulo “EL2008” e con questi riempie una lista chiamata chan. Il riempimento avviene con un ciclo for che legge tramite la funzione della libreria Pyads “plc.read_by_name(str(MAINchan),Pyads.PLCTYPE_BOOL)” tutti i valori da chan1 fino a chan8 definite nel PROGRAM MAIN che noi avevamo creato tramite TwinCAT. La dicitura Pyads.PLCTYPE_BOOL comunica che tali valori sono di tipo boolean. 44
La classe Mask(): FIG42 class Mask()
Il programma con l’istruzione “win = Tk()” disegna una finestra tkinter, la assegna alla variabile win e le dà il titolo EL2008 . L’istruzione photo1 = PhotoImage(file="El2008.gif"), carica un’immagine che si trova nella stessa cartella del file el2008.py e lo assegna alla variabile photo1. Infine esegue la funzione maschera() che si trova nella classe Mask e gli passa 2 parametri : la finestra e l’immagine. La funzione maschera(window,foto) disegna sull’immagine passata, 8 bottoni e 8 label che rappresentano i led che si accendono o si spengono e li posiziona secondo righe e colonne definite da tre liste: rigaled, rigabottoni e colonna. Disegna inoltre un ulteriore bottone chiamato “chiudi” che se premuto esegue la funzione chiudi() che interrompe la connessione, non visualizza più la finestra ed esce dal programma. La chiudi() per arrestare la connessione usa la funzione della libreria “Pyads” close() questa viene richiamata nella GestPLC.sconnetti() con l’istruzione ConnPlc.close(). Se tale tasto non viene cliccato il programma è in attesa di istruzioni. FIG43 videata del programmino in python Cliccando sui pulsanti “chan1-8” si illumineranno i led relativi ai bottoni premuti e le output forniranno la tensione di 24 volt, ri-cliccando sui stessi bottoni questi si spegneranno e la tensione fornita sarà pari a 0volt. In pratica se un pulsante viene cliccato , si esegue questa istruzione: ” command=partial(Mask.nomebottone,numero,led) )” che in python significa : esegui la funzione nomebottone che si trova nella Class “Mask” e passa il numero del canale e il led che dovrà essere illuminato. 46
FIG44 le funzioni chiudi() e no mebottone() La funzione Mask.nomebottone controlla il valore che la lista chan ha per quel canale e ne cambia lo stato (True o False), contemporaneamente esegue la funzione scrivi della classe GestPLC passandogli il nome del canale e il valore. FIG45 la funzione scrivi() La funzione ConnPlc.write_by_name(mainc,chanx, Pyads.PLCTYPE_bool) modifica il valore della variabile definita nel PROGRAM MAIN che noi avevamo creato tramite TwinCAT . Ricordiamo che ConnPLc contiene la connessione al PLC e precisamente ConnPlc = Pyads.Connection('192.168.1.10.1.1 ',851). Il parametro mainc è il nome della variabile da modificare e il suo contenuto è una stringa di cui la composizione è la somma della stringa “chan” + in numero del canale che stiamo modificando , chanx è il valore che bisogna assegnare a mainc e Pyads. PLCTYPE_BOOL comunica che mainc è un boolean.
IL listato completo di “El2088.py” 48
FIG46 il programma completo
Puoi anche leggere