Einfachen Tast-Dimmer programmieren

calimer0

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

habe einen bestimmten "Dimmwert":UINT und möchte diesen bei gedrücktem Taster hochzählen.
Wenn der Maximalwert (32767) erreicht ist, soll wieder runter gezählt werden, wie wird sowas programmiert?
 
Naja, so auf die schnelle würd ich mal sagen du setzt dir beim Erreichen des End-Werts ein Flag dsetzt das die Zählrichtung umkehrt.

via Mobile
 
Funktionierenden Code kann ich dir leider nicht anbieten da ich nicht auf CodeSys unterwegs bin.

Rein gedanklich müsste es ungefähr so aussehen:
Code:
If Taster = TRUE Then[INDENT]IF (Flag_ZDir = FALSE) And (Zählwert < 32768 ) Then
[/INDENT]
[INDENT=2]
Zählwert = Zählwert +1[/INDENT]
[INDENT]
End If

IF (Flag_ZDir = TRUE) And (Zählwert > 0 ) Then[/INDENT]
[INDENT=2]
Zählwert = Zählwert  - 1
[/INDENT]
[INDENT]
End If

If Zählwert >= 32768 Then Flag_ZDir = TRUE End If
If Zählwert <= 0 Then Flag_ZDir = FALSE End If[/INDENT]
End If
So um den Dreh. Du brauchst auch noch eine Möglichkeit die Geschw. mit der der Zähler zählt zu beeinflussen. Vielleicht sogar logarithmisch.
Dann solltest du dass noch in eine Art wiederverwendbare Funktion packen.
Wenn du auch Probleme mit der Syntax hast (das oben ist sicher keine gültige CodySys-Syntax) dann musst du wohl warten bis sich der erste Kollege meldet
der weiß wovon er spricht. :rolleyes:
 
Zuletzt bearbeitet:
Code:
IF uiCounter >= 32767 (* OR ... *) THEN
  xFlag_ZDir := TRUE ;    //umschalten zu Rückwärtszählen
ELSIF uiCounter <= 0 (* OR ... *) THEN
  xFlag_ZDir := FALSE ;   //umschalten zu Vorwärtszählen
END_IF ;

IF xTaster THEN
  IF xFlag_ZDir THEN
    iIncVal := -1 ; //Rückwärtszählen
  ELSE
    iIncVal := +1 ;  //Vorwärtszählen
  END_IF ;

  uiCounter := uiCounter + iIncVal ;
END_IF ;

Das als erster Test-Einstieg - die Aufgabe wird bestimmt noch komplizierter, wenn nicht immer nur zwischen den Maxima hin-und-her-gezählt werden soll und vielleicht auch größere Inkremente als 1 ins Spiel kommen.
Am besten zunächst die komplette Aufgabenstellung formulieren und dann erst programmieren.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Und dann ist auch noch die Frage, wie schnell gedimmt werden soll:
Bei den beiden Vorschlägen wird das von der Zykluszeit der SPS bestimmt. PN/DP hat schon größere Inkremente ins Spiel gebracht, was die Sache beschleunigen würde. Zum Verlangsamen steht dann vermutlich ein Timer zur Debatte.
 
Moin,

Evtl. ne blöde Idee. In der Oscat-Lib gibts nen fertigen Dimmer mit Tasterinterface für Doppelklick etc.
Und wenn man den nur als Vorlage zur Vereinfachung her nimmt.
 
Ich würde auch nicht bis 0 Zählen sondern bei einem Wert von ca. 5% auf 0 springen. Sonst hast du den Effeckt, dass die Lampen aus sind aber noch bestromt werden. Eventuell auch noch eine Zeit des "betätigen" von ca. 2 Sekunden um auf "Aus" oder "volle Beleuchtung" zu schalten.
Grüsse Holger
 
Zurück
Oben