Πώς φτιάχνεται ένα λογισμικό SCADA ή τουλάχιστον πως φτιάξαμε το δικό μας.

Αν θεωρήσουμε ένα λογισμικό SCADA σαν μια αλληλουχία διαδικασιών που συμβαίνει επαναλαμβανόμενα θα μπορούσαμε να πούμε ότι ένα λογισμικό SCADA:
α) Κατά τη φόρτωση του λογισμικού αρχικοποιούνται οι ρυθμίσεις και οδηγούν τα βήματα που θα συμβούν κατά την επαναλαμβανόμενη εκτέλεση της διαδικασίας...

Τέτοιες αρχικές ρυθμίσεις είναι:
0.0 Φορτώνει τις ρυθμίσεις κάθε σήματος (πηγή, κλίμακα, όρια, θέσεις).
0.1 Συσχετίζει σήματα με στοιχεία απεικόνισης και ελέγχου, για να οπτικοποιήσει τα δεδομένα στο Human Machine Interface
0.2 Συσχετίζει τα στοιχεία απεικόνισης και ελέγχου με το περιβάλλον οπτικοποίησης ώστε να υπάρχει απεικόνιση σε καρτέλες, με στοιχεία απεικόνισης και ελέγχου σε συγκεκριμένες θέσεις με συγκεκριμένη λειτουργικότητα.
0.3 Αν η τρέχουσα εφαρμογή έχει οριστεί ως δευτερεύον λογισμικό (fail safe) ελέγχει την ομαλή λειτουργία του πρωτεύοντος και αναμένει ώστε να πάρει τον έλεγχο σε περίπτωση αστοχίας του πρώτου.
0.4 Ξεκινά τα νήματα των διαδικασιών

β) Επικοινωνούμε επαναλαμβανόμενα και πολυνηματικά με ένα νήμα για κάθε συσκευή
Κατά την εκτέλεση του λογισμικού εφόσον υπάρχει δικτυακή επικοινωνία μέσω TCP/IP αφιερώνουμε τρόπον τινά ένα (νήμα) παράλληλο πρόγραμμα επικοινωνίας για κάθε συσκευή... Σε διαφορετική περίπτωση θα έπρεπε να κάνουμε ένα κύκλο τις συσκευές με τη σειρά και από κάθε μία να μαζεύουμε σήματα και να δίνουμε εντολές. Αυτό θα μπορούσε να προκαλέσει μεγάλα προβλήματα αν ο κύκλος ανάμεσα στις συσκευές μεγάλωνε σημαντικά ή αν κάποια συσκευή καθυστερούσε να απαντήσει. Εφόσον η διαδικασίες επικοινωνιών εκτελούνται παράλληλα η εφαρμογή συνεχίσει απρόσκοπτα ακόμα και αν χαθεί κάποια συσκευή από το δίκτυο. Επιπλέον λαμβάνεται ειδική μέριμνα για αυτή την περίπτωση ώστε να γίνονται οι απαραίτητες ενέργειες επανασύνδεσης της συσκευής.
Επαναλαμβανόμενα λοιπόν για κάθε συσκευή:
1.0 Διεκπεραιώνεται η επικοινωνία ή η διαδικασία επανασύνδεσης της συσκευής αν έχει χαθεί
1.1 Συλλέγει τα σήματα/μετρήσεις -  εκτελεί την ουρά συμβάντων ή σημειώνει τη συσκευή και τα σήματά της ως προσωρινά μη διαθέσιμα.

γ) Σε ένα άλλο νήμα εκτελούνται τα προγραμματιζόμενα σενάρια από το χρήστη, μια και αυτό είναι μια διαδικασία που απαιτεί γρήγορους κύκλους ή μπορεί να προκαλέσει σφάλμα. Σαν διαδικασία το αποκαλλούμε SoftPLC (λογισμικό PLC).
2.0 Ο κώδικας χρήστη φορτώνεται και εκτελείται κυκλικά, μπορεί όμως να συμβεί επαναφόρτωσή του κατά τη λειτουργία.
2.1 Η εκτέλεση του SoftPLC μπορεί να διακοπεί από τον χρήστη και να ξαναξεκινήσει.
2.2 Ο κώδικας χρήστη μπορεί να δοθεί σε γλώσσα STL ή Javascript
2.3 Στην περίπτωση της STL ο κώδικας αξιολογείται γραμμή - γραμμή προκαλώντας αλλαγές στο Running Logic και σε δύο καταχωρητές, με αυτό τον τρόπο εκτελούνται λογικές και μαθηματικές πράξεις.
2.4 Στην περίπτωση κώδικα Javascript ο κώδικας εκτελείται κυκλικά από την V8 Engine.
2.5 Σαν είσοδοι του SoftPLC νοούνται οι πραγματικές τιμές των σημάτων όπως διαβάζονται από τις συσκευές ή οι τιμές όπως έχουν υποστεί μετατροπή σε φυσικά μεγέθη ή η κατάσταση στην οποία βρίσκεται κάποιο σήμα σε σχέση με τα όρια που έχουν τεθεί ή τιμές βοηθητικών καταχωρητών λογισμικού.
2.6 Σαν έξοδοι του SoftPLC νοούνται οι πραγματικές έξοδοι των σημάτων στις συσκευές ή τιμές βοηθητικών καταχωρητών λογισμικού.
2.7 Τα σενάρια μπορεί να μπαίνουν σε αναστολή, εφόσον κάποιες από τις εμπλεκόμενες συσκευές έχουν απώλεια επικοινωνιών.

δ) Ταυτόχρονα με τα νήματα επικοινωνιών με τις συσκευές και το SoftPLC  επαναλλαμβανόμενα συμβαίνουν τα εξής στο κεντρικό νήμα:
2.0 Επικοινωνεί με άλλες δομές λογισμικού μέσω δικτύου προκειμένου να ανταλλάξει πληροφορίες με αυτές.
2.1 Κινεί όλες τις διαδικασίες για σήματα που παράγονται από το ίδιο το λογισμικό στο ίδιο ή παράλληλα νήματα (χρονικά, καταμετρητές, αθροιστές, μνήμες, PID software controller, ανάλυση εικόνας από IP Cameras κλπ)
2.2 Προκαλεί μετατροπές της μετρούμενης τιμής σε φυσικά μεγέθη βάσει των ρυθμίσεων κάθε σήματος.
2.3 Συγκρίνει τα σήματα με συνθήκες - όρια ώστε να οδηγήσει πιθανά συμβάντα.
2.4 Η οπτικοποίηση των στοιχείων ελέγχου ανανεώνεται από μόνη της βάσει των τιμών και των καταστάσεων στις οποίες βρίσκονται τα σήματα (event driven).
2.5 Διαβάζει τις αλλαγές στα στοιχεία ελέγχου που οδηγούνται από το χρήστη προκειμένου να οδηγήσει πιθανά συμβάντα.
2.6 Βάζει σε ουρά εκτέλεσης τα συμβάντα ώστε να τα αποστείλει στις συσκευές κατά την επικοινωνία.
2.7 Συμβάντα ουράς μπορεί να είναι και προκαθορισμένες ρουτίνες λογισμικού που προκαλούν τροποποιήσεις στο οπτικό περιβάλλον ή αποστολή email, sms κλπ...

ε) Υποσύστημα επικοινωνιών http συμβαίνει σε ξεχωριστά νήματα προκειμένου να εξυπηρετήσει μεγάλο αριθμό συνδέσεων http
3.0 Φροντίζει για την επικοινωνία μέσω http προκειμένου να τροφοδοτήσει με δεδομένα απομακρυσμένους χρήστες.
3.1 Φροντίζει για την επικοινωνία μέσω http προκειμένου να τροφοδοτήσει με δεδομένα άλλες εφαρμογές SCADA ή ιστοσελίδες.
3.2 Φροντίζει για τον περιορισμό πρόσβασης και τη λήψη εντολών ελέγχου από εξουσιοδοτημένους χρήστες.
3.3 Δημιουργεί ζωντανές γεωαπεικονίσεις των εγκαταστάσεων σε Google Earth
3.4 Παρέχει CMS (content managment system) για τη σχεδίαση των σελίδων που απευθύνονται στους χρήστες του συστήματος.

στ) Σε περίπτωση εξόδου από το λογισμικό, η επικοινωνία με τις συσκευές τερματίζεται ομαλά και αποθηκεύονται οι λογισμικοί καταχωρητές.

ζ) Παρέχεται ξεχωριστό λογισμικό για την σχεδίαση του HMI με γραφικό τρόπο.