# Impulsgeber(Frequenz und Breite) variabel in AWL programmieren?



## Bosga (17 September 2008)

Hallo Leute,
ich hab ein Problem mit AWL.
Bin ein totaler Neuling in Sachen AWL.
Habe eine Aufgabe bekommen die ich leider nicht lösen kann.
Aufgabe:
Es soll auf einen Ausgang (A0.0) einen Impuls geschaltet werden, der in der Länge(Frequenz) und in der Breite(Anhaltsdauer des Impuls) variabel einstellbar ist. 
In CFC hätte ich einen Taktmerker(zb 100.2) auf einen 
Timer_p(Mode1) geschaltet und dessen Ausgang auf A0.0. 
Wobei diese Lösung, zumindest glaube ich das, auch nicht 
ganz richtig wäre.
(Die Frequenz wäre nicht "ganz" variabel)
Über eure Hilfe wäre ich sehr dankbar!
Gruß
Bosga


----------



## johnij (17 September 2008)

Bosga schrieb:


> Hallo Leute,
> ich hab ein Problem mit AWL.
> Bin ein totaler Neuling in Sachen AWL.
> Habe eine Aufgabe bekommen die ich leider nicht lösen kann.
> ...


 

Suchbegriff: Taktgenartor, Impulsgeber,Blinker.........


----------



## Manfred Stangl (17 September 2008)

johnij schrieb:


> Suchbegriff: Taktgenartor, Impulsgeber,Blinker.........



ev. noch PWM


----------



## funkdoc (17 September 2008)

> Aufgabe:
> Es soll auf einen Ausgang (A0.0) einen Impuls geschaltet werden, der in der Länge(Frequenz) und in der Breite(Anhaltsdauer des Impuls) variabel einstellbar ist.




```
UN    T      2
      L     S5T#1S   //ausschaltzeit
      SE    T      1
      U     T      1
      L     S5T#1S   //dauer des impulses
      SA    T      2
      U     T      2
      =     A      0.0
```

die "länge" ist hier die addition der beiden zeiten


----------



## Bosga (17 September 2008)

Vielen Dank für die Hilfe!!!
Die letzte Lösung hat wunderbar geklappt.
Es ist mir Peinlich aber könntest du das bitte nochmal kurz erklären?
Scheint zwar wirklich simple zu sein, aber ganz hab ich es noch nicht verstanden. Ich tus mir einfach schwer mit AWL....


----------



## funkdoc (17 September 2008)

na klar....

dir muss bewusst sein dass du eine ausschaltdauer und eine einschaltdauer benötigst.

hier ist anfangs des ersten zyklus der timer 1 (der einschaltverzögerte) vom timer 2 negiert. da ja timer 2 noch nicht "da" ist, laüft timer 1 gleich weg. erst nach der abgeleaufenen zeit bekommt timer 2 sein eingangsignal. jetzt läuft t2 weg und schaltet das eingangsignal für t1 wieder auf 0 bis der t2 (auschaltverzögert) nach seiner zeit wieder abgelaufen ist. nun fängt das ganze szenario wieder von vorn an...

du solltest dir vielleicht mal so nebenbei die schaltdiagramme der einzelnen timer anschaun dann wird dir dass sicher klar...


----------



## paula23 (18 September 2008)

funkdoc schrieb:


> ```
> UN    T      2
> L     S5T#1S   //ausschaltzeit
> SE    T      1
> ...


 

Hi miteinander,

wenn ich jetzt hergehe und im ms bereich einen takt vorgeben will, sagen 50Hz, wie kann ich das mit meiner Zyklus Zeit vereinbaren ohne das ich Takte verliere??? 

Servus.


----------



## funkdoc (18 September 2008)

hi

wenn mann eine variable zeit als gesamte periode vorgeben will (frequenz) dann muss man die impulsdauer von der vorgegebenen variablen zeit subtrahieren und das ergebnis auf den timer 1 der ausschaltzeit legen.

je grösser die impulsdauer/länge ist desto kleiner ist die ausschaltzeit bei einer fixen periodendauer (frequenz)

EDIT: für ms genaue takte würde ich die weckalarm ob's verwenden, manche machen das lieber im hauptzyklus obwohl man hier sehr vorsichtig sein muss bei der zyklusbelastung wenns um genaue gschichten geht.

grüsse


----------



## kiestumpe (18 September 2008)

Hier noch nen FB:
(kann nach der Übersetzung auch in FUP umgeschaltet werden)



```
FUNCTION_BLOCK "FB_RECT"
TITLE =Einstellbarer Rechteckgenerator
////Funktionsname: Rechteckgenerator
////
////Bibliothek: DIV
////
////Beschreibung: Funktion realisiert ein Rechteckgenerator mit einstellbaren 
//ON/OFF Zeiten, beginnend mit ON
AUTHOR : 'F.A.'
VERSION : 1.0


VAR_INPUT
  T_ON : TIME ;	//On-Time Rechteck
  T_OFF : TIME ;	//Off-Time Rechteck
END_VAR
VAR_OUTPUT
  RECT : BOOL ;	//Ausgang
END_VAR
VAR
  ON_TIMER : "TP";	
  OFF_TIMER : "TP";	
  ON : BOOL ;	
  OFF : BOOL ;	
END_VAR
BEGIN
NETWORK
TITLE =ON - Timer

      UN    #OFF; 
      =     L      0.0; 
      BLD   103; 
      CALL #ON_TIMER (
           IN                       := L      0.0,
           PT                       := #T_ON,
           Q                        := #ON);

      NOP   0; 
NETWORK
TITLE =OFF - Timer

      UN    #ON; 
      =     L      0.0; 
      BLD   103; 
      CALL #OFF_TIMER (
           IN                       := L      0.0,
           PT                       := #T_OFF,
           Q                        := #OFF);

      NOP   0; 
NETWORK
TITLE =Ausgang

      U     #ON; 
      =     #RECT; 
END_FUNCTION_BLOCK
```


----------



## magnesit (25 April 2012)

Hallo,

diese Thema hat zwar einen Bart (2008 ) aber es trifft mein Problem  absolut! Der AWL Code von "kiestumpe" einen Beitrag oberhalb ist genau  was ich brauche. 

Da ich keine bis geringe Ahnung von S7 habe wäre er für mich ideal. Wenn  ich den Code als AWL Quelle in S7-SIMATIC einfüge und anschließend  "übersetzen" lasse bekomme ich folgende Fehler:




Ich habe bei "TP" schon die " weggelassen, hilft nix. TP ist doch das  TimePulse Modul oder? Habe in anderen Beispielprogrammen genau die  gleiche TP Initialisierung gefunden.
Woran liegt das Problem?

Danke für eure Mühe!

Mfg Paul

PS: Habe in der Zeile "FUNCTION_BLOCK "FB_RECT"" das "FB-RECT" durch z.b. FB2 ersetzt, passt eh oder?


----------



## Ralle (25 April 2012)

Du mußt in der Symboltabelle ein Symbol "TP" anlegen und diesem Symbol als Typ den TON aus der IEC-Library (SFB4). Oder du setzt statt "TP" in der Quelle direkt die Bausteinbezeichnung SFB4 ein.


----------

