# Συζήτηση Κυκλωμάτων > Παρουσίαση Ολοκληρωμένων Κατασκευών > Παρουσίαση Πρόχειρων Κατασκευών >  >  FireFlow - Πρόγραμμα ελέγχου/καταγραφής θερμοκρασίας με PID

## Fire Doger

Το παρακάτω πρόγραμμα αποτελεί κομμάτι μιας μεγαλύτερης κατασκευής και μιας και το τελείωσα είπα να το ανεβάσω μαζί με ένα παράδειγμα στο arduino για να μου πείτε την γνώμη σας και αν υπάρξει κάποιο bug να το διορθώσω τώρα που έχω τον κώδικα φρέσκο στο μυαλό μου.
Το πρόγραμμα είναι γραμμένο σε C# (τώρα αν τρέχει σε XP θα σας γελάσω, δεν έψαξα compatibility, σε 7άρια το έστησα και λογικά τρέχει και στα επόμενα)
Τα αρχεία (πηγαίος και εκτελέσιμο) βρίσκονται εδώ https://github.com/FireFlowController/FireFlow-Oven

Είναι με άδεια GPL που σημαίνει το παίρνετε όλο ή όποιο κομμάτι σας αρέσει και το κάνετε ότι θέλετε αρκεί να είναι ανοιχτού κώδικα το τελικό πρόγραμμα.
Η σύνδεση με μικρο-ελεγκτή γίνεται μέσω εικονικής σειριακής (Com) και υπάρχει ένα απλό instruction set που μπορεί να τοποθετηθεί σε μικρο-ελεγκτή της αρεσκείας σας.

Σαν πρόγραμμα παρέχει φιλικά ονόματα (USB-FTDIBUS κλπ) κατά την διασύνδεση όπως στο device manager (αυτός είναι και ο μόνος λόγος που θέλει δικαιώματα admin γιατί δεν ήθελα να παίζει με το registry και το κάνω με WMI


Εμφανίζει διάγραμμα θερμοκρασίας (ταυτόχρονα τα αποθηκεύει σε Temp αρχείο έτσι ώστε να μην χάνεται τίποτα αν αλλάξει ο χρονικός ορίζοντας)
Διάγραμμα εξόδου του PID
Μπορεί ο χρήστης να αλλάξει τα κέρδη κατά την λειτουργία (+ επιλογή απενεργοποίησης Bumpless αλλαγής την οποία προσφέρει η βιβλιοθήκη PID)
Χρονόμετρο βασισμένο στον υπολογιστή
Και τέλος εξαγωγή είτε σε txt/csv ότι έχει λάβει είτε png/jpg/... ότι απεικονίζει το γράφημα.
Προσπάθησα να το κάνω όσο ποιο πολύ user friendly μπορούσα, πιστεύω σε 2-3 λεπτά μπορεί να το δουλέψει κάποιος.
Έβαλα και help και ένα μικρό manual.



Ότι πρόβλημα βρείτε ή κάτι που δεν σας αρέσει γράψτε το παρακάτω να το κοιτάξω.
Ευχαριστώ :Smile: 

*Το παράδειγμα στο arduino πολύ πιθανό να έχει κάποια λαθάκια, στο πόδι το έγραψα, αν κάποιος θέλει να το δοκιμάσει και μπορεί να διορθώσει προβλήματα τύπου phantom interrupt κλπ θα μπει στις ευχαριστίες, περισσότερο το έγραψα για να δείξω την επεξεργασία εντολών και τις απαντήσεις. (Σύντομα θα υπάρξει μια αλλαγή και σε αυτά γιατί δεν μ' αρέσει που χρησιμοποιεί string σε κάποια στιγμή)

----------

selectronic (02-08-17)

----------


## nestoras

Received...  :Smile:

----------


## Fire Doger

> Received...



Όπως νάνε το έγραψα? Που είναι?

----------


## nestoras

> Όπως νάνε το έγραψα? Που είναι?



Clear Recieved Data

----------

Fire Doger (02-08-17)

----------


## elektronio

Στέφανε αν θέλεις δώσε μια περιγραφή τι ακριβώς θα κάνει η κατασκευή σου.

Παρατηρήσεις προς το παρόν κυρίως εικαστικές:

1. Τα κουτάκια δεξιά καλό θα ήταν να είναι ίδιου πλάτους. 
2. Στο πρώτο κουτάκι σβήσε το temperature και γράψε την μονάδα oC όπως το έχεις παρακάτω.
3. Αν η κατασκευή προσβλέπει σε διεθνή καριέρα πρέπει να προβλέψεις και μετατροπή σε Φαρενάιτ.
4. Στο κουτάκι oven feedback εγώ δεν θα έβαζα την λέξη feedback. Η θα το άφηνα σκέτο Oven ή Oven status.
5. Το time στο ίδιο κουτάκι θέλει λίγο παραπάνω εξήγηση. time remain, time elapsed ?
6. Στο ίδιο κουτάκι στο status η λέξη oven  είναι περιττή. (Είσαι στο κουτάκι oven άρα το status αναφέρεται στο oven)
7. Στο time control μια καλύτερη περιγραφή π.χ. SET TIME και από κάτω η λέξη time είναι περιττή.
8. Στο ίδιο κουτάκι ένα πλήκτρο [default] για γρήγορη επάνοδο σε κάποια default ρύθμιση.
9. Στο κουτάκι graph control (αν μπορείς να προσθέσεις τη δυνατότητα) βάλε ένα κουτάκι checkbox [Auto] οπότε με αυτό το κουτάκι επιλεγμένο να αναπροσαρμόζει αυτόματα τις μέγιστες τιμές (με κάποιους κανόνες) σε κάθε ν refresh.  
10. Επίσης κουμπάκι auto στο χρόνο ώστε να μεταβάλετε σε κάθε ν refresh με δύο επιλογές  είτε να "μαζεύει" το διάγραμμα αυξάνοντας διαρκώς την τιμή του χρόνου, είτε να "τσουλάει" αριστερά δείχνοντας ένα παράθυρο του χρόνου.
11. Στο ίδιο κουτάκι από Clear Recieved Data μπορεί να γίνει απλώς Clear.

----------


## Fire Doger

Καλημέρα,
Το πρόγραμμα προέκυψε από μια μεγαλύτερη κατασκευή, το είχα σαν demo για να λύνω 1-1 τα προβλήματα και για να μην πέσουν όλα τα bug μαζί και χαθώ και το συμμάζεψα μήπως φανεί χρήσιμο σε κάποιον.
 Ο τρόπος που σχεδιάζει από αριστερά προς τα δεξιά, η "βιβλιοθήκη" που επιτρέπει να στέλνεις/λαμβάνεις δεδομένα στην σειριακή από το PC και άλλα trick που περιέχει έχουν ενδιαφέρον. 

Ο βασικός κορμός του είναι να ελέγχει τα κέρδη ενός PID που τρέχει σε μΕ και να καταγράφει την έξοδο του ελεγκτή και το αποτέλεσμα της εξόδου.

Επειδή το μεγάλο project έχει σχέση με θερμοκρασία κατέληξε και αυτό να έχει σχέση με θερμοκρασία για να κολλήσει. Παρ' όλα αυτά αν εσύ θέλεις να παρακολουθείς/ελέγχεις φωτεινότητα ή στροφές κινητήρα ή οτιδήποτε άλλο ακόμα και χωρίς PID μπορείς να το κάνεις. Δεν "τρέχει" κάποια διεργασία ελέγχου στο πρόγραμμα, απλώς προσφέρει μια διασύνδεση με τον ελεγκτή.
Ανάλογα με το refresh rate στέλνει 2 εντολές και τις απαντήσεις τις βάζει στο γράφημα, όταν αλλάζει κατάσταση το checkbox στέλνει 1 εντολή (ανάλογα on-off) και μόλις πατήσεις το update Gains and Temp στέλνει 3 double και έναν int. Και το start-stop επίσης από 1 εντολή.
Το χρονόμετρο είναι απλώς για την διαδικασία του φούρνου, όταν μηδενίσει στέλνει την εντολή stop.
Οποιαδήποτε αλλαγή στα παραπάνω είναι πολύ εύκολο να γίνει αν κάποιος θέλει να το φέρει στα μέτρα του, το πολύ 5 γραμμές η κάθε μια να παίρνει.

Σε ευχαριστώ για τις προτάσεις σου, και εμένα δεν μου άρεσε ιδιαίτερα το πως φαίνονται αλλά ήθελα να είναι όσο ποιο κατανοητά γίνεται. Θα προσπαθήσω να τα φέρω στο ίδιο μέγεθος.

----------


## elektronio

Μετά την επεξήγηση ότι είναι βοηθητικό πρόγραμμα και όχι μέρος κατασκευής πιθανόν οι εικαστικές παρεμβάσεις περιττεύουν. (τσάμπα έγραφα  :Sad:  )

----------


## Fire Doger

Είναι μέρος αλλά όχι το βασικό, απλώς προέκυψε.
Εμφανισιακά μοιάζει αρκετά και με το βασικό, ήδη τα έκοψα/έραψα για να φέρω τα κουτάκια στο ίδιο μέγεθος και δείχνει καλύτερο. (βρήκα και διόρθωσα και ένα bug στα γραφικά :Biggrin: )

----------

