Go Down

Topic: Steuerung (Read 197 times) previous topic - next topic

Maria2

Feb 24, 2019, 08:05 am Last Edit: Feb 24, 2019, 10:57 am by uwefed
Hallo zusammen,

ich hab kurz eine frage zum Ventilsteuerung und Motorsteuerung. Ich möchte dass das Ventil für Unterdruck (Relai2) geschlossen ist, wenn das Überdruck läuft. Bei Unterdruck andersrum. Kann es den richtig sein was ich gemacht habe, weil irgendwie funktioniert es nicht so wie ich es möchte :-(

Code: [Select]
void uedruck_Flasche3(){
 //Unterdruckventil zu macheen

  //digitalWrite(Relai2,LOW);
  if (Relai1Flag)
  {
   if (druck3  < PsollF2 - Hyst1) {    // wenn der Druck über 150 mbar ist, dann Ventil zu (soll=150mbar)
   digitalWrite(Relai1, LOW);
   PFOK = false;
 }
 else {                          // ist der Druck <= 150 mbar, dann mach das Ventil auf
   PFOK = true;
   digitalWrite(Relai1, HIGH);
 }
}
else
digitalWrite(Relai1, LOW);
}


// Unterdruck im Flasche  erzeugen
void udruck_Flasche3(){

//digitalWrite(Relai1,LOW);
 if (Relai2Flag)
  {
 if (druck3  > PsollF3 - Hyst1) {    // wenn der Druck über -150 mbar ist, dann Ventil zu (soll=-150mbar)
   digitalWrite(Relai2, LOW);
   PFOK = false;
 }
 else {                          // ist der Druck <= -150 mbar, dann mach das Ventil auf
   PFOK = true;
   digitalWrite(Relai2, HIGH);
 }
}
else
 digitalWrite(Relai2, LOW);
}



void Pumpereg_ue() {
 if (pumpe_ueFlag)
 {
   if (druck1 > PsollF1 - Hyst)
   {
     digitalWrite(Pumpe_ue, LOW); //Wenn der Druck größer als Soll - Hysterese ist. dann schalte die Pumpe aus
   }

   if (druck1 <= PsollF1)        
   {
     digitalWrite(Pumpe_ue, HIGH);  //Wenn der druck kleiner als solldruck ist, dann schalte die Pumpe ein
   }
 }
 else
   digitalWrite(Pumpe_ue, LOW);
   
}

void Pumpereg_un() {
 if (pumpe_unFlag)
 {
 if (druck2 < PsollF2 - Hyst)  
 {
 digitalWrite(Pumpe_un, LOW); //Wenn der Druck unter Soll-Hysterese fällt. dann schalte die Pumpe ein
 }
 if (druck2 >= PsollF2)  
 {      
 digitalWrite(Pumpe_un, HIGH);  //Wenn der Solldruck erreicht ist, dann schalte die Pumpe aus
}

}
else
   digitalWrite(Pumpe_un, LOW);
}


Danke für die Hilfe :-)

postmaster-ino

#1
Feb 24, 2019, 10:22 am Last Edit: Feb 24, 2019, 10:27 am by postmaster-ino
Hi

Da Es nicht funktioniert, wird Es nicht richtig sein ;)

Du hast einen Zeilenumbruch in Deinem Code-Tag, deshalb funktioniert Der nicht - kannst Du nachträglich aber abändern.

Was mir direkt auffällt:
- keine Kommentare
- Sketch nicht vollständig

MfG

PS: Waren die Kommentare vorhin schon da?? ... bin wohl von Blindheit geschlagen ...
anscheinend ist Es nicht erwünscht, einen Foren-internen Link als 'Homepage' einzubinden, damit JEDER nur einen Klick von combie's Liste zum Thema State-Maschine entfernt ist.
... dann eben nicht ...

HotSystems

Wie lange bist du schon hier im Forum ?
Warum verwendest du keine Code-Tags für den Sketch ?
Dann wird der sicher besser lesbar.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

LightuC

#3
Feb 24, 2019, 10:34 am Last Edit: Feb 24, 2019, 10:55 am by LightuC
Wie lange bist du schon hier im Forum ?
Warum verwendest du keine Code-Tags für den Sketch ?
Dann wird der sicher besser lesbar.

Naja, der Ansatz ist ja zu sehen ;)

Kann es den richtig sein was ich gemacht habe, weil irgendwie funktioniert es nicht so wie ich es möchte :-(
Da musst du schon etwas genauer werden. Was funktioniert denn nicht? Außerdem solltest du deinen Funktionen und Variablen wirklich bessere Namen geben. Deine Unterdruck-Funktionen unterscheiden sich nur durch ein 'e' von deinen Überdruckfunktionen ... Warum nennst du sie denn nicht
Code: [Select]
void checkOverpressureAndCloseValve();
void checkUnderpressureAndCloseValve();
void checkPressureAndActivatePump();
void checkPressureAndDeactivatePump();


Wie du an den Namen schon erkennen kannst, machen deine Funktionen zu viel. Sie sollten genau eine Sache machen (Ventil auf/zu, Druck prüfen, Pumpe an/aus). Dazu kommen dann Variablenamen wie "druck1, druck2, druck3". Was unterscheidet Druck 1 von Druck 2? Was soll PFOK sein? Relais schreibt sich mit einem 's' am Ende.

All das dient der besseren Lesbarkeit deines Codes, sei es nun für dich oder in diesem Falle uns. Mit gut gewählten Namen erklärt sich der Code von selbst und du hast keine Inkonsistenzen zwischen Code und Kommentar (bei dir steht "wenn der Druck über ..." im Kommentar, aber im Code prüfst du, ob der Druck unter dem Sollwert ist). Kennst du dich mit Klassen in C++ aus?

uwefed

CODE TAGs korrigiert.
Bitte gesamten Sketch.

Grüße Uwe

agmue

Naja, der Ansatz ist ja zu sehen ;)

Da musst du schon etwas genauer werden.
Möglicherweise hilft Dir beim Helfen dieses Thema: Verständnisfrage
Wahnsinn und Verstand trennt nur eine dünne Wand. (Daniel Düsentrieb)

LightuC

Möglicherweise hilft Dir beim Helfen dieses Thema: Verständnisfrage

Nett gemeint, ich habe es auch kurz überflogen. Aber 14 Seiten kann ich mir leider jetzt nicht durchlesen, da ich auch noch arbeiten muss und hier nur nebenbei versuche zu helfen (Bin heute erst auf das deutsche Forum gestoßen, war bisher im englischen Teil unterwegs, da herrscht ein etwas anderer Ton :D).

Da dies ein neuer Post ist, sollte Maria2 hier einmal das Problem kurz umreißen, da dieser Post zunächst ja mal keine Verbindung zu dem Alten hat. Dazu gehört meiner Meinung nach auch eine detaillierte Problembeschreibung (oder zumindest mehr als "es geht nicht"). Ich werde den alten Post aber dennoch bei Zeiten durchgehen, damit ich ein bisschen Hintergrund zu dem Projekt bekomme.

Go Up