Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

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)