Hallo Jungs und Mädels, bin beim aufsetzen eines arduino scetches für die Heizungssteuerung. Mir fehlt aber der Anfang, deswegen hier die BITTE UM HILFE. Es müssen nach abfrage der 25 Sensoren mehrere ventile (14 Stück) und mehrere Motoren (6 Stück) sicher gesteuert werden und die Daten Graphisch ausgegeben werden und gespeichert werden.. habe schon mit ->If else<- angefangen, die verschachtelungen sind aber zu unübersichtlich und es sind ja rein rechnerisch 14² Schaltvarianten der ventile möglich (Natürlich schließen sich viele aus) dann habe ich mit ->SWITCH - Case<- waren aber auch zu unübersichtlich jetzt wollte ich mit array etc. probieren... ABER bevor ich wieder zeit verliere, wollte ich die EUCH-EXPERTEN fragen, wie ih diese Aufgabe lösen würdet. Danke im Voraus!
Soll das so eine Art Verknüpfungstabelle werden ?
Jain.... Soll der Übersicht dienen... Wollte draus ARRAY bauen :-)
Aus deine Tabelle kannst du ganz einfach nach dem EVA-Prinzip die Programmstruktur aufbau. E = Eingabe (Eingänge) = Sensoren V = Verarbeitung = Auswertung bzgl. der einzelnen Messstellen A = Ausgabe = Ansprechen der Aktoren (Ventile, Pumpen) In dieser Reihenfolge könnte der Ablauf in der Main-Loop stattfinden. Da es sich nur um eine Temperaturerfassung an einer Heizung und nicht in einer Heizung handelt muss du nicht mit Temperatursprüngen oder sonstigen spontanen zu erfassenden Größen rechnen. D.h. ein Arduino sollte die Aufgabe generell schaffen, wenn er genug Speicher und I/O's hat. => Mega256 oder Due.
Habe paar megas da liegen... Genau die Verarbeitung macht mir Probleme...
Max M. schrieb: > bevor ich wieder zeit verliere, wollte ich die EUCH-EXPERTEN fragen, wie > ih diese Aufgabe lösen würdet. Nur mal angenommen, ich interpretiere deine Grafik richtig. Für mich sieht das so aus, als ob es einfacher wäre, die Sache von den Ventilen her aufzuziehen. Ventil 1 muss auf 1 geschaltet werden, genau dann wenn ..... Diese ganzen Wenn-Teile lassen (zusammen mit der zugehörigen Aktion) sich wieder in einer ähnlichen Grafik bzw. Tabelle darstellen. Von dieser Grafik nehme ich mir eine Zeile her und beschreibe ihn mit einer struct. Die ganze Tabelle ist dann ein Array aus derartigen structs. Und dann schreib ich mir noch eine Funktion, die sich ein Element der Tabelle (also 1 Zeile) vornimmt, die entsprechende Auswertung macht und die Ventile entsprechend schaltet. Die Funktion wird dann reihum auf jede Tabellenzeile angewendet. Der Rest ist dann 'nur' noch, die relevanten Daten in diese Tabelle einzutragen PS: aus dem Abschnitt 'Temperatur' werde ich nicht schlau. Wie ist der zu interpretieren? Dort wo eine Schattierung drinnen ist wird der Temperaturwert überwacht, ob er über oder unter einer Vorgabe ist?
:
Bearbeitet durch User
Gaast schrieb: > hat. => Mega256 oder Due. Wie groß soll das Programm denn werden ? Ah ich vergaß - Arduino. Wie haste du denn vor die Werte zu Verknüpfen ? Kann man das in Gruppen aufteilen ? Satz Sensoren + (Satz Ventile + Satz Pumpen) Ventile und Pumpen dürften ja theoretisch voneinander direkt abhängen. Wie behandelst du die Gewichtung zwischen Temperatur vom Sensor und dem Aktor (Ventil + Pumpenmotor)?
Ok... Schaue ich mir gleich an...
Dennis H. schrieb: > Gaast schrieb: >> hat. => Mega256 oder Due. > Wie groß soll das Programm denn werden ? Ah ich vergaß - Arduino. > > > > Wie haste du denn vor die Werte zu Verknüpfen ? > Kann man das in Gruppen aufteilen ? > > Satz Sensoren + (Satz Ventile + Satz Pumpen) > Ventile und Pumpen dürften ja theoretisch voneinander direkt abhängen. > > Wie behandelst du die Gewichtung zwischen Temperatur vom Sensor und dem > Aktor (Ventil + Pumpenmotor)? Die Gruppen habe ich versucht unter LOAD UNLOAD etc. Zusammen zu fassen...
Karl H. schrieb: > Und dann schreib ich mir noch eine Funktion, die sich ein Element der > Tabelle (also 1 Zeile) vornimmt, die entsprechende Auswertung macht und > die Ventile entsprechend schaltet. Die Funktion wird dann reihum auf > jede Tabellenzeile angewendet. Innerhalb der Loop ist die Reihenfolge dann
1 | void loop() |
2 | { |
3 | alle sensoren abfragen |
4 | |
5 | ventilstellungen anhand der Logik-Tabelle ermitteln |
6 | |
7 | notwendige Pumpen anhand der Ventilstellungen und/oder Temperaturwerten |
8 | ermitteln |
9 | (kann man ebenfalls mit einer Tabelle erschlagen) |
10 | |
11 | Ventile schalten |
12 | |
13 | Pumpen schalten |
14 | } |
ein paar variablen braucht man da natürlich, aber nichts davon ist wirklich wild. Ein bisschen Hirnschmalz sollte man noch in Hysteresen stecken, damit es an Umschaltpunkten nicht zu Ventilflattern kommt.
:
Bearbeitet durch User
Max M. schrieb: > Soll der Übersicht dienen... Wollte draus ARRAY bauen :-) Arrays sind immer gut. Ich habe bei mir die Temperaturwerte im 1 Minutenraster aufgelöst. Die Ventile werden im 10 Minutenraster gesteuert. > Es müssen nach abfrage der 25 Sensoren mehrere ventile (14 Stück) und > mehrere Motoren (6 Stück) sicher gesteuert werden und die Daten > Graphisch ausgegeben werden und gespeichert werden.. Die Sensoren würde ich alle in einer Schleife abfragen. Nach 10 Minuten steuerst Du dann die Ventile einmal an. Beim Ansteuern der Ventile wird dann Soll- und Ist-Wert der Temperaturen verarbeitet. Bei einer Fussbodenheizung ist es sinnvoll bis zu 2 Stunden Vorlauf zu berechnen. Dies mache ich mit einer linearen Regressionsanalyse, hört sich schlimm an, ist es aber nicht. Bei mir läuft noch mehr ab. Ich überwache u.a. auch den Stromverbrauch, bzw. die PV-Anlage. Es ist sinnvoll dafür eigene Threads einzusetzen. Man sollte auch versuchen objektorientiert zu arbeiten. Gut, dies dürfte für den Anfang etwas zu weit gehen. Beim Umsetzen der ersten Schritte wird man schon auf genügend Herausforderungen stossen. mfg Klaus.
Arsuino ist super :) Wie werden die ventile gesteuert? Auf/Zu? Die pumpen sind wohl von den heizungsgruppen?
Karl H. schrieb: > Ventil 1 muss auf 1 geschaltet werden, genau dann wenn ..... Wobei mir gerade auffällt, dass in deiner Ventiltabelle sehr viele 1-er stehen. Da würde ich doch pragmatisch so vorgehen, dass ich eine Ventilstellung von 1 als default vorsehe, die ich also in meiner Logiktabelle gar nicht erfassen muss. Dort sind nur die Beziehungen vermerkt, die ein anderes Ergebnis als 1 erbringen müssen. D.h. bei jedem Durchgang zur Ermittlung der notwendigen Ventilposition wird jedes Ventil erst mal als in der Stellung 1 notwendig angenommen und nur wenn sich aus der Tabelle eine andere notwendige Stellung ergibt, wird diese übernommen. Das vereinfacht dann auch die Ventil-Abhängigkeits Tabelle. Da bleiben dann nur noch recht wenige Zeilen übrig.
> > ventilstellungen anhand der Logik-Tabelle ermitteln > > notwendige Pumpen anhand der Ventilstellungen und/oder > Temperaturwerten > ermitteln > (kann man ebenfalls mit einer Tabelle erschlagen) > > Ventile schalten > > Pumpen schalten > wirklich wild. Ein bisschen Hirnschmalz sollte man noch in Hysteresen > stecken, damit es an Umschaltpunkten nicht zu Ventilflattern kommt. Sorry für die Nachfrage... Hast du ein Beispiel zum Tabellen einbinden? Oder meinst du Array beim Setup anlegen?
Max M. schrieb: > habe schon mit ->If else<- angefangen, Freitag? Sinnig wäre es erstmal die Spezifikation (was soll aufgrund welcher Eingangs-Parameter geschehen) zu erstellen. In einem 2. Schritt kann man sich dann Gedanken über Programm-Konstrukte machen. Scheint mir aber eher trollig zu sein ...
Karl H. schrieb: > Karl H. schrieb: > >> Ventil 1 muss auf 1 geschaltet werden, genau dann wenn ..... > > Wobei mir gerade auffällt, dass in deiner Ventiltabelle sehr viele 1-er > stehen. > Da würde ich doch pragmatisch so vorgehen, dass ich eine Ventilstellung > von 1 als default vorsehe, die ich also in meiner Logiktabelle gar nicht > erfassen muss. Dort sind nur die Beziehungen vermerkt, die ein anderes ue Schaue ich mal an
Swisser schrieb: > Arsuino ist super :) > > Wie werden die ventile gesteuert? Auf/Zu? > > Die pumpen sind wohl von den heizungsgruppen? Ventile li/re Heizungspumpen
Klaus R. schrieb: > Max M. schrieb: >> Soll der Übersicht dienen... Wollte draus ARRAY bauen :-) > > Arrays sind immer gut. Ich habe bei mir die Temperaturwerte im 1 >ast. Hast du ein Code als Gerüst zum teilen?
Max M. schrieb: > Klaus R. schrieb: >> Max M. schrieb: >>> Soll der Übersicht dienen... Wollte draus ARRAY bauen :-) >> >> Arrays sind immer gut. Ich habe bei mir die Temperaturwerte im 1 >>ast. > > Hast du ein Code als Gerüst zum teilen? Damit wirst Du nichts anfangen können. Generell ist es aber so. Beim Start des Programms werden Arrays aus der Datenbank gefüllt die Sollwerte beinhalten. Neben Arrays arbeite ich auch mit HashTables. Der erste wichtige Schritt war das Einführen der Zeitraster. Soll- und Ist-Werte werden bei den Temperaturprofilen immer auf ein Minutenraster zurückgeführt. Für 24 Stunden kommst Du da auf 1440 Elemente. Die Ventile werden im 10 Minutenraster gesteuert. Dafür werden die Temperatur-Sollwerte zusammengefasst und in 144 Elemente Arrays abgelegt. Diese Vorgehensweise stammt noch aus den Zeiten der C-Control-II, die nicht allzuviel Speicher bot. Später, als dies keine Rolle mehr spielte, wurden so Datenbankzugriffe reduziert und es war performanter. Diese Arrays werden zum Tageswechsel aktualisiert, aber auch bei Änderungen der Sollwerte in der Datenbank. mfg klaus
Da muss wohl noch Hausaufgaben machen...
no_1 schrieb: > nicht mit einem arduino ... > > cu Quatschkopp Mindestens der mit dem 32-bit ARM Prozessor, 512kB Flash und 96kB Ram langweilt sich dabei doch zu Tode.
me schrieb: > no_1 schrieb: >> nicht mit einem arduino ... >> >> cu > > Quatschkopp > > Mindestens der mit dem 32-bit ARM Prozessor, 512kB Flash und 96kB Ram > langweilt sich dabei doch zu Tode. Bin ich such der Meinung
Max M. schrieb im Be > > Sorry für die Nachfrage... Hast du ein Beispiel zum Tabellen einbinden? > Oder meinst du Array beim Setup anlegen? Array initialisieren halt. So wie man das eben macht, wenn man seine Programmiersprache wenigstens ein bischen kann. DeinProblem ist doch programmiertechnisch simpel. Die Schwierigkeit liegt in der Organisation. Aber ich seh schon. Wir bewegen uns wieder auf dem Level "Ichwill zwar aber eigentlich kann ich nix". Und ueber die Jahre hab ich die Lust da drauf verloren.
me schrieb: > no_1 schrieb: >> nicht mit einem arduino ... >> >> cu > > Quatschkopp > > Mindestens der mit dem 32-bit ARM Prozessor, 512kB Flash und 96kB Ram > langweilt sich dabei doch zu Tode. Auch jeder andere Arduino langweilt sich dabei zu Tode. Das ist alles nur eine Frage der Programmorganisation. Ob das 16 Ventile sind oder 80, 6 Pumpen oder 40, spielt für das Programm keine grosse Rolle. Das erstellen der Abhängigkeitstabelle, welche die Logik beschreibt wird aufwändiger und fehlerträchtiger. Aber für das Programm ist das ziemlich wurscht. Das arbeitet einfach nur die Logik ab, wonach welches Ventil aufgrund welches benötigten Heizkreises wie zu schalten ist. Machr man das ordentlich, dann ist das sogar immer der gleiche Code, egal wieviele Ventile und Pumpen vorhanden sind. Aber mit ein paar if-else ist es natürlich nicht getan.
:
Bearbeitet durch User
> > Aber ich seh schon. Wir bewegen uns wieder auf dem Level "Ichwill zwar > aber eigentlich kann ich nix". Und ueber die Jahre hab ich die Lust da > drauf verloren. Deswegen bin ich auch hier... Um von euch zu lernen! Ich denke wollen und durchhalten ist jetzt wichtig um das Projekt fertig zu bekommen und um mit anderen zu teilen... Danke für deine ehrliche Meinung
Schon überlegt wie du die 25 Sensoren abfragst?
Hubert G. schrieb: > Schon überlegt wie du die 25 Sensoren abfragst? Das Abfragen der Sensoren wird schon irgendwie klappen. Mir wird noch gar nicht klar, wie die Messwerte der 25 Sensoren in die Entscheidung für die Steuerung der Ventile/Pumpen eingehen. Irgendwie muss es da einen Algorithmus geben, der beschreibt, wie Werte von mehreren Temperatursensoren - von Berücksichtigung von Zeitverläufen wollen wir erstmal gar nicht sprechen - in eine Ja/Nein Entscheidung für die Ventile/Pumpen-Logik eingehen. Sofern ich das bisher verstanden haben, handelt es sich doch um Schaltventile und Pumpe Ein/Aus.
Wolfgang schrieb: > Mir wird noch > gar nicht klar, wie die Messwerte der 25 Sensoren in die Entscheidung > für die Steuerung der Ventile/Pumpen eingehen Fuzzy-Logik? Expertensystem? Allerdings, bei einem Arduino müsste man wohl alles zu Fuss programmieren. Georg
Wolfgang schrieb: > Das Abfragen der Sensoren wird schon irgendwie klappen. Die Frage habe ich gestellt, da der Mega2560 mit 16 ADC-Eingänge das Maximum ist das ich kenne. Es wird da noch einen Hardwareerweiterung notwendig sein.
Hubert G. schrieb: > Es wird da noch einen Hardwareerweiterung > notwendig sein. Wieso das denn? DS18B20. Damit kann er seine ganze Stadt an einen Pin hängen und mit Arduino braucht er nicht mal groß was programmieren, ist alles schon fertig vorhanden.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.