AWL lernen

Flux

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

ich moechte STEP7(V5.5 SP1)/AWL lernen. Wäre super wenn jemand Material, Tipps, Anregungen für mich hat :)

Momentan gehe ich das Getting Started durch und verstehe die FC1/"Lüfter" nicht:

OB1:
Code:
      CALL  "Lüfter" //FC1
       Motor_Ein   :="BM_Ein" //A 5.0
       Zeitfunktion:="BM_Nachlauf" //T1
       Luefter_Ein :="BM_Lüfter_ein" //A 5.2
IN: #Motor_Ein, #Zeitfunktion; OUT: #Luefter_Ein;

FC1:
Code:
      U     #Motor_Ein                  //If (A5.0==true)
      L     S5T#4S                        //set 4 secs (akku1_low)
      SA    #Zeitfunktion               //zaehle timer runter, bedingt oder unbedingt?
//Trennung?
      U     #Zeitfunktion               //Das verstehe..
      =     #Luefter_Ein                //ich nicht

Nach meinem Verständnis soll der Lüfter mit Einschalten von #Motor_Ein (ohne Verzögerung) eingeschaltet..
und mit Ausschalten (FN) von #Motor_Ein (mit Verzögerung) ausgeschaltet werden. PLCSIM bestätigt dieses Verhalten. Nur kapier ich den Code nicht :(

Ich weiss oft nicht wann eine Anweisung zu ende ist oder ob das Ergebnis (VKE?) immer "weitergereicht" wird bzw. inwieweit das Statuswort hierbei zu berücksichtigen ist??
 
Zuletzt bearbeitet:
gehe in die Hilfe zum jeweiligen Befehl, z.b. SA. also auf den Befehl gehen mit dem Cursor und F1 drücken. In der Hilfe steht dann was über das Verhalten des Befehls gegenüber dem VKE
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Perfektionist,

die Hilfe hatte ich schon bemüht. Zu SA steht folgendes:
SA <Zeit> startet die adressierte Zeit, wenn das VKE von "1" auf "0" wechselt. Die programmierte Zeit läuft ab, solange das VKE = 0 ist.

Das ist soweit klar - SA wird nur bei FN von #Motor_Ein ausgeführt. Trotzdem:

  • Hängen SA und das folgende U zusammen?

  • Was bedeutet überhaupt U #Zeitfunktion = #Luefter_Ein ?

  • Wie und wo kann man das VKE sehen?
 
Es gibt auf der Siemens-Homepage Ausbildungsunterlagen, leider habe ich den Link gerade nicht zur Hand. Ansonsten empfehle ich, öfter mal die Ansicht auf AWL umzustellen.
 
Danke. Weiss jemand ob es auch Unterlagen nur zu AWL gibt? Die Ausbildungsunterlagen in A und B sind gemischt KOP/FUP/AWL. Unter "C - Programmiersprachen" finden sich S7-GRAPH und S7-SCL :confused:
 
Denke mal das wird gemischt mit KOP/FUP sein, so wars zumindestens bei meinem Kurs darmals.

Hast du denn überhaupt Vorkenntnisse? So für den Einstieg von 0 an bringen dich die Unterlagen auch nicht soviel weiter..

Also die Funktion einer Ausschaltverzögerung oder auch allen anderen Timern, Zählern, Bitoperationen sollte man halt schon mal theoretisch draufhaben.
 
Also die Funktion einer Ausschaltverzögerung oder auch allen anderen Timern, Zählern, Bitoperationen sollte man halt schon mal theoretisch draufhaben.
Hab damit noch nicht programmiert. Was dahinter steckt kann ich mir im moment nur denken, bzw. in der Hilfe nachlesen. Hab nen E-Technik Bachelor.
 
Hallo Perfektionist,

die Hilfe hatte ich schon bemüht. Zu SA steht folgendes:


Das ist soweit klar - SA wird nur bei FN von #Motor_Ein ausgeführt. Trotzdem:
  • Hängen SA und das folgende U zusammen?
  • Was bedeutet überhaupt U #Zeitfunktion = #Luefter_Ein ?
  • Wie und wo kann man das VKE sehen?
Sorry, ich hatte diese kleinen Büchlein mit der Hilfe verwechselt, in der Hilfe steht nur lappidar drin, wie das Statuswort durch den jeweiligen Befehl beeinflusst wird. Das, was Du wissen wolltest, verbirgt sich hinter dem Bit /ER vom Statuswort:
/ER Erstabfragebit (Statuswort, Bit 0)
Der Signalzustand des /ER-Bits steuert den Ablauf einer Verknüpfungskette.
Das /ER-Bit ist das Bit 0 des Statusworts.
Jede Verknüpfungsoperation fragt den Signalzustand des /ER-Bits und des angesprochenen Kontakts ab.
· Ist der Signalzustand des /ER-Bits gleich "1", dann verknüpft eine Operation das Ergebnis ihrer Signalzustandsabfrage am von ihr angesprochenen Kontakt mit dem seit der Erstabfrage gebildeten VKE und speichert das Ergebnis im VKE-Bit.
· Ist der Signalzustand des /ER-Bits gleich "0", dann beginnt die Verknüpfungskette mit einer Erstabfrage.
Mit Zuordnung eines Wertes (S, R, =) oder mit einer VKE-abhängigen Sprungoperation endet die Verknüpfungskette und das /ER-Bit wird auf "0" gesetzt.
mal so ne Frage nebenher: hast Du schonmal was in Assembler geschrieben? Sollte die Antwort nein sein, tust Du Dir mit AWL schwer.
sollte die Antwort nein gewesen sein, käme als nächste Frage: hast Du vor, an bestehenden Programmen was zu machen oder an Neuentwicklungen mitzuwirken. In dem einen Fall würde ich dir raten, dann trotzdem AWL zu lernen, zumindest verstehen zu lernen, im anderen Fall sieht es so aus, dass Siemens mit den 1200er-CPUs gerade dabei ist, AWL zugunsten von SCL auszurotten, Du Dir möglicher Weise ein Wissen und Kenntnisse aneignen willst, die Du in Zukunft möglicherweise gar nicht verwerten kannst.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Zusammenfassend:
Die Verknüpfung von Anweisungen (bzw.VKEs) erfolgt im Wesentlichen solange, wie das /ER-Bit (Bit 0 des Statusworts) "1" ist.
Endet eine Kette (S, R, =, VKE-abhängiger Sprung) bzw. beginnt eine Erstabfrage so ist es "0".

mal so ne Frage nebenher: hast Du schonmal was in Assembler geschrieben?
Ja, auf ein Paar µCs.

Es sieht so aus, dass Siemens mit den 1200er-CPUs gerade dabei ist, AWL zugunsten von SCL auszurotten
Dieser Trend ist mir bekannt, da aber alle meine Kollegen nur mit AWL arbeiten brauch ich das. Nebenher ein bisschen SCL zu lernen kann sicherlich nicht schaden.
 
Ja, auf ein Paar µCs.
na, das sind doch beste Voraussetzungen, um AWL lernen zu können. Hinter AWL steckt nichts anderes als ein Prozessormodell. Kümmer Dich um Akku1 und Akku2 (bei 400er gibt vier davon), um das Statuswort, VKE etc, dann wird AWL für Dich ganz schnell zum Werkzeug.

Zu dem SA-Befehl hab ich noch anzumerken, dass das ein Auslaufmodell ist. In den OB1-Startinformationen wird Dir die Zeitdauer des letzen Zyklus mitgeteilt. Etwas anderes sind noch die IEC-Timer. Aber wie weit und tief Du gleich ins kalte Wasser willst, mit FB und IDB und so, muss ich Dir überlassen (Deine Fragen werden sicherlich rasch qualifizierter werden - lass Dich aber nicht von den Oberlehrern verwirren, die meinen, dass ein Anfänger mit kleinen Schrittchen gehen muss).
 
Hey Perfektionist, danke fuer deine Worte.

Ich versuche gerade das eingangs genannte Beispiel zu verstehen. Hab mir dazu die Step7 Hilfe und Sachen im Netz angeschaut.

Hier ein Beispiel aus der STEP7-Hilfe:
Code:
      U    E 2.0             
      FR    T1    //Gib die Zeit T1 frei.
      U    E 2.1    
      L    S5T#10s    //Richte eine Voreinstellung von 10 Sekunden in AKKU 1 ein.
      SI    T1    //Starte die Zeit T1 als Impuls.
      U    E 2.2    
      R    T1    //Setze Zeit T1 zurück.
      U    T1    //Frage den Signalzustand der Zeit T1 ab.
      =    A 4.0    
      L    T1     //Lade den aktuellen Zeitwert der Zeit T1 als Binärzahl.
      T    MW10

Hier meine Interpretation (zusätzliche Kommentare + Verknüpfungsenden (Absätze))
Code:
      U     E      2.0                  //Wenn E 2.0 "1" ist
      FR    T      1                    //Gib die Zeit T1 frei.-->Laesst T1 von neuem ablaufen, solange E 2.1 "1" und E 2.2 "0" ist.

      U     E      2.1                  //Wenn E 2.1 "1" ist 
      L     S5T#10S                     //Richte eine Voreinstellung von 10 Sekunden in AKKU 1 ein.
      SI    T      1                    //Starte die Zeit T1 als Impuls.

      U     E      2.2                  //Wenn E 2.2 "1" ist
      R     T      1                    //Setze Zeit T1 zurück.

      U     T      1                    //Frage den Signalzustand der Zeit T1 ab.
      =     A      4.0                  //Ist "1" solange T1 ablaeuft

      L     T      1                    //Lade den aktuellen Zeitwert der Zeit T1 als Binärzahl.
      T     MW    10                    //und schreib ihn ins Merkerwort 10 (Byte 10..11)

Stimmt das so?

Danach geht's an das Eingangsbeispiel "Lüfter" :cool:
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
ich würd jetzt sagen: ja.

allerdings verwende ich, so denn ich noch S5-Timer verwende, zu 80% SE, zu 10% SA, die restlichen 10% teilen sich dann noch SI und SV. Aber je nach Anwendungsfall - Siemens hat da eine Menge an Timern gemacht, viele SPSen und die IEC kennen nur TON und TOF.

ach, einen TP gibt es auch noch:
http://www.ipsta.de/download/freies/Folge_7.pdf
ich weiß jetzt nicht, ob Siemens den implementiert hat. Im Prinzip kann aber immer durch entsprechend geschickte Verknüpfung alles mit dem TON gemacht werden.

ansonsten mach ich Zykluszeitzählung mit der Startinformation aus OB1 und zähle entweder in MW (als Integer bis 30 Sekunden) oder in DW bis in fast eine Ewigkeit. Wahlweise natürlich auch im IDB, aber das kommt dann später, wahlweise die IEC-Timer.

also, so mach ich das:
Code:
// ***** Zeiten abzählen
      L     #V_Zustandsdauerzaehler
      L     "Zykluszeit"
      +I    
      SPO   m001
      T     #V_Zustandsdauerzaehler
m001: L     #V_Zustandsmindestdauer
      >I    
      =     #T_Wartezeit_abgelaufen
      POP   
      L     #V_Zustandsmaximaldauer
      <I    
      =     #T_Wartezeit_ueberschritten
das Setzen und Rücksetzen dieses hangestrickten Timers ist dann ein weiterer Codeschnipsel. Wenn Du deinen SA hast, kannst, wenn Du willst, über meine Art nachdenken, wie man Zeiten macht - es sei denn, Deine Kollegen haben ein Aber gegen sowas. Die nehmen vielleicht IEC-Timer, wenn es instanzierbar werden soll. Oder sie übergeben Timer als Parameter dem Baustein, das kann aber bei multiinstanzierten Dingern (kommt jedenfalls bei mir vor, wenn ich mehrere Strecken mit mehreren gleichen Stationen hab) nervig werden, wenn beim Aufruf der Mutterinstanz an der Schnittstelle hundert Timer als Übergabeparameter hängen

...aber fangen wir mal langsam an - den SA hast in fünf Minuten gelöffelt, dann kannst ja mal weiterschaun, was sonst noch so interessiert.
 
ich würd jetzt sagen: ja.

Gut :D

allerdings verwende ich, so denn ich noch S5-Timer verwende, zu 80% SE, zu 10% SA, die restlichen 10% teilen sich dann noch SI und SV. Aber je nach Anwendungsfall - Siemens hat da eine Menge an Timern gemacht, viele SPSen und die IEC kennen nur TON und TOF.
ach, einen TP gibt es auch noch:
http://www.ipsta.de/download/freies/Folge_7.pdf
ich weiß jetzt nicht, ob Siemens den implementiert hat.
Ich dachte TP entspricht bei Siemens dem SI?

Im Prinzip kann aber immer durch entsprechend geschickte Verknüpfung alles mit dem TON gemacht werden.
Ok weiss ich jetzt nicht..

ansonsten mach ich Zykluszeitzählung mit der Startinformation aus OB1 und zähle entweder in MW (als Integer bis 30 Sekunden) oder in DW bis in fast eine Ewigkeit.
Wieso passen nur 30 Sek in ein Merkerwort, wenn man die OB1-Startinformation auswertet? Könntest du mich diesbezüglich erleuchten? ^^ Denn das klingt nach ner effizienten Möglichkeit mit Zeiten zu arbeiten.

Wahlweise natürlich auch im IDB, aber das kommt dann später, wahlweise die IEC-Timer.
Wie später? ^^

Ich interpretiere deinen Code mal:
Code:
// ***** Zeiten abzählen
      L     #V_Zustandsdauerzaehler [B]//lokale statische (? denn sie muss mehrere Zyklen überdauern?) Variable --> Akku1[/B]
      L     "Zykluszeit" [B]//globale Konstante (aus einem globalen DB?) --> Akku 1; Zähler --> Akku 2[/B]
      +I    
      SPO   m001 [B]//Bei Überlauf springen, aber warum erst bei Überlauf ?[/B]
      T     #V_Zustandsdauerzaehler [B]//Zähler inkrementieren[/B]
m001: L     #V_Zustandsmindestdauer [B]// --> Akku 1; Zykluszeit --> Akku 2[/B]
      >I   [B] //Wenn Akku2 > Akku 1, also Zykluszeit > Zykluszeit_min[/B]
      =     #T_Wartezeit_abgelaufen
      POP   [B]//Akku 2 --> Akku 1, also Zykluszeit --> Akku 1[/B] [B]und Akku 2[/B]
      L     #V_Zustandsmaximaldauer [B]//--> Akku 1[/B]
      <I    [B]//Wenn Akku 2 < Akku 1[/B][B], also Zykluszeit < Zykluszeit_max ==> es muesst andersherum sein, also if(max < ist)[/B] ?
      =     #T_Wartezeit_ueberschritten

...aber fangen wir mal langsam an - den SA hast in fünf Minuten gelöffelt, dann kannst ja mal weiterschaun, was sonst noch so interessiert.
Du meinst den SA aus dem Eingangsbeispiel? Bin gerade daran.. :)
 
Zuletzt bearbeitet:
So, nun ein neuer Versuch den Lüfter zu verstehen:

Code:
U     #Motor_Ein [B]//Wenn Motor_Ein == “1”       [/B]
L     S5T#4S     [B]//Lade Zeitdauer (=Faktor * Raster) in Akku 1       [/B]
SA    #Zeitfunktion [B]//Wenn Motor_Ein “1” --> “0” zähle die Zeit runter  [/B]     
U     #Zeitfunktion [B]//Solange die Zeit abläuft..[/B]       
=     #Luefter_Ein  [B]//..lasse den Lüfter eingeschaltet[/B]

Vorausgesetzt die Verkettung bezieht alle Anweisungen mit ein:

  • Was ich nicht verstehe ist, wie wird in dieser AWL berücksichtigt, dass der Lüfter bei FP von #Motor_Ein eingeschaltet wird ? Ist das, weil da #Zeitfunktion immer “1” ist?
  • Wieso bleibt der Lüfter nach FN von #Motor_Ein eingeschaltet? Wenn die Verknüpfung alle Anweisungen miteinbezieht, dann ist die Erste - also U #Motor_Ein (=“0”) - nicht erfüllt, oder?
 
Zurück
Oben