Taster Problem

R_Grabichler

Level-2
Beiträge
47
Reaktionspunkte
5
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo werte Gemeinde,
bin SPS Anfänger und scheitere bei einem vermeintlich einfachen Problem.

Ich will einen Taster drücken (z.B. in der Visualisierung),
dadurch soll ein Counter um 1 inkrementiert werden.
Zusätzlich soll ein Signal an einen digital Output gehen, mit einstellbarer Länge.
Pro Tastendruck natürlich nur ein inkrement und mein do die eingestellte Zeit, egal wie lange oder kurz gehalten wird.

Idee war, das mit Trigger und Ton zu lösen, aber es klappt bisher nicht.

Mein Trigger gibt kein Q als true aus, und ich verstehe nicht warum.



Code:
PROGRAM PLC_PRG
VAR
    taster: BOOL := FALSE;
    counterMachine: INT;
    myCounter : TON := (PT := TIME#2000MS);
    myTrig : R_TRIG;
    
    signal AT %QX0.0 : BOOL := FALSE;
     
    
END_VAR


myTrig(CLK := taster);                                          // durch Tastendruck soll q einmal kurzzeitig 1 sein
myCounter( IN := myTrig.Q,);                               // der Ausgang vom Trigger startet meinen Timer
                                                                          // wenn die Zeit abelaufen ist, wird der DO null
           
IF myTrig.Q AND NOT myCounter.q THEN                // setzt mein Signal auf true, bis Timer abgelaufen ist
    
    signal := TRUE;
    
    counterMachine := counterMachine +1; 
    
ELSE
    signal := FALSE;
END_If
 
Wenn der Druck des Tasters aus der Visu "entprellt" in der Steuerung ankommt, reicht eine Flankenauswertung für beides.

Flanke auf den Eingang aus der HMI, dann einmal auf den Zähler-Hochzähl-Eingang und einmal zu einem TP legen. Der TP benötigt (zumindest in meiner kleinen Beckhoff-Welt) nur einen Impuls / eine Flanke.

Viele Grüße!
 
Anstatt TON einen TOF oder TP benutzen.
Code:
    myCounter : TOF := (PT := TIME#2000MS);
    myTrig : R_TRIG;
    start : BOOL;

    signal AT %QX0.0 : BOOL := FALSE;
END_VAR

myTrig(CLK := taster);
start := myTrig.Q AND NOT signal;
myCounter(IN := start); //TOF oder TP

IF start THEN
    counterMachine := counterMachine + 1; 
END_If

signal := myCounter.Q;

Harald
 
Dann besser den TP. dann benötigt er keine Flanke am Eingang des Timers.

Das Problem an der Lösung ohne Flanke oder mit dem TOF: Bleibt der Knopf in der Visu gedrückt verändert sich die Ausgabedauer des Signals!

Mit einer Flanke und einem TP hat man immer die definierte Zeit.

Viele Grüße!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das Problem an der Lösung ohne Flanke oder mit dem TOF: Bleibt der Knopf in der Visu gedrückt verändert sich die Ausgabedauer des Signals!

Mit einer Flanke und einem TP hat man immer die definierte Zeit.
Auch mit einer Flanke und einem TOF hat man immer die definierte Zeit.
Das Problem besteht nur bei ohne Flanke und TOF.

Harald
 
Das ist vollkommen richtig Harald, man sehe mein oder als xor, dann ist gibt es das wieder, was ich damit gemeint habe und worauf du mich korrigiert hast.

Viele Grüße!
 
Zurück
Oben