Zeitfunktionen mit C#

eloboy

Level-1
Beiträge
70
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

wie kann ich eine Einschaltverzögerung bzw Ausschaltverzögerung mit nachtriggern Programmieren in C#.
irgenwie fehlt mir gerade der Ansatz dazu :sb7:

danke schon mal.
 
Kommt auf das Konzept an, und wozu du so einen Timer benötigst.

Wenn ich das SPS-Prinzip in einem C#-Programm nachbilden wollte, würde ich also Vorlage die IEC-Timer nehmen.
Dazu eine Klasse für z.B. TON erstellen, mit den entsprechenden Schnittstellen.
Wird eine steigende Flanke an IN erkannt (kann man ja schön über die getter / setter Methoden lösen), wird in einer internen Variable DateTime.Now.Ticks gespeichert.
Wird der Zustand von Q oder ET abgefragt, wird die Differenz zur Startzeit berechnet und an ET ausgegeben, bzw. Q geht auf true oder false.

Für andere Zwecke würde man sich wohl Events beim Ablauf eines Timers erzeugen lassen.

Was willst du denn damit machen, oder hast du schon Timer und dir fehlt nur das Nachtriggern?
 
Und wie kommt die Information über die Störmeldelampe in dein Programm, fragst du diese zyklisch ab?
Das ist etwas unpraktisch, denn dann musst du das Signal mit min. der doppelten Frequenz abfragen (Abtasttheorem).

Mal angenommen du machst das, sollte das mit folgendem Pseudocode funktionieren wenn du das in deinem Poll-Intervall aufrufst:
Code:
bool Hilfsvariable
bool Meldevariable
bool SignalAlt
int TickCount2sTimer // Zeit für Rücksetzen der Meldung
int TickCount5sTimer // Zeit für setzen der Meldung

// Steigende Flanke
If Signal And Not SignalAlt then
  Hilfsvariable = true
  TickCount5sTimer = TickCountNow
EndIf

// Fallende Flanke
If Not Signal And SignalAlt Then
  TickCount5sTimer = TickCountNow
EndIf

// Wenn Lampe für länger als 2 Sekunden aus, dann keine Meldung mehr
If DiffToNow(TickCount2sTimer) > 2s Then
  Hilfsvariable = false
  Meldevariable = false // alternativ rücksetzen durch Quittierung
EndIf

// Lampe blinkt für länger als 5 Sekunden? Dann Meldung
If Hilfsvariable And DiffToNow(TickCount5sTimer) > 5s Then
  Meldevariable = true
EndIf 

// Letzten Signalzustand sichern
SignalAlt = Signal

Ich würde Environment.TickCount anstelle DateTime.Now.Ticks verwenden, dann wird das Verhalten nicht durch eine Uhrzeitverstellung beeinflusst.
Du musst dir nur eine Funktion DiffToNow() schreiben, die den Überlauf von TickCount nach 24 Tagen abfängt.
 
Zurück
Oben