Takt programmieren

Axel

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

wie kenn ich denn einen Ausgang an der S7 takten? Der Ausgang soll 5 Sekunden gesetzt sein und danach 5 Sekunden im Sekunden-Takt blinken. Das setzen hab ich ja hinbekommen, aber das Takten nicht.
Kann mir da jemand einen Ratschlag geben?

Danke

Axel
 
Hallo!

In der S7 gibt es Taktmerker. Einzustellen sind die in der Hardwarekonfiguration bei der CPU.
Die brauchst du einfach nur und-verknüpfen und schon blinkt der Ausgang

godi
 
Zuviel Werbung?
-> Hier kostenlos registrieren
hier mal eine kleine Schmunzellösung, aber sie funktioniert:

Code:
FUNCTION FC 30 : VOID
TITLE =
VERSION : 0.1

BEGIN
NETWORK
TITLE =Sekundentakt erzeugen
//Man könnte natürlich auch den 500ms-Takt des Taktmerkerbytes aus der 
//Hardwarekonfig 
//nutzen!
      U     M      1.0; 
      UN    M      1.2; 
      L     S5T#500MS; 
      SE    T     10; 
      U     T     10; 
      =     M      1.2; 

NETWORK
TITLE =Startflanke Gesamt

      U     M      1.0; //Ablauf ein
      FP    M      1.1; 
      SPBN  KFL; 

      L     2#10101010101111111111; 
      T     MD    10; 

KFL:  NOP   0;
 
NETWORK
TITLE =Schieben der Bits

      U     M      1.2; 
      SPBN  KSCH; 

      L     MD    10; 
      SRD   1; 
      T     MD    10; 

KSCH: NOP   0; 

NETWORK
TITLE =Ausgang schalten

      U     M     13.0; 
      =     A      1.0; 

NETWORK
TITLE =Reset
//Wenn fertig, oder es wird abgeschaltet (M1.0 auf False) dann alles Reset
      U(    ; 
      L     MD    10; 
      L     0; 
      ==D   ; 
      )     ; 
      O     ; 
      UN    M      1.0; 
      SPBN  KRES; 

      CLR   ; 
      =     M      1.0; 

      L     0; 
      T     MD    10; 

KRES: NOP   0; 
END_FUNCTION
In eine Quelle einfügen und übersetzen.
Man kann natürlich auch mehrere Timer verwenden ;)!
 
Der Ausgang soll 5 Sekunden gesetzt sein und danach 5 Sekunden im Sekunden-Takt blinken. Das setzen hab ich ja hinbekommen, aber das Takten nicht.

Hier mal eine Lösung mit 2 Taktgebern und 2 Binäruntersetzern.

Gruß Kai
 

Anhänge

  • OB1.pdf
    7,1 KB · Aufrufe: 618
Kurzfassung für Schreibfaule ;-)

Code:
//*** Zähler zurücksetzen
      L     Z     10
      L     10
      >=I   
      R     Z     10
 
//*** Zähler hochzählen
      U     "TAKT_1,00 Hz"
      ZV    Z     10
 
//*** Zähler auswerten
      L     Z     10
      L     5
      >=I   
      O     "TAKT_1,00 Hz"
      =     A      0.0


Gruß, Onkel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hier mal ne Lösung von nem Azubi :D


U E 124.0 // Start
FP M 0.3
S M 0.0 // Merker Dauerleuchten

U M 0.0
L S5T#5S
SE T 1

U T 1
R M 0.0
S M 0.1 // Merker Blinken

U M 0.1
FP A 124.0
ZV Z 1

L Z 1
L 5
<=I
= M 0.2 // Zähler kleiner, gleich 5

// Ausgabe

U M 0.1 // Merker Blinken
U M 0.2 // Zähler kleiner, gleich 5
U M 100.7 // 0,5 Hz Taktmerker
O M 0.0 // Merker Dauerleuchten
= A 124.0

// Rücksetzten

L Z 1
L 6
>=I

R Z 1
R M 0.0
R M 0.1
R M 0.2
 
nicht ganz so kurz, aber mit Trigger E0.0

OB35, 1000ms

UN E 0.0
R A 0.0
SPBN EXIT
L 2#1010101010111110
T MW 0
EXIT: L MW 0
SRW 1
T MW 0
SPP AUSG
R A 0.0
BEA
AUSG: = A 0.0


;-)
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Noch eine Frage zum gleichen Thema

Nochmal eine Frage zum Takt - kann ich an den Ausgang auch eine Frequenz von 1 kHz anlegen? Habe eine CPU 314 IFM und will nen Schrittmotor damit ansteuern. Er bewegt sich zwar, aber leider nur sehr langsam. Wollte die FM 353 umgehen...vielleicht kann mir dabei ja wer helfen.
DANKE!
 
Nochmal eine Frage zum Takt - kann ich an den Ausgang auch eine Frequenz von 1 kHz anlegen? Habe eine CPU 314 IFM und will nen Schrittmotor damit ansteuern. Er bewegt sich zwar, aber leider nur sehr langsam. Wollte die FM 353 umgehen...vielleicht kann mir dabei ja wer helfen.
DANKE!

Wenn Siemens ne Ausgangskarte mit integriertem Funktionsgenerator hat? Klar kein Problem.
Ansonnsten vergiss es. Du kannst froh sein wenn du einen normeln Peripherieausgang mit "sauberen" 20 Hz takten kannst.

mfG René
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@vollmi
Ein wenig vorsichtig mit solchen Aussagen,
eine 31xC, also die Nachfolger der IFM-Typen, könnten
auf manchen Ausgängen bis zu 2,5kHz.

Die 314IFM aber leider nicht.

Mfg
Manuel
 
@vollmi
Ein wenig vorsichtig mit solchen Aussagen,
eine 31xC, also die Nachfolger der IFM-Typen, könnten
auf manchen Ausgängen bis zu 2,5kHz.

Die 314IFM aber leider nicht.


Aber doch nur auf Impulsausängen oder (Funktionsgenerator?)?
Die ausgänge kann trotzdem nicht wärend der Zykluszeit mehrmals schalten sondern bis zur nächsten Schalthandlung muss man wieder das Ende des Zyklus abwarten? Oder sehe ich das falsch?
 
Das steht dazu im Handbuch:
Code:
Pulsweitenmodulation

Ändern Sie während der laufenden Impulsausgabe den Ausgabewert, berechnet
die CPU die neue Impulspause und Impulsdauer sofort und schaltet den Ausgang
entsprechend. Dadurch kann sich die Periodendauer für eine Periode verlängern
oder verkürzen:
- Ändern Sie während der Impulspause und ist der neue Ausgabewert kleiner
als der alte, wird die Periodendauer einmalig verlängert, da die neue Pause
länger wird.
- Ändern Sie während der Impulspause und ist der neue Ausgabewert größer
als der alte, wird die Periodendauer einmalig verkürzt, da die neue Pause
kleiner wird.
- Ändern Sie während der Impulsdauer und ist der neue Ausgabewert kleiner als
der alte, kann sich die Periodendauer einmalig verlängern, da die neue Pause
länger wird.
- Ändern Sie während der Impulsdauer und ist der neue Ausgabewert größer als
der alte, bleibt die Periodendauer konstant.

So wie ich den Text interpretiere, kann ich den Ausgabewert quasi mit jedem Aufruf des SFB49 ändern,
also auch mehrmals im Zyklus.

Mit ein paar Tricks müsste man damit sogar halbwegs vernünftig positionieren können.

Mfg
Manuel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Noch ein Code

Hier mal eine SCL-Lösung :D

FUNCTION_BLOCK Oszillator

TITLE = 'Oszillator'
//Ein ständig laufender Oszillator.
//Dieser Oszillator nutzt die Systemtimer T1 und T2!!!!

VAR_OUTPUT
Q : BOOL;
END_VAR

VAR
Timer1 : S5TIME ;
Timer2 : S5TIME;
actFlag1 : BOOL :=FALSE;
actFlag2 : BOOL :=FALSE;
END_VAR

Timer1 := S_PULSE (T_NO:= T1, S:= NOT actFlag2, TV:= T#1s, R:=FALSE, Q:=actFlag1);
Timer2 := S_PULSE (T_NO:= T2, S:= NOT actFlag1, TV:= T#1s, R:=FALSE, Q:=actFlag2);

Q := ActFlag2;
END_FUNCTION_BLOCK
 
Kennst Du schon die OSCAT Library dort sind verschiedenste Taktgeber im Source code enthalten. Sogar Pulsweitenmodulatoren und sinus / Rechteckgeneratoren. Alles im Source Code
Die Lib kannst du dir downloaden unter WWW.OSCAT.DE
Das schönste ist es gibt auch ein excellentes Manual dazu
 
Oscat könnte so schön sein...

...wenn man SCL könnte*g*
Kann mir wer nen Tipp geben, wie ich möglichst einfach die Funktion GEN_SQ in mein bestehendes Programm (mit AWLs programmiert) integrieren kann, so dass mir mein Dig.Ausgang an der SPS den gewünschten Takt (1 kHz) ausgibt?

DANKE
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Machs einfach so:

Ersteinmal einen Nadelimpuls bilden:

UN M 1.1
L S5T#100MS
SE T 1
U T 1
= M 1.1
//;
Jetz den Blinker bauen:
//;
U M 1.1
UN M 1.0
S M 1.0
= #Ein
U M 1.1
UN #Ein
R M 1.0
 
Zurück
Oben