Prg setzt Variable nicht Kategorie: Programmierung (von MaWo - 15.09.2007 12:01) | |
| |
Hallo, ich habe ein kleine PRg geschrieben, mit dem eine Zirkulationspumpe gesteuert werden soll. Die Routint wird mit Anforderung aufgerufen und sollte dann von selbst weiter laufen - tut sie soweit auch. Zur Funktion: Sobald nach einem Start ein Zeitsignal anliegt soll die Steuerung in Abhängigkeit von Werktags (Wt) und Wochenende (We) zu festgelegten Zeiten eine Pumpesteuerung einschalten und nach Ablauf der max Zeit für die Einschaltung wieder ausschalten. Bei Betätigung eines Kontaktes soll die Pumpensteuerung 1 mal eingeschaltet werden und die Zeitautomatik soll dann bis zum nächsten Tag ausgeschaltet werden. In einem anderen thread werden die Daten der Restlaufzeit bzw Blockadezeit auf dem LCD angezeigt. Manchmal - bisher habe ich noch keine Idee wann - setzt das Programm den Status nach ablauf der Bockiertzeit nicht wieder auf 0 und die Anzeige zeigt negative Werte an. Das Prg reagiert natürlich auch nicht mehr auf den Kontakt. Hat jemand eine Idee was das sein könnte - oder sehe ich den Fehler einfach nur nicht? /* On anforderung Pumpe 0= Aus / 1=Ein Schalter / 2=Ein Werktag / 3=Ein Wochenende*/ int On; thread Pump //Pumpe ein und ausschalten { var.RunTimeZ= var.NowTimeSZ + var.OnTime; // Eindauer setzen var.pstatus=1; // Status setzen Pumpe Ein var.Modbus[2]=var.pstatus; // Status an Modbus station_io.RELon(1); // Pume Einschalten wait var.RunTimeZ<=var.NowTimeSZ; // Einschaltdauer warten var.RunTimeZ= var.NowTimeSZ + var.OffTime; // Blockadezeit Ende setzen var.pstatus=2; // Status setzen blockiert var.Modbus[2]=var.pstatus; // Status an Modbus station_io.RELoff(1); // Pumpe Aus wait var.RunTimeZ<=var.NowTimeSZ; // Blockdauer warten var.pstatus=0; // Status setzen Pumpe Aus var.Modbus[2]=var.pstatus; // Status an Modbus halt;} // Unterprogramm anhalten thread Anforderung //anforderung Zikulationspumpe { // Automatische Einschaltung if system.dcferr()==0 // Wenn DCF O {if var.PAuto>=1 // Pumpe Auto Anforderung {if system.dow()>0 // von Montag {if system.dow()<6 // bis Freitag {if var.NowTimeMZ>=var.PonWtZ // Einschaltzeit Erreicht {On=2;var.PAuto=2; // Anforderung Wochentags - Auto Aktiv if var.NowTimeMZ>=var.PonWtZ+var.PonWtZ // Ausschaltzeit erreicht {On=0;var.PAuto=0;} // Anforderung aus - Auto blcokierten } } else // Sammstag {if var.NowTimeMZ>=var.PonWeZ // Einschaltzeit erreicht {On=3;var.PAuto=2; // Anforderung Wochenende if var.NowTimeMZ>=var.PonWeZ+var.PonWeZ // Ausschaltzeit erreicht {On=0;var.PAuto=0;} // Anforderung aus - Auto blcokierten } } } else // Sonntag {if var.NowTimeMZ>=var.PonWeZ // Einschaltzeit erreicht {On=3;var.PAuto=2; // Anforderung Wochende if var.NowTimeMZ>=var.PonWeZ+var.PonWeZ // Ausschaltzeit erreicht {On=0;var.PAuto=0;} // Anforderung aus - Auto blcokierten } } var.Modbus[9]=On; // On an Modbus var.Modbus[11]=var.PAuto; // Pauto an Modbus } } if ports.get(15)==0 // Port P15 Ein {On=1;var.Modbus[9]=On; // Anforderung von Schalter var.PAuto=0;var.Modbus[11]=var.PAuto;} // Automatikfreigabe blockieren if var.pstatus==0 // Bei Pumpe aus {if On>=1 // Bei Anforderung {run Pump;} // Unterprogramm ausführen } else // Bei Pumpe im Zyklus {On=0;var.Modbus[9]=On; // Anforderung Aus und an Modbus var.PAuto=0; // Automatikfreigabe blockieren var.Modbus[9]=On; // On an Modbus var.Modbus[11]=var.PAuto; // Pauto an Modbus } } mfg MaWo | |
Antwort schreiben Antworten: Re: Prg setzt Variable nicht (von André H. - 30.09.2007 18:40) |