Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 4 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 35

Thema: Sprungmarken in AWL ?

  1. #1
    Registriert seit
    02.08.2006
    Beiträge
    150
    Danke
    47
    Erhielt 5 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    sobald ma viele Sprungmarken in einem Programmablauf hat, finde ich, wird es sehr unübersichtlich.
    Gibt es eine Möglichkeit auf Sprungmarken zu verzcihten.
    Hier ein Beispiel in AWL:

    U "FP_Tast_Roll_Kueche_Ab"
    SPBN W1

    SET
    R "Roll_Kueche_abgebrochen"
    L 0
    T "ergebnis RollEssKuAuf"
    L 1 // 1 in Akku-1
    L "C_ Roll_Kueche_Auf" // Relais-Counter in Akku-2
    >I // Akku-1 > Akku-2
    SPBN W3 // Ja, dann auf W8
    // Rolladenzeit in den Counter laden
    L "Zeit_Roll_Auf" // Lade 1600 * 20msec. = 32 Sekunden
    T "C_ Roll_Kueche_Auf" // In den Relais-Counter schieben
    // Gegenseitig verriegeln
    L 0 // Lade 0
    T "C_ Roll_Kueche_Ab" // In den Relais-Counter schieben
    WT1: U "M_Roll_Kueche_Ab"
    SPBN W2

    in der Programmiersprache C würde das wesentlich einfacher aussehen, da man dort keine Sprungmarken benötigt, sondern mit geschweiften Klammern arbeitet.
    U "FP_Tast_Roll_Kueche_Ab"
    SPBN W1

    SET
    R "Roll_Kueche_abgebrochen"
    z.B.
    if (!FP_Tast_Roll_Kueche_Ab)
    {
    ...
    }
    else
    {
    ...
    }
    usw.

    Somit lassen sich auch ganze Programmteile, die eignetlich identisch sind (etwas andere Merker etc) einfach kopieren und die Merker austauschen.
    Hingegen bei Sprungmarken muss ich auch noch diese neu vergeben.
    Da macht man schnell einen Fehler

    noeppkes ...
    Zitieren Zitieren Sprungmarken in AWL ?  

  2. #2
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    11.871
    Danke
    500
    Erhielt 2.604 Danke für 1.877 Beiträge

    Standard

    In AWL läßt sich das kaum umgehen, man muß ordentlich strukturieren und Kommentare einfügen, auch mal ne Leerzeile lassen!

    Versuchs mal mit SCL, das wäre für dich dann eher etwas.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  3. #3
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.647
    Danke
    1.059
    Erhielt 2.045 Danke für 1.627 Beiträge

    Standard

    ST - Strukturierter Text - ist das was du suchst ...mit awl wird das nix, also nicht so wie du es dir wünschst..

    heißt, wie ralle bemerkte bei siemens SCL

  4. #4
    Registriert seit
    07.03.2004
    Beiträge
    4.368
    Danke
    946
    Erhielt 1.157 Danke für 830 Beiträge

    Standard

    Ja ST/SCL wird Dir mehr Spaß machen.

    Aber wenn es darum geht das Du eh viel mit Copy/Paste Programmierst. Würde es auch schon viel Bringen das ganz mit klaren Schnittstellen in FCs und FBs zu verpacken anstatt mit Merkern sich die Finger wund zu tippen.
    If you open your Mind too much, your Brain will fall out.

  5. #5
    noeppkes ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    02.08.2006
    Beiträge
    150
    Danke
    47
    Erhielt 5 Danke für 2 Beiträge

    Standard

    Vielen Dank für euere Vorschläge.
    Ich probiere dann mal bei Gelegenheit SCL.
    Aber das von Zotos habe ich nicht ganz verstanden.
    Wie habe ich das zu verstehen mit mehreren FC/FB's.

    Hier mal ein Ausschnitt, den ich 16 mal benötige. (8 Rolläden a Auf + Ab
    Jeweils nur mit anderen anzusteuernden Ausgängen, sowie mit anderen Merkern und Eingängen.
    (Kann noch etwas kompliziert und aufwendig programmiert sein, aber es funktioniert)

    Code:
     
    // Rolladensteuerung Küche Ab
    // M_Roll_Kueche_Ab bitte entsprechend setzen. Kürzer als 400msec. Rolladen läuft in endrichtung, länger: Steuerung per Länge der Tastfunktion
    Roll: U     "M_Roll_Kueche_Ab"
          FP    "FPM_Tast_Roll_Kueche_Ab"   //[MW34]       // Hilfsmerker
          =     "FP_Tast_Roll_Kueche_Ab"    // Positive Flanke des Tasters
    
          U     "M_Roll_Kueche_Ab"
          FN    "FNM_Tast_Roll_Kueche_Ab"   // Hilfsmerker
          =     "FN_Tast_Roll_Kueche_Ab"    // Negative Flanke des Tasters
    
          U     "FP_Tast_Roll_Kueche_Ab"
          SPBN  W1
    
          SET   
          R     "Roll_Kueche_abgebrochen"
          L     0
          T     "ergebnis RollEssKuAuf"
          L     1                           // 1 in Akku-1
          L     "C_ Roll_Kueche_Auf"        // Relais-Counter in Akku-2
          >I                                // Akku-1 > Akku-2
          SPBN  W3                          // Ja, dann auf W8
    // Rolladenzeit in den Counter laden
          L     "Zeit_Roll_Auf"             // Lade 1600 * 20msec. = 32 Sekunden
          T     "C_ Roll_Kueche_Auf"        // In den Relais-Counter schieben
    // Gegenseitig verriegeln
          L     0                           // Lade 0
          T     "C_ Roll_Kueche_Ab"         // In den Relais-Counter schieben
    WT1:  U     "M_Roll_Kueche_Ab"
          SPBN  W2
          L     "ergebnis RollEssKuAuf"
          L     1
          +I    
          T     "ergebnis RollEssKuAuf"
          SPA   W4
    
    W2:   U     "FN_Tast_Roll_Kueche_Ab"
          SPBN  W4
          L     "ergebnis RollEssKuAuf"
          L     25                          // 20 * 20 msec = 400 msec.
          <=I                               // <= 400msec. ?
          SPBN  W3                          // Nein, dann auf W3
    // Wenn der Rolladen schon lief, dann abbrechen und ausschalten
          U     "Roll_Kueche_abgebrochen"
          SPB   W_1                         // Zum Ende springen
          L     "Zeit_Roll_Auf"             // Lade 1600 * 20msec. = 32 Sekunden
          T     "C_ Roll_Kueche_Auf"        // In den Relais-Counter schieben
          SPA   W4                          // Weiter auf W4
          L     "Zeit_Roll_Auf"             // Lade 1600 * 20msec. = 32 Sekunden
          T     "C_ Roll_Kueche_Auf"        // In den Relais-Counter schieben
          SPA   W4                          // Weiter auf W4
    W3:   SET   
          S     "Roll_Kueche_abgebrochen"
          L     0                           // Lade 0
          T     "C_ Roll_Kueche_Auf"        // In den Relais-Counter schieben
    // Neu eingefügt
    W4:   L     "C_ Roll_Kueche_Auf"
          L     0
          ==I   
          SPB   W_1
          L     "C_ Roll_Kueche_Auf"
          L     1
          -I    
          T     "C_ Roll_Kueche_Auf"
     
    // Gegeneinander verriegeln
    W_1:  U     "M_Roll_Kueche_Auf"
          SPBN  W_4
          L     0
          T     "C_ Roll_Kueche_Auf"
    
    W_4:  L     "C_ Roll_Kueche_Auf"
          L     0
          ==I   
          SPB   W5
          SET   
          S     "Roll_Kueche_Ab"        // Dann Relais setzen
          SPA   W6
    W5:   SET   
          R     "Roll_Kueche_Ab"        // Dann Relais löschen
    W6:   NOP   0

    Tja, und genau das benötige ich 16 *

    Hat jemand eine Idee, wie ich das einfacher bzw. array-mäßiger machen kann, bevor ich mir die Finger Wund tippssle

    Übrigens: Klasse Forum hier. Hier wird schnell geholfen !

    noeppkes ...
    Zitieren Zitieren Danke  

  6. #6
    Registriert seit
    07.03.2004
    Beiträge
    4.368
    Danke
    946
    Erhielt 1.157 Danke für 830 Beiträge

    Standard

    Ohne den Code jetzt gelesen zu haben. Pack das ganze in einen FB und rufe den 16 mal auf.
    If you open your Mind too much, your Brain will fall out.

  7. #7
    noeppkes ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    02.08.2006
    Beiträge
    150
    Danke
    47
    Erhielt 5 Danke für 2 Beiträge

    Standard

    Danke für die Info'S.
    Es sind jedoch einige Merker, die speziell für die Blöcke 1 ... 16 sind dann vergeben.
    Dies müsste mit einem Array gelöst werden,
    Die Ein- bzw. ausgngszuordnung / Übergaben sind mir in etwa klar.

    Muss ich dann die Merkerbits, die im FB verwendet werden auch übergeben, oder kann mann diese im FB dann errechnen

    z.B

    merkerbit_rolladen_läuft_hoch [1 + (Aufruf_nr * 5]
    So wäre es in C.

    Aufrufnr. wäre dann 1 ... 16 (besser 0 ... 15)

    Und genau da scheitert es bei mir.
    Wie handle ich das ganze für die Merker.

    noeppkes ...
    Zitieren Zitieren FB, 16 mal aufrufen ?  

  8. #8
    Registriert seit
    02.04.2006
    Ort
    nähe Muc
    Beiträge
    2.787
    Danke
    115
    Erhielt 126 Danke für 107 Beiträge

    Standard

    Zitat Zitat von noeppkes Beitrag anzeigen

    Und genau da scheitert es bei mir.
    Wie handle ich das ganze für die Merker.

    noeppkes ...
    In Stat damit
    ___________________________________________





    Sende eine SMS mit dem Stichwort "Feuer" an die 112 und innerhalb von 10 Minuten steht ein roter Partybus mit derbem Sound vor deiner Tür.


    AGB: Wer Rechtschreibfehler findet darf diese behalten. Bitte meine in eile gefertigten, selten anfallenden Vertipsler zu entschuldigen.

  9. #9
    noeppkes ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    02.08.2006
    Beiträge
    150
    Danke
    47
    Erhielt 5 Danke für 2 Beiträge

    Standard

    Stat habe ich gefunden.
    Ich habe bisher nur mit FC's gearbeitet.
    Dort gibt es das nicht.

    Wenn ich nun für meine 16 Aufrufe 64 Merker benötige, lege ich dann ein Array an und hole die Bits dann aus diesem Array mit dem AR1.
    Ich habe schon im Forum gelesen, dass hiermit indirekte Adressierung möglich ist.

    Ich würde es folgendermaßen lösen:
    Merker_1, Merker_2,Merker_3 und Merker_4 anlegen.
    64 Bit als Stat anlegen.

    Diese anhand der übergebenen Nummer vor dem Programmteiul füttern.
    Dann diese in Programmteil verwenden.
    Wäre das ein guter Ansatz ?

    noeppkes ...
    Zitieren Zitieren Hallo Maxi  

  10. #10
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    11.871
    Danke
    500
    Erhielt 2.604 Danke für 1.877 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hier mal ein kleines Beispiel:

    Code:
    FUNCTION_BLOCK FB 100
    TITLE =
    VERSION : 0.1
    
    
    VAR_INPUT
      Dein_Input : BOOL ;    
    END_VAR
    VAR_OUTPUT
      Dein_Output : BOOL ;    
    END_VAR
    VAR
      HM_Flanke : BOOL ;    
      Flanke : BOOL ;    
    END_VAR
    BEGIN
    NETWORK
    TITLE =Flanke von deinem Input
    
          U     #Dein_Input; 
          FP    #HM_Flanke; 
          =     #Flanke; 
    NETWORK
    TITLE =Diese Flanle als Output
    
          U     #Flanke; 
          =     #Dein_Output; 
          
    END_FUNCTION_BLOCK
    Aufruf des FB100:

    Code:
    CALL FB   100 , DB   100 (
               Dein_Input               := M      1.0,
               Dein_Output              := M      2.0);
    Dann wird der DB100 automatisch mit angelegt (Für die anderen Rollos nimm z.Bsp. Call FB100, DB101 ; Call FB100, DB102 ...)

    Im DB stehen die Statischen Variablen.
    Als Input und Output kannst du z.Bsp. deine Eingänge und Ausgänge oder auch MErker nehmen, mit denen du dann die Ausgänge schaltest.
    Geändert von Ralle (20.09.2007 um 16:00 Uhr)
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

Ähnliche Themen

  1. Zeiten bei Sprungmarken
    Von Deep Blue im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 03.09.2009, 15:48
  2. Sprungebefehle / Sprungmarken
    Von reneehrle im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 26.09.2008, 15:49
  3. Frage zur Sprungmarken in S5
    Von Bitte_ein_Bit im Forum Programmierstrategien
    Antworten: 2
    Letzter Beitrag: 16.10.2007, 23:03
  4. Sprungmarken unter S7/AWL
    Von mad_max im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 20.04.2007, 13:55
  5. Sprungmarken
    Von Flo im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 28.08.2006, 10:36

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •