wie getaktete Pulse nutzen mit SCL im TIA-Portal auf Vipa

Mirulan

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

ich bin neu hier und hätte da eine Frage auf wahrscheinlich für Euch recht niderigem Niveau.
Ich bi8n Anfängerin und möchte eine kleine Steuerung schreiben.

Ich habe hier eine Vipa Speed 7 mit einem konfigurierten CPU 315-2 PN/DP im TIA-Portal.

Die zwei LEDs ein und/oder auszuschalten ist kein Problem, aber ich brauche eine Möglichkeit u.a.
die LEDs blinken zu lassen und einen Hubmagneten im ca.3s Zyklus ein- bzw. auszuschalten.

Mein Buch SPS-Programiieren mit SCL im TIA-Portal hilft mir nicht weiter und mit einem TP bzw. TON/TOF
komme ich auch nicht weiter. Der Takt muss auch nicht allzu genau sein, aber ich habe trotz erhöhter
Anstrengungen das noch nicht rausbekommen, wie ich das Lösen kann.

Ich habe ehrlich gesagt keine Ahnung mehr, wo ich da nachlesen/nachschauen kann. Deshalb wäre ich für ein
paar erhellende Worte Dankbar.

Grüße
Mirulan
 
Wenn du dir einen Taktgeber selber bauen möchtest nimmst du am Besten 2 TON.
TON_1.Q schaltet den TON_2.
Die Invertierung von TON_2.Q schaltet den TON_1.
Deinen Blinktakt kannst du dann bei TON_1.Q abrufen.
Versuch dich mal dran ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Larry.

Danke für die Antwort, ich werde es mal versuchen und melde mich wieder, wenn ich es geschafft habe oder daran völlig verzweifelt bin. ;-)

Gruß
Mirulan
 
Wenn Du Anfänger in SPS bist, dann solltest Du nicht mit SCL anfangen (da kann man zu viele Fehler machen), sondern erst mal in KOP oder FUP das Programm aus vorgefertigten Anweisungen zusammenstellen, und dem Programm "beim arbeiten zusehen" - sprich: das Programm online beobachten. Da lernt man auch die zyklische Arbeitsweise von SPS verstehen. Dein Blinktakt-Geber könnte da so aussehen wie im angehängten Bild.

Wichtig ist, daß Timer in jedem Zyklus einmal aufgerufen werden (in speziellen Fällen kann auch mehrmals) - also nicht nur bedingt in einem IF-Konstrukt (häufiger Programmierfehler in SCL). Den Steuervariablen für die Eingänge der Timer kann man bedingt etwas zuweisen. Die Ausgänge Q von Timern dürfen und müssen in einem Zyklus genau einmal gelesen werden. Wenn man sie mehrmals verwenden will, dann auf eine Variable zuweisen und die Variable kann man so oft lesend verarbeiten wie man will.
Wie ein Timer bei Vipa im Detail funktioniert weiß ich nicht, doch wenn Du Dich an diese Regeln hältst, dann sollte das Programm funktionieren. (Bei Siemens gibt es Unterschiede im Verhalten der Timer zwischen den verschiedenen SPS S7-300/400/1200/1500)

Im Bild könntest Du die Variable #statBlink_1Hz auf einen FB-Output oder auf eine globale Variable kopieren. #statBlink_1Hz ist der Blinktakt mit ca. 0,5s lang 0 und ca. 0,5s lang 1.

T#496ms am ersten TON soll andeuten wie man die Genauigkeit des Blinktakts ein kleines bisschen verbessern kann, weil die genaue Periodendauer ergibt sich zu:
+ 496ms PT Ton_1
+ 500ms PT Ton_2
+ 1x Zykluszeit für Reset Ton_1 (wenn Ton_2 abgelaufen ist)
+ 2x 0,5 Zykluszeit durchschnittliche Überschreitung der Vorgabezeiten, ehe TON am Ausgang TRUE wird
-------------------------------
= 996ms + 2x Zykluszeit

Harald
 

Anhänge

  • Blinker_FUP.png
    Blinker_FUP.png
    34,9 KB · Aufrufe: 71
das gleiche Programm wie in #3 in SCL:
Code:
#Ton_1(IN := NOT #statTon_2_Q,
       PT := T#496ms,
       Q => #statBlink_1Hz);

#Ton_2(IN :=#statBlink_1Hz,
       PT := T#500ms,
       Q => #statTon_2_Q);

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Forum, Hallo Harald.

Habe es gerade erst gesehen, Danke!! Wäre ich vor dem Hinweis von Larry nie draufgekommen, dachte vorher an ein
LED anschalten
x ms warten
Led auschalten
y ms warten

und dann neu durch den Zyklus.

Boah Ey. Ich sehe schon, das wird noch was größeres! :)

Danke nochmal an Larry und dich, Harald.

Gruß Mirulan
 
dachte vorher an ein
LED anschalten
x ms warten
Led auschalten
y ms warten

und dann neu durch den Zyklus.
Das ist viel zu kompliziert/umständlich gedacht. Besser man erzeugt sich separat einen/mehrere global verwendbaren Blinktakt(e) und verknüpft diese dann bei der Ausgabe an die LEDs, überall da wo man die Blinktakte braucht.
Beispiel in KOP
Code:
#Condition_
BlinkNormal    #Blink_1Hz       #Out_LED
----| |------------| |------+------( )--
                            |
#Condition_                 |
BlinkSchnell   #Blink_2Hz   |
----| |------------| |------+
                            |
#Condition_                 |
Dauerlicht                  |
----| |---------------------+
                            |
#Lampentest                 |
----| |---------------------+
dasselbe in FUP
Code:
 #Condition_  +---+    +---+
 BlinkNormal--| & |    |>=1|
  #Blink_1Hz--|   |----|   |
              +---+    |   |
                       |   |
 #Condition_  +---+    |   |
BlinkSchnell--| & |    |   |
  #Blink_2Hz--|   |----|   |
              +---+    |   |
                       |   |  #Out_LED
#Condition_DauerLicht--|   |    +---+
          #Lampentest--|   |----| = |
                       +---+    +---+
Möchte man (als Gimmick) zwei LEDs im Gegentakt blinken lassen, dann braucht man bei der zweiten LED einfach nur den negierten Takt verwenden.
Code:
 #Condition_  +---+    +---+
 BlinkNormal--| & |    |>=1|
  #Blink_1Hz-o|   |----|   |
              +---+    |   |
                       |   |
 #Condition_  +---+    |   |
BlinkSchnell--| & |    |   |
  #Blink_2Hz-o|   |----|   |
              +---+    |   |
                       |   |  #Out_LED
#Condition_DauerLicht--|   |    +---+
          #Lampentest--|   |----| = |
                       +---+    +---+

S7-CPUs haben ein sogenanntes Taktmerkerbyte mit häufig benötigten (Blink)Takten, aktivierbar in den Eigenschaften der CPU. Da braucht man die Takte nicht selbst erzeugen. Vermutlich hat Deine Vipa-CPU auch sowas?


PS: manchmal macht es auch Sinn, die Ausgabetakt/pulse für eine LED separat nur für diese LED zu erzeugen, z.B. wenn man einen bestimmten Blinkcode ausgeben will. Beispiel hier

Harald
 
Zuletzt bearbeitet:
Zurück
Oben