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

Ergebnis 1 bis 9 von 9

Thema: AWL(S7-300) in SCL(S7-1200) übersetzen

  1. #1
    Registriert seit
    28.02.2006
    Ort
    Ostsee 5 min zum Strand
    Beiträge
    780
    Danke
    92
    Erhielt 110 Danke für 98 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Moin,

    ich habe eine Anlage, die wurde mit einer S7-300 erstellt und programmiert.
    Nun soll eine neue Anlage eine S7-1200 bekommen.
    Jetzt tue ich mich mit SCL noch recht schwer. Ich habe 2 Bausteine, bei denen ich nicht wirklich weiter komme. Könnte mir da mal jemand behilflich sein und mir zeigen, wie ich diese In SCL schreiben kann?

    Code:
          AUF   #DB_zum_Speichern
          LAR1  P#0.0                       
          LAR2  P#80.0
    
    
              L     #Temp_Anzahl_Formnester
    M001: T     #Looping
    
             L     DBD [AR1,P#0.0]
             L     #Temp_Max_Verriegelpos_E
             +D    
             T     DBD [AR2,P#0.0]
    
             +AR1  P#4.0
             +AR2  P#4.0
    
             L     #Looping
             LOOP  M001
    und den CODE den ich mal von Ralle erhalten habe

    Code:
            U     #Reset_Zaehlen
            FP    #flanke
            SPBN  NIX
    
            L     #Ist_Pos
            T     #Offset_Ist_Pos
    NIX:  NOP   0
    
            L     #Ist_Pos
            L     #Offset_Ist_Pos
            -D    
            L     L#4096
            MOD                               //bildet den Divisionrest, diser steht in Akku 1
            L     L#0                        //lädt 0 in Akku 1, was in Akku 1 war verschiebt sich in Akku 2
            TAK                               //Tauscht Akku 1 mit Akku 2
            <=D                               //Vergleich, wenn 0<= Divisionsrest dann Sprung zu ENDE.
            SPB   ENDE                         //Dabei steht der Divisonsrest noch in Akku1 und kann so 
                                              //bei ENDE sofort Transferiert werden
            L     4096                       //Wenn Divrest negativ, durch Addition einer 
            +D                               //Umdrehung (4096 Schritte) positiv 
    ENDE: T     #Ist_Pos_Intern
    und was ist mit Adressregister sichern/wieder herstellen?

    Code:
          L     DBNO                       
          T     #DB_Register
    
          TAR1  #AR1_Register              
          TAR2  #AR2_Register              
    
    
    
          LAR1  #AR1_Register
          LAR2  #AR2_Register
    Geändert von Nordischerjung (03.07.2014 um 13:19 Uhr)
    Gruß von der Ostsee

    Nordischerjung
    _____________________

    Wenn man seinem Paßbild ähnlich zu sehen beginnt, sollte man schleunigst Urlaub machen. (Vico Torriani, schw. Entertainer)

    Ich habe eine Diät gemacht und fettem Essen und Alkohol abgeschworen - in zwei Wochen verlor ich 14 Tage. (Joe E. Lewis)
    Zitieren Zitieren AWL(S7-300) in SCL(S7-1200) übersetzen  

  2. #2
    Registriert seit
    29.03.2004
    Beiträge
    5.741
    Danke
    143
    Erhielt 1.687 Danke für 1.226 Beiträge

    Standard

    Bei Umsetzung von AWL auf SCL macht es nicht viel Sinn zu versuchen einzelne AWL-Anweisungen in SCL umzusetzen.

    Versuch herauszufinden was der AWL-Baustein macht - in deinem Beispiel werden so wie es aussieht irgendwelche Daten umkopiert - und die Funktion in SCL neu aufzusetzen, ohne groß das AWL zu beachten.
    Damit sowas in SCL halbwegs elegant möglich ist, müssen die Daten in einem Array abgelegt sein. Du musst dann ggf. deine Datenablage etwas umstrukturieren. Wenn du auch in SCL anfangen musst mit Absolutadressen zu hantieren, ist etwas falsch gelaufen.

    Adressregister sichern musst du in SCL nicht.

  3. #3
    Avatar von Nordischerjung
    Nordischerjung ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    28.02.2006
    Ort
    Ostsee 5 min zum Strand
    Beiträge
    780
    Danke
    92
    Erhielt 110 Danke für 98 Beiträge

    Standard

    Zum ersten Code:
    In einem DB, der von außen übergeben wird, sind mehrere DINT. Jedem DINT wird ein Wert dazu addiert ( #Temp_Max_Verriegelpos_E)
    Und in einem anderem DINT abgespeichert. Die Häufigkeit IST halt flexibel, je nachdem wieviele Formnester vorhanden sind. Die DB Nummer soll auch variabel von außen übergeben werden. Wie genau mache ich das dann?

    Und wie sieht es dann mit Code 2 aus?
    Gruß von der Ostsee

    Nordischerjung
    _____________________

    Wenn man seinem Paßbild ähnlich zu sehen beginnt, sollte man schleunigst Urlaub machen. (Vico Torriani, schw. Entertainer)

    Ich habe eine Diät gemacht und fettem Essen und Alkohol abgeschworen - in zwei Wochen verlor ich 14 Tage. (Joe E. Lewis)

  4. #4
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.405 Danke für 2.002 Beiträge

    Standard

    Hallo,
    ich würde das in etwa so übersetzen :
    Code:
       AUF   #DB_zum_Speichern
          LAR1  P#0.0                       
          LAR2  P#80.0
    
    
              L     #Temp_Anzahl_Formnester
    M001: T     #Looping
    
             L     DBD [AR1,P#0.0]
             L     #Temp_Max_Verriegelpos_E
             +D    
             T     DBD [AR2,P#0.0]
    
             +AR1  P#4.0
             +AR2  P#4.0
    
             L     #Looping
             LOOP  M001
    Code:
    // die Variablen i,q,z sind vom Typ INT
    // die Variable qdd ist vom Typ DINT
    // die anderen Variablen kennst du ja schon
    
    for i := 1 to Anzahl_FormNester by 1 do
       q := (i-1) * 4 ;
       z := q + 80 ;
       qdd := dword_to_Dint(WORD_TO_BLOCK_DB(DB_zum_Speichern).DD[q]) ;
       WORD_TO_BLOCK_DB(DB_zum_Speichern).DD[z] := dint_to_dword(qdd + Temp_Max_Verriegelpos_E) ;
    end_for ;
    Ich denke mal, dieser Code bringt dich erstmal an der Start - ich hoffe, er ist das, was du brauchtest - etwas schöner läßt sich so etwas in SCL machen, wenn du nicht mit Daten aus einem anderen Datenbaustein arbeitest.

    Gruß
    Larry

  5. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    Nordischerjung (04.07.2014)

  6. #5
    Avatar von Nordischerjung
    Nordischerjung ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    28.02.2006
    Ort
    Ostsee 5 min zum Strand
    Beiträge
    780
    Danke
    92
    Erhielt 110 Danke für 98 Beiträge

    Standard

    Moin Larry,

    danke erstmal für die Hilfe.

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    etwas schöner läßt sich so etwas in SCL machen, wenn du nicht mit Daten aus einem anderen Datenbaustein arbeitest.
    Was meinst du damit? Wenn der DB nicht Variabel ist?

    Wie würde das gehen?

    Oder meinst du das alles in dem FB machen und dann per "SFC20 BlkMov" verschieben?


    Edit: Das andere mit dem eigenene Zähler hab ich jetzt in FUP gelöst
    Geändert von Nordischerjung (04.07.2014 um 07:52 Uhr)
    Gruß von der Ostsee

    Nordischerjung
    _____________________

    Wenn man seinem Paßbild ähnlich zu sehen beginnt, sollte man schleunigst Urlaub machen. (Vico Torriani, schw. Entertainer)

    Ich habe eine Diät gemacht und fettem Essen und Alkohol abgeschworen - in zwei Wochen verlor ich 14 Tage. (Joe E. Lewis)

  7. #6
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.405 Danke für 2.002 Beiträge

    Standard

    Zitat Zitat von Nordischerjung Beitrag anzeigen
    Was meinst du damit? Wenn der DB nicht Variabel ist?

    Wie würde das gehen?
    Ich meinte hier, dass du ggf. mit einem FB arbeiten sollst und mit FB-internen (statischen) Variablen arbeiten solltest.

    Zitat Zitat von Nordischerjung Beitrag anzeigen
    Oder meinst du das alles in dem FB machen und dann per "SFC20 BlkMov" verschieben?
    wozu verschieben ?
    Was hast du weiter vor mit den Daten ? Oder vielleicht anders ... was ist überhaupt der Sinn des Ganzen ? Vielleicht läßt sich ja noch einiges mehr zusammenfassen / vereinfachen ...

    Gruß
    Larry

  8. #7
    Avatar von Nordischerjung
    Nordischerjung ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    28.02.2006
    Ort
    Ostsee 5 min zum Strand
    Beiträge
    780
    Danke
    92
    Erhielt 110 Danke für 98 Beiträge

    Standard

    Das sind Daten von verschiedenen Positionen (Drehgeber), die u.a. einen Offset aufaddiert bekommen.
    Jede Position wird in einen DINT im globalem DB gespeichert,
    jede Position bekomt einen Offset auf addiert und wird ebenfalls gespeichert.
    Diese werden in einem Globalen DB gespeichert um sie weiter zu verwenden.

    Ich habe jetzt nur das Netzwerk vom Offset addieren genommen, da ich dachte, wenn ich das in SCL hab, bekomme ich das Positions speichern schon hin.

    DB_POS.jpg
    Gruß von der Ostsee

    Nordischerjung
    _____________________

    Wenn man seinem Paßbild ähnlich zu sehen beginnt, sollte man schleunigst Urlaub machen. (Vico Torriani, schw. Entertainer)

    Ich habe eine Diät gemacht und fettem Essen und Alkohol abgeschworen - in zwei Wochen verlor ich 14 Tage. (Joe E. Lewis)

  9. #8
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.224
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Puh, Das ist schon ein ganze Weile her.
    Wenn ich das richtig aus dem Code gelesen habe, sollte das etwa so in SCL aussehen:

    Code:
    FUNCTION_BLOCK "Baustein_2"
    { S7_Optimized_Access := 'TRUE' }
    VERSION : 0.1
       VAR_INPUT 
          Reset_Zaehlen : Bool;
          Ist_Pos : DInt;
       END_VAR
    
    
       VAR 
          HM_FP_Reset_Zaehlen { S7_HMI_Accessible := 'False'; S7_HMI_Visible := 'False'} : Bool;
          Offset_Ist_Pos : DInt;
          Ist_Pos_Intern : DInt;
       END_VAR
    
    
    
    
    BEGIN
        IF #Reset_Zaehlen AND
            NOT #HM_FP_Reset_Zaehlen
        THEN
            #Offset_Ist_Pos := #Ist_Pos;
        END_IF;
        #HM_FP_Reset_Zaehlen := #Reset_Zaehlen;
        
        #Ist_Pos_Intern := (#Ist_Pos - #Offset_Ist_Pos) MOD 4096; //Modulo bilden, Rest steht in #Ist_Pos_Intern
        
        //Wenn #Ist_Pos_Intern negativ, dann 4096 aufaddieren, so dass ein positiver Wert entsteht
        IF (#Ist_Pos_Intern < 0) THEN
            #Ist_Pos_Intern := #Ist_Pos_Intern + 4096;
        END_IF;
        
    END_FUNCTION_BLOCK
    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

  10. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    Nordischerjung (04.07.2014)

  11. #9
    Avatar von Nordischerjung
    Nordischerjung ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    28.02.2006
    Ort
    Ostsee 5 min zum Strand
    Beiträge
    780
    Danke
    92
    Erhielt 110 Danke für 98 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich wollte mich nochmal melden. Hab das in SCL gelöst. Zauberwort bei S7-1200 heißt PEEK and POKE. Damit geht es auch variabel


    Grüße von der Ostsee


    Nordischerjung
    Gruß von der Ostsee

    Nordischerjung
    _____________________

    Wenn man seinem Paßbild ähnlich zu sehen beginnt, sollte man schleunigst Urlaub machen. (Vico Torriani, schw. Entertainer)

    Ich habe eine Diät gemacht und fettem Essen und Alkohol abgeschworen - in zwei Wochen verlor ich 14 Tage. (Joe E. Lewis)

Ähnliche Themen

  1. AWL-Quelle in Safety-FB übersetzen
    Von Dooni im Forum Simatic
    Antworten: 18
    Letzter Beitrag: 24.03.2013, 15:27
  2. S5 auf S7 Übersetzen (AWL)
    Von Mark112 im Forum Simatic
    Antworten: 32
    Letzter Beitrag: 26.10.2012, 10:49
  3. SCL > AWL übersetzen?
    Von schnecke im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 28.09.2010, 07:36
  4. Fehler beim Übersetzen von AWL-Batch
    Von Zoomy im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 15.06.2010, 10:04
  5. AWL Qelle übersetzen
    Von dhgroe im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 07.06.2006, 18:06

Lesezeichen

Berechtigungen

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