Ένα άρθρο σχετικά με το πώς να δημιουργήσετε έναν προγραμματιζόμενο λογικό ελεγκτή από μια φτηνή κινέζικη συσκευή. Μια τέτοια συσκευή θα βρει τη χρήση της τόσο στον οικιακό αυτοματισμό όσο και ως πρακτικά μαθήματα στη σχολική επιστήμη των υπολογιστών.
Για αναφορά, από προεπιλογή το πρόγραμμα Sonoff Basic λειτουργεί με μια εφαρμογή για κινητά μέσω μιας κινεζικής υπηρεσίας cloud· μετά την προτεινόμενη τροποποίηση, κάθε περαιτέρω αλληλεπίδραση με αυτήν τη συσκευή θα είναι δυνατή στο πρόγραμμα περιήγησης.
Ενότητα I. Σύνδεση του Sonoff στην υπηρεσία MGT24
Βήμα 1: Δημιουργήστε έναν πίνακα ελέγχου
Εγγραφείτε στον ιστότοπο
Σύνδεση
Για να δημιουργήσετε έναν πίνακα ελέγχου για μια νέα συσκευή, κάντε κλικ στο κουμπί "+".
Παράδειγμα δημιουργίας πάνελ
Μόλις δημιουργηθεί το πλαίσιο, θα εμφανιστεί στη λίστα των πλαισίων σας.
Στην καρτέλα "Ρύθμιση" του δημιουργημένου πίνακα, βρείτε τα πεδία "Αναγνωριστικό συσκευής" και "Κλειδί εξουσιοδότησης"· στο μέλλον, αυτές οι πληροφορίες θα απαιτούνται κατά τη ρύθμιση της συσκευής Sonoff.
Παράδειγμα καρτέλας
Βήμα 2. Ανοίξτε τη συσκευή
Χρησιμοποιώντας το βοηθητικό πρόγραμμα
Βήμα 3. Ρύθμιση συσκευής
Δώστε ρεύμα στη συσκευή, αφού ανάψει η λυχνία LED, πατήστε το κουμπί και κρατήστε πατημένο μέχρι η λυχνία LED να αρχίσει να αναβοσβήνει περιοδικά ομοιόμορφα.
Αυτή τη στιγμή, θα εμφανιστεί ένα νέο δίκτυο Wi-Fi που ονομάζεται "PLC Sonoff Basic", συνδέστε τον υπολογιστή σας σε αυτό το δίκτυο.
Επεξήγηση της ένδειξης LED
Ένδειξη LED
Κατάσταση συσκευής
περιοδικό διπλό αναβοσβήνει
δεν υπάρχει σύνδεση με ρούτερ
λάμπει συνεχώς
σύνδεση με το δρομολογητή
περιοδική ομοιόμορφη αναβοσβήνει
λειτουργία σημείου πρόσβασης wi-fi
σβηστός
Χωρίς τροφοδοτικό
Ανοίξτε ένα πρόγραμμα περιήγησης στο Διαδίκτυο και πληκτρολογήστε το κείμενο "192.168.4.1" στη γραμμή διευθύνσεων, μεταβείτε στη σελίδα ρυθμίσεων δικτύου της συσκευής.
Συμπληρώστε τα πεδία ως εξής:
- «Όνομα δικτύου» και «Κωδικός πρόσβασης» (για σύνδεση της συσκευής με τον οικιακό δρομολογητή wi-fi).
- «Αναγνωριστικό συσκευής» και «Κλειδί εξουσιοδότησης» (για εξουσιοδότηση της συσκευής στην υπηρεσία MGT24).
Παράδειγμα ρύθμισης παραμέτρων δικτύου συσκευής
Αποθηκεύστε τις ρυθμίσεις και επανεκκινήστε τη συσκευή.
Εδώ
Βήμα 4. Σύνδεση αισθητήρων (προαιρετικό)
Το τρέχον υλικολογισμικό υποστηρίζει έως και τέσσερις αισθητήρες θερμοκρασίας ds18b20. Εδώ
Ενότητα II. Οπτικός προγραμματισμός
Βήμα 1: Δημιουργία Σεναρίων
Χρησιμοποιείται ως περιβάλλον προγραμματισμού
Πρόσθεσα εξειδικευμένα μπλοκ για εγγραφή και ανάγνωση παραμέτρων συσκευής. Η πρόσβαση σε οποιαδήποτε παράμετρο γίνεται με όνομα. Για παραμέτρους απομακρυσμένων συσκευών, χρησιμοποιούνται σύνθετες ονομασίες: "parameter@device".
Αναπτυσσόμενη λίστα επιλογών
Παράδειγμα σεναρίου για κυκλική ενεργοποίηση και απενεργοποίηση του φορτίου (1Hz):
Παράδειγμα σεναρίου που συγχρονίζει τη λειτουργία δύο ξεχωριστών συσκευών. Δηλαδή, το ρελέ της συσκευής στόχου επαναλαμβάνει τη λειτουργία του ρελέ της απομακρυσμένης συσκευής.
Σενάριο για θερμοστάτη (χωρίς υστέρηση):
Για να δημιουργήσετε πιο σύνθετα σενάρια, μπορείτε να χρησιμοποιήσετε μεταβλητές, βρόχους, συναρτήσεις (με ορίσματα) και άλλες δομές. Δεν θα τα περιγράψω όλα αυτά λεπτομερώς εδώ· υπάρχουν ήδη πολλά στο διαδίκτυο.
Βήμα 2: Σειρά σεναρίων
Το σενάριο τρέχει συνεχώς, και μόλις φτάσει στο τέλος του, ξεκινά ξανά. Σε αυτήν την περίπτωση, υπάρχουν δύο μπλοκ που μπορούν να διακόψουν προσωρινά το σενάριο, "καθυστέρηση" και "παύση".
Το μπλοκ "καθυστέρηση" χρησιμοποιείται για καθυστερήσεις χιλιοστού του δευτερολέπτου ή μικροδευτερόλεπτου. Αυτό το μπλοκ διατηρεί αυστηρά το χρονικό διάστημα, εμποδίζοντας τη λειτουργία ολόκληρης της συσκευής.
Το μπλοκ "παύσης" χρησιμοποιείται για δεύτερες (ή λιγότερες) καθυστερήσεις και δεν εμποδίζει την εκτέλεση άλλων διεργασιών στη συσκευή.
Εάν το ίδιο το σενάριο περιέχει έναν άπειρο βρόχο, το σώμα του οποίου δεν περιέχει "παύση", ο διερμηνέας ξεκινά ανεξάρτητα μια σύντομη παύση.
Εάν η εκχωρηθείσα στοίβα μνήμης εξαντληθεί, ο διερμηνέας θα σταματήσει να εκτελεί μια τέτοια δέσμη ενεργειών (να είστε προσεκτικοί με τις αναδρομικές συναρτήσεις).
Βήμα 3: Εντοπισμός σφαλμάτων σεναρίων
Για να εντοπίσετε σφάλματα σε ένα σενάριο που έχει ήδη φορτωθεί στη συσκευή, μπορείτε να εκτελέσετε μια παρακολούθηση προγράμματος βήμα προς βήμα. Αυτό μπορεί να είναι εξαιρετικά χρήσιμο όταν η συμπεριφορά του σεναρίου αποδείχθηκε διαφορετική από αυτή που σκόπευε ο συγγραφέας. Σε αυτήν την περίπτωση, η ανίχνευση επιτρέπει στον συγγραφέα να βρει γρήγορα την πηγή του προβλήματος και να διορθώσει το σφάλμα στο σενάριο.
Σενάριο υπολογισμού παραγοντικού σε λειτουργία εντοπισμού σφαλμάτων:
Το εργαλείο εντοπισμού σφαλμάτων είναι πολύ απλό και αποτελείται από τρία κύρια κουμπιά: «έναρξη», «ένα βήμα προς τα εμπρός» και «σταμάτημα» (ας μην ξεχνάμε επίσης τη λειτουργία εντοπισμού σφαλμάτων «enter» και «exit»). Εκτός από την ανίχνευση βήμα προς βήμα, μπορείτε να ορίσετε ένα σημείο διακοπής σε οποιοδήποτε μπλοκ (κάνοντας κλικ στο μπλοκ).
Για να εμφανίσετε τις τρέχουσες τιμές των παραμέτρων (αισθητήρες, ρελέ) στην οθόνη, χρησιμοποιήστε το μπλοκ "εκτύπωση".
Εδώ
Ενότητα για τους περίεργους. Τι υπάρχει κάτω από την κουκούλα;
Για να λειτουργήσουν τα σενάρια στη συσκευή-στόχο, αναπτύχθηκαν ένας διερμηνέας bytecode και ένας assembler με 38 οδηγίες. Ο πηγαίος κώδικας του Blockly έχει ενσωματωμένη μια εξειδικευμένη γεννήτρια κώδικα που μετατρέπει οπτικά μπλοκ σε οδηγίες συναρμολόγησης. Στη συνέχεια, αυτό το πρόγραμμα assembler μετατρέπεται σε bytecode και μεταφέρεται στη συσκευή για εκτέλεση.
Η αρχιτεκτονική αυτής της εικονικής μηχανής είναι αρκετά απλή και δεν έχει ιδιαίτερο νόημα η περιγραφή της· στο Διαδίκτυο θα βρείτε πολλά άρθρα σχετικά με το σχεδιασμό των απλούστερων εικονικών μηχανών.
Συνήθως διαθέτω 1000 byte για τη στοίβα της εικονικής μου μηχανής, τα οποία είναι αρκετά για εξοικονόμηση. Φυσικά, οι βαθιές αναδρομές μπορούν να εξαντλήσουν οποιαδήποτε στοίβα, αλλά είναι απίθανο να έχουν πρακτική χρήση.
Ο bytecode που προκύπτει είναι αρκετά συμπαγής. Για παράδειγμα, ο bytecode για τον υπολογισμό του ίδιου παραγοντικού είναι μόνο 49 byte. Αυτή είναι η οπτική του μορφή:
Και αυτό είναι το πρόγραμμα assembler του:
shift -1
ldi 10
call factorial, 1
print
exit
:factorial
ld_arg 0
ldi 1
gt
je 8
ld_arg 0
ld_arg 0
ldi 1
sub
call factorial, 1
mul
ret
ldi 1
ret
Εάν η μορφή συναρμολόγησης της αναπαράστασης δεν έχει καμία πρακτική αξία, τότε η καρτέλα "javascrit", αντίθετα, δίνει μια πιο οικεία εμφάνιση από τα οπτικά μπλοκ:
function factorial(num) {
if (num > 1) {
return num + factorial(num - 1);
}
return 1;
}
window.alert(factorial(10));
Σχετικά με την απόδοση. Όταν έτρεξα το πιο απλό σενάριο flasher, έλαβα ένα τετραγωνικό κύμα 47 kHz στην οθόνη του παλμογράφου (με ταχύτητα ρολογιού επεξεργαστή 80 MHz).
Νομίζω ότι αυτό είναι ένα καλό αποτέλεσμα, τουλάχιστον αυτή η ταχύτητα είναι σχεδόν δέκα φορές μεγαλύτερη από αυτή
Το τελευταίο μέρος
Συνοψίζοντας, θα πω ότι η χρήση σεναρίων μας επιτρέπει όχι μόνο να προγραμματίζουμε τη λογική της λειτουργίας μιας ξεχωριστής συσκευής, αλλά καθιστά επίσης δυνατή τη σύνδεση πολλών συσκευών σε έναν ενιαίο μηχανισμό, όπου ορισμένες συσκευές επηρεάζουν τη συμπεριφορά άλλων.
Σημειώνω επίσης ότι η επιλεγμένη μέθοδος αποθήκευσης σεναρίων (απευθείας στις ίδιες τις συσκευές και όχι στον διακομιστή) απλοποιεί την εναλλαγή συσκευών που ήδη λειτουργούν σε άλλο διακομιστή, για παράδειγμα σε ένα οικιακό Raspberry, εδώ
Αυτό είναι όλο, θα χαρώ να ακούσω συμβουλές και εποικοδομητική κριτική.
Πηγή: www.habr.com