Autor Thema: CLICK und "summende Relais"  (Gelesen 11406 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Offline charlie85

  • Newbie
  • *
  • Beiträge: 2
    • Profil anzeigen
CLICK und "summende Relais"
« am: 22. Januar 2018, 22:47:59 »
Hallo,

ich bin gerade dabei die ersten Schritte der Hausautomation mit einer Beckhoff SPS zu realisieren. Die eingesetzten Taster werden anhand von CLICK ausgewertet auf SINGLE, DOUBLE und TRIPLE, in den meisten Fällen wird dann ein Relais getoggelt. Funktionier soweit prima, aber wenn ein Taster lange gedrückt wird (statt einem oder mehreren kurzen Klicks), toggelt das Relais so schnell, dass es zum "summen" anfängt. Eine ziemlich zuverlässige Methode das angeschlossene Relais und Leuchtmittel ins Jenseits zu befördern.

Was ist eine "saubere" Methode um das zu verhindern? Z.B. das Toggeln eines Relais/erneutes Auslösen des Tasters nach einer Aktion für 1-2 Sekunden zu unterbinden?

IF InButton_10_03.SINGLE THEN
OutLight_10_07 := NOT OutLight_10_07;
END_IF

Vielen Dank für Eure Tipps!


Offline ADS_0x1

  • Newbie
  • *
  • Beiträge: 22
    • Profil anzeigen
Re: CLICK und "summende Relais"
« Antwort #1 am: 29. Januar 2018, 16:13:01 »
Du kannst bei TwinCAT Breakpoints im Code setzen. Wenn das Relais ein- und direkt wieder ausgeschaltet wird, dann schau dir mal verschiedene Zeitpunkte an, indem du Breakpoints in eine einfache IF-Abfrage setzt:

IF ausgang THEN
 blubb := TRUE; // <= Hier Breakpoint auf eine Nonsens-Zuweisung setzen
END_IF;

Dann kannst du mit weiterlaufen lassen, bis das nächste mal der Ausgang gesetzt wird oder gesetzt bleibt. Um das Relais nicht zu himmeln, kannst du das erst einmal auf eine andere Variable legen.

Ansonsten kann man nur vermuten, was du angestellt hast, denn du fütterst uns nicht gerade mit Informationen... dein Codeausschnitt wird dir mit den Breakpoints wahrscheinlich das Verhalten zeigen, warum es nicht klappt.

Der Click-Baustein hält den Ausgang lediglich für einen Zyklus auf HIGH, also musst du dir danach eine Selbsthaltung oder ein Flip-Flop hinsetzen, damit das ganze gespeichert wird.

Für dich als Hausaufgabe also:

- Flip Flop googlen
- Selbsthaltung googlen
- OSCAT Building manual lesen, Abschnitt 'CLICK'
- Breakpoints setzen

Damit solltest du deinem Problem auf die Schliche kommen.

Viele Grüße!

Edit:

Habe ein Beispiel für dich, Stichwort Stromstoßschalter:
https://www.sps-forum.de/codesys-und-iec61131/85633-zentral-aus-fuer-stromstossschalter.html
« Letzte Änderung: 29. Januar 2018, 16:20:27 von ADS_0x1 »

Offline mattsches

  • Sr. Member
  • ****
  • Beiträge: 268
    • Profil anzeigen
Re: CLICK und "summende Relais"
« Antwort #2 am: 31. Januar 2018, 12:51:04 »
@ADS_0x1: Dass die Ausgänge SINGLE, DOUBLE und TRIPLE vom CLICK nur als Impulse ausgegeben werden, also nur für einen Zyklus anstehen, stimmt nicht:

Zitat
Der entsprechende Ausgang bleibt mindestens einen Zyklus aktiv und maximal solange wie der Eingang IN aktiv bleibt.

Der Code bestätigt das für mich auch, ohne es jedoch noch einmal ausprobiert zu haben.

@charlie85:

Für das Umschalten deines Relais solltest du daher nicht direkt den Bausteinausgang nehmen, sondern ihn vorher über eine Flankenerkennung ziehen. R_TRIG heißt der entsprechende Baustein, ist in der Standard.lib enthalten. Die R_TRIG-Instanz rufst du im Code nach dem betreffenden CLICK auf, übergibst ihr als CLK InButton_10_03.SINGLE und baust deinen Dreizeiler so um:

IF <Name der R_TRIG-Instanz>.Q THEN
OutLight_10_07 := NOT OutLight_10_07;
END_IF

Dann schaltet dein Relais bei jedem Drücken um (toggeln), ohne zu summen.

Wenn du auch mit DOUBLE und TRIPLE etwas toggeln willst, brauchst du dafür je eine weitere R_TRIG-Instanz.

Offline charlie85

  • Newbie
  • *
  • Beiträge: 2
    • Profil anzeigen
Re: CLICK und "summende Relais"
« Antwort #3 am: 01. Februar 2018, 18:07:56 »
@ADS_0x1:

Danke für den Hinweis, nach längerem Suchen wäre ich vermutlich auf dem vorgeschlagenen Weg zum Problem gekommen.

@mattsches:

Vielen Dank für den wertvollen Tipp. Problem und Ursache verstanden und über den Trigger gelöst. Soeben umgesetzt und erfolgreich getestet!


Resultat: Folgender FB (BUTTON) funktioniert analog zu CLICK, reagiert aber jeweils nur auf die steigende Flanke.
Q und STATUS sind außen vor, da derzeit nicht in Verwendung.
FUNCTION_BLOCK BUTTON
VAR_INPUT
in : BOOL;
END_VAR
VAR_OUTPUT
single : BOOL;
double : BOOL;
triple : BOOL;
END_VAR
VAR
_triggerSingle : R_TRIG;
_triggerDouble : R_TRIG;
_triggerTriple : R_TRIG;
_click    : CLICK;
END_VAR

_click(IN := in);

_triggerSingle(CLK := _click.single);
_triggerDouble(CLK := _click.double);
_triggerTriple(CLK := _click.triple);

IF _triggerSingle.Q THEN single := TRUE; ELSE single := FALSE; END_IF;
IF _triggerDouble.Q THEN double := TRUE; ELSE double := FALSE; END_IF;
IF _triggerTriple.Q THEN triple := TRUE; ELSE triple := FALSE; END_IF;

(*
Version 0.1
Date 01.02.2018

Extends the oscat CLICK (FB) to be active for one single cyclus
after a rising edge to prevent toggling during button is pressed
*)
« Letzte Änderung: 01. Februar 2018, 21:12:56 von charlie85 »

Maradon

  • Gast
Re: CLICK und "summende Relais"
« Antwort #4 am: 19. November 2018, 09:16:56 »
Endlich einen finden.