Presentazione del progetto di supervisione, controllo, acquisizione dati di un impianto di sollevamento fognario.
Il sistema è stato realizzato utilizzando un cocktail di linguaggi/tecnologie Open Source (Linux, POE Perl, Dojo Toolkit, Firefox, PostgreSql, Comet/Bayeux, Modbus).
1. Perl SCADA & Dojo HMI
Relatore
Guido Brugnara
Progetto di supervisione, controllo, acquisizione dati
di un impianto di sollevamento fognario.
Il sistema è stato realizzato utilizzando un cocktail
di linguaggi/tecnologie Open Source
Italian Perl Workshop 2011 – Torino, 89 settembre
Linux
POE Perl
Dojo Toolkit
Firefox
PostgreSql
Comet/Bayeux
Modbus
2. Perl SCADA & Dojo HMI Guido Brugnara
Stazione di pompaggio per acque nere
L'affidabilità è un
requisito fondamentale
Italian Perl Workshop 2011 – Torino, 89 settembre
Una stazione di pompaggio
collega tra loro
due condotte fognarie
di differente livello,
assicurandone
il deflusso dei liquami.
Pare evidente cosa succederebbe se l'impianto
non dovesse funzionare!
3. Perl SCADA & Dojo HMI Guido Brugnara
Componenti dell'impianto
Vasca
Italian Perl Workshop 2011 – Torino, 89 settembre
Pompe
Gruppo elettrogeno
Impianto elettrico
Automazione
Supervisione
Sinottico
Controllo accessi
4. Perl SCADA & Dojo HMI Guido Brugnara
Impianto elettrico e automazione
Italian Perl Workshop 2011 – Torino, 89 settembre
5. Perl SCADA & Dojo HMI Guido Brugnara
Supervisione e acquisizione dei dati
Sinottico
VPN remoto
Italian Perl Workshop 2011 – Torino, 89 settembre
Internet
Sinottico
PLC
Database
FW
TCP/IP
Controllo Allarmi
accessi
RS232
smart
card
6. Perl SCADA & Dojo HMI Guido Brugnara
Sinottico (Human Machine Interface)
Requisiti:
GUI standard ADEP
Italian Perl Workshop 2011 – Torino, 89 settembre
Colori avvisi/allarmi
Controllo accessi
Gestione allarmi
Grafici
Parametri
Multiutente
Connessione remota
Nessuna installazione sui client
7. Perl SCADA & Dojo HMI Guido Brugnara
Sezioni impianto e parametrizzazione
Italian Perl Workshop 2011 – Torino, 89 settembre
9. Perl SCADA & Dojo HMI Guido Brugnara
Parametrizzazione dell'impianto
Da foglio di calcolo (XLS) a struttura dati JSON
Italian Perl Workshop 2011 – Torino, 89 settembre
use Spreadsheet::ParseExcel;
use JSON;
11. Perl SCADA & Dojo HMI Guido Brugnara
Controllo accessi
Interfaccia lettori smartcard ISOTECH
Collegamento Rs232/C
Protocollo proprietario parzialmente documentato
Reverse engineering del protocollo
Italian Perl Workshop 2011 – Torino, 89 settembre
Configurazione linea seriale:
4800bit/sec, 8 bit, no parity, no handshake
Formattazione fisica della traccia:
SS P P P P P ES LRC
- SS - Start Sentinel - Identifica l'inizio della traccia
- ES - End Sentinel - Identifica la fine della traccia
- P - Numero - Progressivo numero badge 5 digit
- CI – Numero - Codice impianto se richiesto 3 digit
- LRC - Longitudinal Redundancy Check -
Digit di controllo composto dallo XOR
progressivo di tutti i caratteri comprensivi
di SS e ES
12. Perl SCADA & Dojo HMI Guido Brugnara
PC industriale
Italian Perl Workshop 2011 – Torino, 89 settembre
Linux Ubuntu Netbook 10.04
Touchscreen
Xcfe manager
Firefox KIOSK
Ethernet x 2
Firewall Shorewall
openVPN
13. Perl SCADA & Dojo HMI Guido Brugnara
Dettagli sull'implementazione
Tre processi indipendenti gestiscono la comunicazione con il PLC,
con i lettori di smart card e con i quadri sinottici.
Italian Perl Workshop 2011 – Torino, 89 settembre
DBMS
PLC
modbus_logger
Modbus
Sinottico
DBMS touch screen
IKC
Smartcard DBMS
reader Https
IKC Sinottico
Comet remoto
Rs232
access_logger server_sinottico Sinottico
remoto
14. Perl SCADA & Dojo HMI Guido Brugnara
modbus_logger
Configurazione
Italian Perl Workshop 2011 – Torino, 89 settembre
use JSON; PLC - Modbus/TCP
use POE::Component::Client::TCP;
Logging use Protocol::Modbus;
use POE::Component::SimpleDBI; Comunicazione con
use POE::Component::Log4perl; gli altri processi
use POE::Component::IKC::Client;
use POE::Component::IKC::Responder;
15. Perl SCADA & Dojo HMI Guido Brugnara
access_logger
Configurazione
Italian Perl Workshop 2011 – Torino, 89 settembre
use JSON; Smartcard reader
RS232/C
use POE::Wheel::ReadWrite;
Logging use Device::SerialPort;
use POE::Filter::Line;
Comunicazione con
use POE::Component::SimpleDBI; gli altri processi
use POE::Component::Log4perl;
use POE::Component::IKC::Client;
use POE::Component::IKC::Responder;
16. Perl SCADA & Dojo HMI Guido Brugnara
server_sinottico
Configurazione
use JSON;
Italian Perl Workshop 2011 – Torino, 89 settembre
Quadri sinottici
use POE::Component::Server::HTTP; WEB Browser
use POE::Component::SSLify;
use Hook::WrapSub;
use HTML::Mason;
use POE::Component::Server::Bayeux;
Logging
use POE::Component::SimpleDBI; Comunicazione con
use POE::Component::Log4perl; gli altri processi
use POE::Component::IKC::Server;
17. Perl SCADA & Dojo HMI Guido Brugnara
browser sinottici
Temporizzazioni
Comunicazioni
asincrone con
Italian Perl Workshop 2011 – Torino, 89 settembre
dojo.require('dojox.timing._base'); server_sinottico
dojo.require("dojox.cometd");
dojo.require('dojox.charting.Chart2D');
dojo.require('dojox.charting.Theme');
Varie ...
dojo.require('dojo.html');
dojo.require("dijit.Dialog");
Grafici
dojo.require('dojox.string.sprintf');
dojo.require('dojo.date');