**** Hilfe **** Hilfe **** Hilfe **** Hilfe **** Hilfe **** Hilfe **** Hilfe **** Hilfe **** Hilfe
Liebe Community,
ausser einpaar Einblicke bin ich Anfänger was die C-Programmierung und vorallem dem Arduino betrifft. Jedoch brauch ich im Zuge einer Projektarbeit im Studium dringend Hilfe bei der Umsetzung meiner Programmierung.
Ich habe eine Schaltanlage gebaut und möchte mit ihr den Strom von drei Pv-Modulen mithilfe von drei Stromsensoren ACS712 ausmessen, was auch gut klappt.
Zwischen Pv-Modul und Stromsensor sind jeweils Relais verschaltet die automatisch die Verbindung trennen sollen, falls die Pv-Module zusammen eine zu hohe Gesamtleistung abgeben.
Das Programm soll weiterhin die Kombinationsmöglichkeit der Pv-Module mit der höchsten Leistung herausfinden und dennoch unterhalb der vorgegebenen Leistungsgrenze von 600W liegen. Daraus lassen sich 7 Fälle bestimmen die ich beim Eintreffen mit einem check und nem Kombinationscode deklariere um sie später wieder leicht aufrufen zu können. Leider klappt jedoch das nicht Die sieben Fälle durfte ich linear hintereinander mit If-Bedingungen abfragen.
Die Fälle lassen sich so bestimmen:
P1 check = 1 Nur Modul 1 darf einspeisen
P2 check = 2 Nur Modul 2 darf einspeisen
P3 check = 3 Nur Modul 3 darf einspeisen
P12 check = 12 Modul 1 und Modul 2 dürfen einspeisen
P13 check = 13 Modul 1 und Modul 3 dürfen einspeisen
P23 check = 23 Modul 2 und Modul 3 dürfen einspeisen
P0 check = 0 Keines der Module dürfen Einspeisen
Jetzt würde ich gerne dass das Programm wieder an den Start zurück springt, wenn eben keine Leistungsbegrenzung stattfand und somit halt noch alle Module einspeisen.
Dazu habe ich diese check-Abfrage. Aber genau das funktioniert nicht. Da ja eig. noch kein "check" stattfand, dürfte das Programm auch nicht bis zum "delay(900000);" kommen. Oder ist das mit der check-Abfrage vollkommender Blödsinn?
Gib uns bitte compilierfähigen Code in Textform.
Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).
So ist er auch auf portablen Geräten lesbar. Das kannst Du auch noch nachträglich ändern.
ich könnte jetzt tausende Vermutungen anstellen. Macht ohne Code keinen Sinn. Wenn die P's deine Steuerzustände sein sollen kannste dir die restlichen check Abfrage eigentlich sparen. Und wenn du danach deine gesamte Anlage 250h 15min lang lahm legst haste auch nichts gekonnt.
Dann baue Dir doch an die entscheidenden Stellen Serielle Ausgaben rein, die Dir z.B. den Wert von check und Pges ausgeben.
Dann siehst Du, was da abläuft.
Ich verstehe das Problem - oder die Herangehensweise dagegen - nicht.
Du hast drei Module. (oder Strings? (Anmerkung: hat hier Nichts mit Arduino zu tun - sind nur 'mehre Module in Reihe')
Von allen Drei ist Dir der Strom bekannt.
Die Spannung auch? Daraus ließe sich die Leistung errechnen.
Nun könnte man den Arduino sämtliche Kombinationen durchrechnen lassen, Die Damit möglich sind.
Die, Die am nächsten an die Obergrenze heran kommt, wird genommen - vollkommen egal, ob's da irgendwo Einen gibt, Der MEEEHR kann - unterm Strich kommt dann nämlich weniger, weil von dort bis zur Obergrenze Keiner mehr rein passt.
Der 'Rechner' ist quasi zum Rechnen geboren - und die paar Additionen bekomt der Arduino schon zeitnah zusammen.
Je nach Strom würde ich von Relais auf FETs umsatteln - Heutige Exemplare können Ampere im oberen zweistelligem Bereich - für 600W sollte Das 'gerade so' reichen.
Auch brennen dem FET die Kontakte nicht so gnadenlos weg, wie wenn man eine DC-Last abschaltet.
nimm die returns raus. Ohne Rückgabewert einer Funktion muss man nichts zurückgeben.
Ein Abbruch am Ende macht alleine auch keinen Sinn.
Das Problem mit dem 250h delay haste verstanden?
Hab sie reingesetzt um Nummer seicher zu gehen. Aber ich nehm sie nun raus!
Meinst Du den "delay 900.000;" ?
Wird das nicht in milisek. angegeben und würde somit 15 Min. entsprechen?
Ich verstehe das Problem - oder die Herangehensweise dagegen - nicht.
Du hast drei Module. (oder Strings? (Anmerkung: hat hier Nichts mit Arduino zu tun - sind nur 'mehre Module in Reihe')
Von allen Drei ist Dir der Strom bekannt.
Die Spannung auch? Daraus ließe sich die Leistung errechnen.
Nun könnte man den Arduino sämtliche Kombinationen durchrechnen lassen, Die Damit möglich sind.
Die, Die am nächsten an die Obergrenze heran kommt, wird genommen - vollkommen egal, ob's da irgendwo Einen gibt, Der MEEEHR kann - unterm Strich kommt dann nämlich weniger, weil von dort bis zur Obergrenze Keiner mehr rein passt.
Der 'Rechner' ist quasi zum Rechnen geboren - und die paar Additionen bekomt der Arduino schon zeitnah zusammen.
Je nach Strom würde ich von Relais auf FETs umsatteln - Heutige Exemplare können Ampere im oberen zweistelligem Bereich - für 600W sollte Das 'gerade so' reichen.
Auch brennen dem FET die Kontakte nicht so gnadenlos weg, wie wenn man eine DC-Last abschaltet.
Was soll's später WIRKLICH werden?
MfG
Da die drei Module mithilfe der drei Relais einzeln angesteuert werden sollen, sind sie nicht in Strings in Reihe angeschlossen, sondern alle einzeln.
Dazu habe ich eine Steuerungseinheit gebaut. In ihr sind 3 Steckdosen die jeweils mit einem Wechselrichter verbunden werden, der ja wiederum mit je einem Modul verbunden wird. Nach der Steckdose kommt das Relais, danach der Stromsensor ASC712, danach gehe ich auf eine Reihenklemme.
Die Steuerungseinheit ist fertig und kann nicht mehr durch andere Bauteile ersetzt werden.
Ich weiss, dass es mit einer for-Schleife oder einer while schleife programmierbar sei. Wir haben etwas daran rumgedoktort und es nicht hinbekommen. Daher die Lineare Programmierweise. Ich habe das Ok dafür bekommen.
Es soll eine Steuerungseinheit, für eine Balkon Pv-Kleinstanlage mit knapp 1 kWp sein.
Die Hardware steht. Die Programmierung, naja eben nicht
ich weiß ja nicht in welcher Stückelung die PV Module sind, und ob sie alle gleiche Bedingungen haben,
aber 600W darfst Du ja immer am Netz haben, und wenn die Sonne weniger scheint, dann einfach weitere Module zuschalten. Das könnten bei Dir als Beispiel 600W + 200W + 200W sein. Bei gleichen Bedingungen wäre das recht einfach.
Das System ist ausgelegt mit 3 x 310 kWp Monokristallin Pv-Modulen. Diese werden mithilfe von Schukosteckern an die Steuerungseinheit gesteckt.
Die Module werden nur in den Sommermonaten die Leistungsgrenze überschreiten, falls das passiert soll das Programm eigenständig die beste Kombinationsmöglichkeit der drei Module ermitteln und das Modul mit der kleinsten Leistung mithilfe des Relais trennen.
Am System und den Bauteilen ist soweit nichts zu rütteln.
Die Programmierung dazu hackt jedoch. Hab leider von Programmierung nicht viel Ahnung, daher auch nicht das Know-How für die Erstellung mit For/While-Schleifen
Irgendwie hab ich Dein Problem und Deinen Denkansatz nicht verstanden. Es gibt 3 gleiche Module und 3 Relais zum zu oder abschalten des zugehörigen Moduls. Die Gesamtleistung soll 600W nicht übersteigen. Es kann nur in Stufen zugeschaltet werden, und die Mudule sind gleich.
solange ein Modul nicht mittels Relais zugeschaltet ist kannst Du doch mit diesem auch keinen Strom messen. Also muss man erst mal zuschalten und dann sehen ob die Leistung unter 600W liegt. Wenn sie hoher ist muss man wieder abschalten. Dazu bracht man dann eine Hysterese. Nun kann es natürlich passieren das die Gesamtleistung nach dem Zuschalten eines Moduls kurzfristig > 600 Watt wird , schliesslich muss man erst mal messen um darauf reagieren zu können. Und das Zuschalten eines Moduls erfolgt ja auch nicht stetig.
Könnte doch so aussehen, ob das was wird ??
P< 400 Watt Relais 1 zuschalten
etwas warten
P immer noch < 400 und Relais 1 ein Relais 2 zuschalten
etwas warten
P immer noch <400 und Relais 2 ein Relais 3 zuschalten
P> 600 Watt Relais 3 abschalten
etwas warten
p> 600 Watt und relais 3 aus Relais 2 abschalten
etwas warten
P> 600 Watt und Relais 2 aus Relais 1 abschalten
Damit gibts bei ausreichend Sonne meiner Meinung nach irgendwas zwischen 400 und 600 Watt.
Wie sich erkennen lässt sieht das nach einer Schrittkette oder endlichem Automat aus.
For/While sind schon Schleifen. Bedingungen sind z.B. if.
Dir fehlen ja eigentlich fast alle Grundlagen.
Meinst Du jemand schreibt Dir jetzt Deine Hausarbeit?
Gruß Tommy
Edit: Die Aufgabenstellung hast Du mit Sicherheit auch nicht erst seit gestern.