Step 7 Wie kann ich eine bestimmte Anzahl von Impulsen generieren (ausgeben)

PJoeP

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

so ähnlich war schon mal ein Beitrage geschrieben, er wurde jedoch nicht gelöst bzw. weiter verfolgt.

Daher erneut ein Thread hierzu.

Wie kann ich in Step 7 V13 eine Impulsfolge erzeugen - mit bestimmter Anzahl.

z.B. brauche ich auf A0.0 genau 3 Impulse .
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn Du einen Puls/Pause Generator machst, kannst Du diesen um die Funktion erweitern, dass er bei der Flanke eines Triggersignal "n" mal Puls/Pause mithilfe eines Zählers hintereinander macht.
Damit kannst Du Puls/Pause unterschiedlich lang machen.
 
Zu erst mal Danke an Euch,

könnt Ihr mir vielleicht kurz genauer aufzeigen wie ich dies Programmtechnisch einbinden muss.

@ PN/DP Ich habe ja bei einem Rückwärtszähler immer nur bei einer Positiven Flanke einen Rückwärtsschritt und dabei aber kein Ausgangssignal das ich auswerten bzw. weitergeben kann.

@ borromeus Wie könnte so ein Puls/Pause Generator aussehen.
 
Das auswertbare Signal des Zählers ist der Zählerstand. z.B. 6, 5, 4, 3, 2, 1, 0

Wie soll die Impulsfolge genau aussehen? Wie lang die Impulse, wie lang die Pausen, wann weiterschalten? Soll der Code auch variable Anzahl Impulse verarbeiten können?

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Problemstellung ist folgende:

Ich habe eine SPS S7-1200 mit einem HMI Panel

Die Steuerung soll einem Schrittmotor Impulse geben um einen bestimmten weg weiter zu fahren. Bei dem Motor ist ein Impuls beispielsweise 1000 Inc. (diese sind im Motor so hinterlegt). Also fährt der Motor bei einem Impuls 1000 Inc. bei 2 Impulsen also 2000 Inc. usw.
Diese Impulse müssen über das HMI einstellbar sein um verschiedene Wege zu fahren.

Ein Impuls soll z.B. 200ms sein und eine Pause von 100ms.

Die Impulsabfolge wird wieder gestartet wenn die Anlage mit einem Prozess fertig ist (dies stellt dann den Automatikbetrieb dar mittels Vorwahl über HMI).
 
schade, dass Hey nicht mehr aktiv ist.
Ich meinte das Problem mit der Impulsausgabe für den Schrittmotor - also wie man eine einstellbare Anzahl von Impulsen (z.B. über HMI vorgegeben) mit definierter Impulsdauer (200ms) und Pause (100ms) an den Motor ausgibt, und das Ganze dann im Automatikbetrieb nach Prozessende wieder startet.
Falls du da eine Lösung hast, wäre ich echt dankbar!
Gruß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
schade, dass Hey nicht mehr aktiv ist.
Ich meinte das Problem mit der Impulsausgabe für den Schrittmotor - also wie man eine einstellbare Anzahl von Impulsen (z.B. über HMI vorgegeben) mit definierter Impulsdauer (200ms) und Pause (100ms) an den Motor ausgibt, und das Ganze dann im Automatikbetrieb nach Prozessende wieder startet.
Falls du da eine Lösung hast, wäre ich echt dankbar!
Gruß
Ton,tof,tp und zähler Bausteine entsprechend verschalten....
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Habe zufällig heute einen Puls-Baustein erstellt für eine Anlaufwarnung. Vielleicht hilft das ja.

Code:
FUNCTION_BLOCK "Pulser"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
   VAR_INPUT
      Reset { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool;   // Zurücksetzen auch bei Start=1
      Start { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool;   // Pos. Flanke startet Pulser
      T_On { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Time;   // Zeit für Signal=1
      T_Off { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Time;   // Zeit für Signal=0
      Repeats { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Int;   // Anzahl der Pulse, 0=unendlich
   END_VAR

   VAR_OUTPUT
      Signal { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool;   // Pulsierender Ausgang
      Active { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool;   // Aktiv
      Done { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool;   // Erreichen der Wiederholungen
      Count { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Int;   // Aktuelle Wiederholungen
   END_VAR

   VAR
      Start_Prev { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool;
      "Timer" {InstructionName := 'TON_TIME'; LibVersion := '1.0'; ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'; S7_SetPoint := 'False'} : TON_TIME;
      Timer_Q { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool;
      "Counter" {InstructionName := 'CTU_INT'; LibVersion := '1.0'; ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'; S7_SetPoint := 'False'} : CTU_INT;
   END_VAR


BEGIN
    // Starten bei positiver Flanke
    IF NOT #Reset AND #Start AND NOT #Start_Prev AND NOT #Active THEN
      
      #Active := TRUE;
      #Done := FALSE;
      
    END_IF;
    #Start_Prev := #Start;
    
    // Beenden bei Reset oder nach erreichen der Anzahl
    IF #Reset OR #Done THEN
      #Active := FALSE;
    END_IF;
    
    // Timer
    #Timer(IN := #Active AND NOT #Timer_Q,
           PT := (#T_On + #T_Off));
    #Timer_Q := #Timer.Q;
    
    // Ausgang Signal setzen
    IF #Active AND #Timer.ET <= #T_On THEN
      #Signal := TRUE;
    ELSE
      #Signal := FALSE;
    END_IF;
    
    // Zählen der Pulse
    #Counter(CU := #Signal,
             PV := #Repeats,
             R  := NOT #Active);
    #Count := #Counter.CV;
      
    
    // Bei erreichen der Pulse beenden // Unendlich pulsen bei Repeats=0
    IF #Counter.QU AND NOT #Signal AND #Repeats>0 THEN
      #Done := TRUE;
    END_IF;
    IF #Reset THEN
      #Done := FALSE;
    END_IF;
    
END_FUNCTION_BLOCK
 
Zurück
Oben