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

Seite 2 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 11 bis 20 von 31

Thema: Der S7-1200 unter den Rock geschaut

  1. #11
    Avatar von Thomas_v2.1
    Thomas_v2.1 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    29.03.2004
    Beiträge
    5.735
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Passt zwar nicht ganz zur 1200, aber das TIA-Portal hat in der Version V11 noch eine versteckte Funktion.

    Bei TIA V11 lässt sich ein Compilerlogfile bei Übersetzungsvorgängen eines SCL-Bausteins für eine S7-300/400 aktivieren. Bei der 1200 wird das leider nicht gemacht, oder ich habe nur noch nicht gefunden wie man das auch dort aktivieren kann.

    Dazu muss nur ein Ordner angelegt werden.
    Unter Windows 7 ist das (bei meinem Benutzer) der komplette Pfad:
    C:\Users\Thomas\AppData\Local\Siemens\Automation\Portal V11\SCLPlus_Logs

    Wenn man dann einen SCL-Baustein übersetzt, landen im Ordner SCLPlus_Logs diverse Dateien des Übersetzungsprozesses, wie Logfiles und auch der generierte AWL-Code.

    Unter anderem werden auch noch diverse *.Dot Dateien für die Optimierungsschritte des Compilers erzeugt. Mit diesen Dateien lassen sich Syntaxbäume z.B. mit Graphviz (http://www.graphviz.org/) erstellen. Das Format ist 1:1 kompatibel.

    Ein kleines Beispiel:
    Code:
    #intVar1 := 100;
    #intVar2 := #intVar1 * 3;
    Mit dem nun erstellten .dot File kann man sich mit Graphviz folgenden Syntaxbaum (Ausschnitt) erstellen lassen:

    Beispiel-AST-Graphviz.png

    Ob die Funktion bei der V12 komplett entfernt wurde, oder ob man sie auf andere Weise wieder aktivieren kann habe ich noch nicht entdecken können.
    Die Vorgehensweise wie für die V11 funktioniert zumindest nicht mehr.

  2. #12
    Registriert seit
    25.06.2007
    Ort
    Dresden
    Beiträge
    3.930
    Danke
    465
    Erhielt 878 Danke für 634 Beiträge

    Standard

    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    Bei TIA V11 lässt sich ein Compilerlogfile bei Übersetzungsvorgängen eines SCL-Bausteins für eine S7-300/400 aktivieren. Bei der 1200 wird das leider nicht gemacht, oder ich habe nur noch nicht gefunden wie man das auch dort aktivieren kann.
    Bei der V11 gibt es doch für die 1200 gar kein SCL.
    Grüße Frank

  3. #13
    Avatar von Thomas_v2.1
    Thomas_v2.1 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    29.03.2004
    Beiträge
    5.735
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Zitat Zitat von IBFS Beitrag anzeigen
    Bei der V11 gibt es doch für die 1200 gar kein SCL.
    Also bei mir schon. Meinst du vielleicht die V10.5?

  4. #14
    Registriert seit
    03.07.2006
    Beiträge
    1.725
    Danke
    515
    Erhielt 303 Danke für 223 Beiträge

    Standard

    Ist abhängig von der Firmware der CPU .... Bei Version 1.0 gibt es kein SCL bei V2.x dann ja

  5. #15
    Registriert seit
    24.04.2013
    Beiträge
    309
    Danke
    23
    Erhielt 160 Danke für 88 Beiträge

    Standard

    Hi all

    kaum bin ich Schifoan -- eigentlich war das mehr Wiese rutschen (((, schon habt ihr hier die geilen Themen.

    Ich hab Thomas schon meine Erkenntnisse gegeben. Mal sehen was Jürgen da noch draus machen kann

    'n schön' Tach auch
    HB

  6. #16
    Avatar von Thomas_v2.1
    Thomas_v2.1 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    29.03.2004
    Beiträge
    5.735
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Ich habe mal son bißchen weitergeforscht. Ein paar Dinge hat Siemens sich bei der MSIL abgeguckt, z.B. die Ein- und Zwei-Byte Opcodes, nur entscheidet sich das bei Siemens anhand eines anderen Wertes des ersten Bytes des Opcodes.

    Parameterübergabe zu Funktionen läuft wohl über eine Art Stack, zumindest habe ich es so getauft, da es der gleiche Bereich zu sein scheint auf den auch Zwischenergebnisse für Berechnungen abgelegt werden. .

    Ein FC-Inhalt (FC Nummer 1) mit:
    Code:
    MW0 := 17476;
    MW2 := #IN1;
    MW4 := #IN2;
    #OUT := "MW114_Int";
    MW0 := 17476;
    #IN1, #IN2 und #OUT1 sind vom Typ Int.

    Wird nach meiner Interpretation zu:
    Code:
    SET                #BoolStack@01                                                // Setze Bit <1:OUT>
    MOVE               [WORD] M0, 0x4444                                            // Lade und transferiere <1:OUT, 2:IN>
    MOVE               [WORD] M2, #IntStack@02                                      // Lade und transferiere <1:OUT, 2:IN>
    MOVE               [WORD] M4, #IntStack@06                                      // Lade und transferiere <1:OUT, 2:IN>
    MOVE               [WORD] #IntStack@10, M114                                    // Lade und transferiere <1:OUT, 2:IN>
    MOVE               [WORD] M0, 0x4444                                            // Lade und transferiere <1:OUT, 2:IN>
    RET                #BoolStack@01                                                // Bausteinende <1:IN>
    Wenn man den FC aufruft mit:
    Code:
    MW0 := 17476;
    TestFcAddInt(
      IN1:=12,
      IN2:=34,
      OUT=>"MW2"
    );
    MW0 := 17476;
    wird daraus
    Code:
    SET                #BoolStack@01                                                // Setze Bit <1:OUT>
    MOVE               [WORD] M0, 0x4444                                            // Lade und transferiere <1:OUT, 2:IN>
    CALL               Params#0x0002, 1                                             // Call Befehl einleiten <1:PARAM, 2:NR>
    MOVE               [WORD] #IntStack@03, 0x0C                                    // Lade und transferiere <1:OUT, 2:IN>
    MOVE               [WORD] #IntStack@07, 0x22                                    // Lade und transferiere <1:OUT, 2:IN>
    CALL_EXECUTE                                                                    // Call Befehl ausführen
    MOVE               [WORD] M2, #IntStack@11                                      // Lade und transferiere <1:OUT, 2:IN>
    CALL_FRAME_CLEAR                                                                // Call Befehl abschließen
    MOVE               [WORD] M0, 0x4444                                            // Lade und transferiere <1:OUT, 2:IN>
    RET                #BoolStack@01                                                // Bausteinende <1:IN>
    Die Bausteinnummern sind immer noch tief im System verankert, zumindest auf Ebene der IL.
    Was die SPS damit anstellt wird einem wohl weitestgehend verborgen bleiben.

  7. #17
    Registriert seit
    22.11.2007
    Beiträge
    731
    Danke
    6
    Erhielt 89 Danke für 62 Beiträge

    Standard

    wie ist denn der aktuelle Stand der Analayse - und was ist das Ziel?
    willst du einen freien SCL-Compiler fuer die 1200 bauen?

  8. #18
    Avatar von Thomas_v2.1
    Thomas_v2.1 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    29.03.2004
    Beiträge
    5.735
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Zitat Zitat von LowLevelMahn Beitrag anzeigen
    wie ist denn der aktuelle Stand der Analayse - und was ist das Ziel?
    willst du einen freien SCL-Compiler fuer die 1200 bauen?
    Der Sinn dahinter ist rauszufinden wie es funktioniert. Das ist ergiebiger als tausende Seiten halbgare Siemens-Doku zu lesen.

    Es fehlt noch etwas am Grundverständnis, wie DB-Zugriffe und Zugriffe auf Temp-Variablen realisiert sind, bzw. wie man sich die interne Speicherablage überhaupt vorstellen kann. Ansonsten muss noch jede verfügbare Anweisung einmal in allen verschiedenen Varianten aufrufen und den Aufbau dokumentieren. Das ist mehr oder weniger Fleißarbeit, es gesellen sich mit jedem SP auch neue Anweisungen dem bisherigen Zoo hinzu.
    Da ich bisher den Code nur beim Download über Wireshark abgreifen kann ist das etwas aufwändig, da auch der Wireshark-Dissector noch nicht vollständig ist. Darum mache ich erstmal da weiter - je nach Lust und Laune.

  9. #19
    Registriert seit
    22.11.2007
    Beiträge
    731
    Danke
    6
    Erhielt 89 Danke für 62 Beiträge

    Standard

    kannst du so ein Wireshark-Log mit Code hier einstellen - mit kleiner Info ab welchem Paket es wo in den Daten losgeht

  10. #20
    Avatar von Thomas_v2.1
    Thomas_v2.1 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    29.03.2004
    Beiträge
    5.735
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Alles für eine S7-1200.

    SCL-Quelle OB1:
    Code:
    IF NOT("M10.0_Bool") THEN
      "MW0" := 30583;
    END_IF;
    MW0 := 26214;
    IF "MW114_Int" < 100 THEN
      "MW0" := 30583;
    ELSIF "MW114_Int" <= 200 THEN
      "MW0" := 26214;
    ELSIF "MW114_Int" = 300 THEN
      "MW0" := 30583;
    ELSIF "MW114_Int" >= 400 THEN
      "MW0" := 26214;
    ELSIF "MW114_Int" > 500 THEN
      "MW0" := 30583;
    ELSE
      "MW0" := 26214;
    END_IF;
    Im angehängten Logfile beginnt der Bausteinupload in Paket Nr. 142. Bei dieser Bausteingröße ist alles in einer PDU.
    Der Code beginnt bei den drei Bytes 0x18 0x40 0x01

    Laut meiner Interpretation ergibt das in MC7plus-IL:
    Code:
    SET                #BoolStack@01                                                // Setze Bit <1:OUT>
    LDN_BOOL           M10.0                                                        // Lade Bit und negiere <1:IN>
    ST                 #BoolStack@05                                                // Speichere VKE auf <1:OUT>
    JMPC               0                                                            // Springe bei VKE=1 <1:LBL>
    MOVE               [WORD] M0, 0x7777                                            // Lade und transferiere <1:OUT, 2:IN>
    JMP                0                                                            // Springe unbedingt <1:LBL>
    LABEL              0                                                            // Label <1:LBL>
    MOVE               [WORD] M0, 0x6666                                            // Lade und transferiere <1:OUT, 2:IN>
    LD_CMP             LT, [INT] M114, 0x64                                         // Lade und vergleiche <1:TYP 2:IN1, 3:IN2>
    ST                 #BoolStack@05                                                // Speichere VKE auf <1:OUT>
    JMPC               1                                                            // Springe bei VKE=1 <1:LBL>
    MOVE               [WORD] M0, 0x7777                                            // Lade und transferiere <1:OUT, 2:IN>
    JMP                2                                                            // Springe unbedingt <1:LBL>
    LABEL              1                                                            // Label <1:LBL>
    LD_CMP             LE, [INT] M114, 0xC8                                         // Lade und vergleiche <1:TYP 2:IN1, 3:IN2>
    ST                 #BoolStack@05                                                // Speichere VKE auf <1:OUT>
    JMPC               0x03                                                         // Springe bei VKE=1 <1:LBL>
    MOVE               [WORD] M0, 0x6666                                            // Lade und transferiere <1:OUT, 2:IN>
    JMP                2                                                            // Springe unbedingt <1:LBL>
    LABEL              0x03                                                         // Label <1:LBL>
    LD_CMP             EQ, [INT] M114, 0x012C                                       // Lade und vergleiche <1:TYP 2:IN1, 3:IN2>
    ST                 #BoolStack@05                                                // Speichere VKE auf <1:OUT>
    JMPC               0x04                                                         // Springe bei VKE=1 <1:LBL>
    MOVE               [WORD] M0, 0x7777                                            // Lade und transferiere <1:OUT, 2:IN>
    JMP                2                                                            // Springe unbedingt <1:LBL>
    LABEL              0x04                                                         // Label <1:LBL>
    LD_CMP             GE, [INT] M114, 0x0190                                       // Lade und vergleiche <1:TYP 2:IN1, 3:IN2>
    ST                 #BoolStack@05                                                // Speichere VKE auf <1:OUT>
    JMPC               0x05                                                         // Springe bei VKE=1 <1:LBL>
    MOVE               [WORD] M0, 0x6666                                            // Lade und transferiere <1:OUT, 2:IN>
    JMP                2                                                            // Springe unbedingt <1:LBL>
    LABEL              0x05                                                         // Label <1:LBL>
    LD_CMP             GT, [INT] M114, 0x01F4                                       // Lade und vergleiche <1:TYP 2:IN1, 3:IN2>
    ST                 #BoolStack@05                                                // Speichere VKE auf <1:OUT>
    JMPC               0x06                                                         // Springe bei VKE=1 <1:LBL>
    MOVE               [WORD] M0, 0x7777                                            // Lade und transferiere <1:OUT, 2:IN>
    JMP                2                                                            // Springe unbedingt <1:LBL>
    LABEL              0x06                                                         // Label <1:LBL>
    MOVE               [WORD] M0, 0x6666                                            // Lade und transferiere <1:OUT, 2:IN>
    LABEL              2                                                            // Label <1:LBL>
    RET                #BoolStack@01                                                // Bausteinende <1:IN>
    #BoolStackXY ist meine Interpretation, das dient zumindest als eine Art Zwischenspeicher.
    Angehängte Dateien Angehängte Dateien

  11. Folgende 2 Benutzer sagen Danke zu Thomas_v2.1 für den nützlichen Beitrag:

    IBFS (12.10.2014),LowLevelMahn (10.10.2014)

Ähnliche Themen

  1. TIA Seltsames Verhalten der TON-Timer bei der S7-1200
    Von Thomas_v2.1 im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 13.05.2013, 23:56
  2. Antworten: 10
    Letzter Beitrag: 07.12.2012, 07:22
  3. Antworten: 9
    Letzter Beitrag: 08.10.2012, 11:24
  4. Blick unter den Rock...
    Von Borsti im Forum Simatic
    Antworten: 27
    Letzter Beitrag: 06.02.2008, 10:50
  5. Was ist der Unterschied bei den Adressierungen...
    Von Anonymous im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 19.09.2005, 17:09

Lesezeichen

Berechtigungen

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