Entwickler-Ecke

Sonstiges (.NET) - Ventilregelung im Arduino


Maria2 - So 10.03.19 10:34
Titel: Ventilregelung im Arduino
Hallo Zusammen,

ich habe folgendes Problem in mein Code:
Ich benutze insgesamt zwei elektrisch Steuerbare Ventile für die regelung von Druck.
Leider ist das Ventil 1 (Relai1) immer geschlossen, obwohl es laut mein Code je nach If-Anfrage öffnen oder schließen soll. Bei ventil 2(relai2) funktioniert es problemlos.
Ich sitze seit drei Wochen daran und finde immer noch nicht den fehler. Kann mir bitte jemand dabei helfen?

Code in Arduino für Ventil:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
int SollDruck=150 //das soll er erreichen
int Hysterese=1

void uedruck_Flasche3(){
  //Unterdruckventil zu macheen
  
  if (Relai1Flag)
  {
    if (druck3  <= PsollF3pos - Hyst1) {           // wenn der Druck über 150 mbar ist, dann Ventil zu
     digitalWrite(Relai1, LOW);
     digitalWrite(Relai2, LOW);
    //PF3OK = false;
    }
    if (druck3 >= PsollF3pos)
    //else 
    {                          // ist der Druck >= 150 mbar, dann mach das Ventil auf
      //PF3OK = true;
      digitalWrite(Relai1, HIGH);
      digitalWrite(Relai2, LOW);
    }
  }
  else
    digitalWrite(Relai1, LOW);
    digitalWrite(Relai2,HIGH);
}

// Unterdruck im Flasche 3 erzeugen
void undruck_Flasche3(){
 
  if (Relai2Flag)
  {
    if (druck3  > PsollF3neg - Hyst1) {           // wenn der Druck über -150 mbar ist, dann Ventil zu
     digitalWrite(Relai2, LOW);
     digitalWrite(Relai1, LOW);
  
    }
    //else
    if (druck3 <= PsollF3neg) 
    {                          // ist der Druck <= -150 mbar, dann mach das Ventil auf    
      digitalWrite(Relai2, HIGH);
      digitalWrite(Relai1, LOW);
    }
  }
  else 
    digitalWrite(Relai2, LOW);
    digitalWrite(Relai1,HIGH);
}

Für GUI Visual Studio C# hab ich folgendes in arduino eingegeben:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
if (data == "motorOff"//für Überdruck
{
    pumpe_unFlag = true;
    pumpe_ueFlag = false;
    Relai1Flag = false;
    Relai2Flag = true;
}
if (data == "motorOn"//für Unterdruck
{
    pumpe_unFlag = false;
    pumpe_ueFlag = true;
    Relai1Flag = true;
    Relai2Flag = false;
}


Versteht jemand wo der fehler ist?

Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Moderiert von user profile iconTh69: Topic aus Alle Sprachen - Alle Plattformen verschoben am So 10.03.2019 um 10:17


Th69 - So 10.03.19 11:18

Da fehlen wohl Klammern um

C#-Quelltext
1:
2:
3:
  else
    digitalWrite(Relai1, LOW);
    digitalWrite(Relai2,HIGH);


PS: Es heißt Relais [https://de.wikipedia.org/wiki/Relais].


Maria2 - So 10.03.19 12:36

Leider funktioniert es trotzdem nicht :-(

Warum funktioniert dann Ventil 2 und bei Ventil 1 ist es immer geschlossen, warum regelt Ventil 1 nicht?


Th69 - So 10.03.19 13:12

Dann debugge den Code per Einzelschritt und überprüfe, ob die richtigen Code-Zeilen durchlaufen werden.

Ich würde dir eigentlich sogar zu Unit-Tests raten, habe aber den Eindruck, daß du dabei überfordert bist, obwohl es dir viel Arbeit (und Zeit) abnehmen würde.


Delete - Mo 11.03.19 06:01

- Nachträglich durch die Entwickler-Ecke gelöscht -