Hallo Leute... hab mal wieder ein Problem.
Habe folgende Regelaufgabe:
USB-Interface, über das ein Messwert eingelesen wird.
Einen Schieber, der einen Rohrquerschnitt verengt und damit auch den Messwert verändert.
Einen zu messenden Wert, der eben über den Schieber "angefahren" werden soll.
Wenn der Messwert den zu messenden Wert erreicht (+- 4%) soll 3sec gewartet werden und der Messwert gespeichert werden.
Aber wenn in der Zeit (3sec) der Messwert wieder ausserhalb der +-4% ist, soll der Schieber wider nachregeln.
Habe das bisher so gelöst:
loop3 und 4 werden an anderer Stelle auf true gesetzt und SchieberRegelung aufgerufen.
Funktioniert soweit eigentlich ganz gut.
Wenn sich das Programm aber in der For-Schleife befindet und der Messwert die +-4% verlässt und dann wieder drinn ist, scheint es so als ob 2 parallele For-Schleifen.
Wie kann ich ganz sicher die For-Schleife in der die 3sec gezählt werden abbrechen wenn der Messwert die +-4% verlässt?
Hoffe ich konnte es halbwegs verständlich erklären und Ihr mir helfen könnt.
Danke schon mal im Voraus
Habe folgende Regelaufgabe:
USB-Interface, über das ein Messwert eingelesen wird.
Einen Schieber, der einen Rohrquerschnitt verengt und damit auch den Messwert verändert.
Einen zu messenden Wert, der eben über den Schieber "angefahren" werden soll.
Wenn der Messwert den zu messenden Wert erreicht (+- 4%) soll 3sec gewartet werden und der Messwert gespeichert werden.
Aber wenn in der Zeit (3sec) der Messwert wieder ausserhalb der +-4% ist, soll der Schieber wider nachregeln.
Habe das bisher so gelöst:
loop3 und 4 werden an anderer Stelle auf true gesetzt und SchieberRegelung aufgerufen.
Java:
public class SchieberRegelung extends Thread{
@Override
public void run() {
while ( loop3) {
if (schieberPos<=255 & schieberPos>=0){
if(gemessenerWert<zuMessenderWert*1.04 && gemessenerWert>zuMessenderWert*0.96){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
interrupt();
}
if(loop4){
loop4=false;
counter=zeile+1;
for (int i = 0; i <= 3; i++) {
try {
meldArea.setText("Warte " + i+" sec.");
Thread.sleep(1000);
} catch (InterruptedException e) {
interrupt();
}
}
if(counter==zeile+1){
meldArea.setText("Messpunkt erfasst.");
Schreiben();
}
}
}
else{
loop4=true;
counter=zeile;
if (gemessenerWert<zuMessenderWert){
schieberPos=schieberPos+1;
jv.OutputAnalogChannel(1, schieberPos);
SchieberProg.setValue((int)Math.round(schieberPos/2.55));
try {
Thread.sleep(150);
} catch (InterruptedException e) {
interrupt();
e.printStackTrace();
}
}
else{
schieberPos=schieberPos-1;
jv.OutputAnalogChannel(1, schieberPos);
SchieberProg.setValue((int)Math.round(schieberPos/2.55));
try {
Thread.sleep(150);
} catch (InterruptedException e) {
interrupt();
e.printStackTrace();
}
}
}
}
else{
if (schieberPos>127){
schieberPos=255;
}
else{
schieberPos=0;
}
}
}
}
}
Funktioniert soweit eigentlich ganz gut.
Wenn sich das Programm aber in der For-Schleife befindet und der Messwert die +-4% verlässt und dann wieder drinn ist, scheint es so als ob 2 parallele For-Schleifen.
Wie kann ich ganz sicher die For-Schleife in der die 3sec gezählt werden abbrechen wenn der Messwert die +-4% verlässt?
Hoffe ich konnte es halbwegs verständlich erklären und Ihr mir helfen könnt.
Danke schon mal im Voraus