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

Seite 3 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 21 bis 30 von 35

Thema: SPN Sprung

  1. #21
    exclis066 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    24.06.2013
    Beiträge
    14
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo hucki,


    UN #Weiter;
    SPB D001;

    L #Zeiger_aktl;
    L 1;
    +I ;
    T #Zeiger_aktl;

    L #Anz;
    L 1;
    -I ;
    L #Zeiger_aktl;
    >I ;
    SPN D001;
    TAK ;
    T #Zeiger_aktl;

    D001: NOP 0;
    U #SProg_End;
    = #Prog_End;

    END_FUNCTION_BLOCK
    wie du siehst, ende FB.Was würdest du mir sinnvolles vorschlagen damit ich diesen Schritt sinnvoll ersetze.

  2. #22
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.166
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Zitat Zitat von exclis066 Beitrag anzeigen
    350 zeile Code s5(awl) auf s7 scl umsetzen
    Vielleicht kontrollierst Du nochmal den originalen S5-Code, ob der korrekt umgesetzt wurde.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  3. #23
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.713
    Danke
    443
    Erhielt 914 Danke für 739 Beiträge

    Standard

    Zitat Zitat von exclis066 Beitrag anzeigen
    Hallo hucki,

    wie du siehst, ende FB.Was würdest du mir sinnvolles vorschlagen damit ich diesen Schritt sinnvoll ersetze.
    Bin leider kein AWL-Profi, schon gar nicht für S5.

    Für mich steht da:
    Code:
    IF #Weiter THEN
       #Prog_End    := #SProg_End AND #Anz - 1 > Zeiger_aktl + 1;
       #Zeiger_aktl := #Anz - 1;
    ELSE
       #Prog_End    := #SProg_End;
    END_IF;
    Das SPN dient nur dazu, den im #Zeiger_aktl bereits vorhandenen Wert nicht mit dem gleichen Wert noch mal zu überschreiben und trotzdem durch den Sprung das VKE nicht zu verändern. M.M.n. würde das Überschreiben mit dem gleichen Wert aber auch nicht schaden und würde nicht so verwirren, wie der Sprung.

    Anders sieht es aus, wenn nach dem Sprung SPN vlt. doch noch andere Anweisungen folgen, die das VKE beeinflussen.


    Aber wie an anderen Stellen schon oft gesagt, nur "Hobby"-Meinung.

  4. #24
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.166
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Zitat Zitat von exclis066 Beitrag anzeigen

    UN #Weiter;
    SPB D001;

    L #Zeiger_aktl;
    L 1;
    +I ;
    T #Zeiger_aktl;

    L #Anz;
    L 1;
    -I ;
    L #Zeiger_aktl;
    >I ;
    SPN D001;
    TAK ;
    T #Zeiger_aktl;

    D001: NOP 0;
    U #SProg_End;
    = #Prog_End;

    END_FUNCTION_BLOCK
    In #1 war es noch ein FC3000, nun ist es ein FUNCTION_BLOCK?
    Und die Zuweisung "T #Anz" fehlt nun?

    Zitat Zitat von exclis066 Beitrag anzeigen
    Wie der originale S5-Code aussieht wissen wir nicht, doch der in #1 und #21 gezeigte S7-AWL-Code kann so in SCL (V5.x) umgesetzt werden:
    Code:
    IF Weiter THEN
      Zeiger_aktl := Zeiger_aktl + 1;
      Anz := Anz - 1;
    
    //nächste 3 Zeilen bewirken nichts und können deshalb entfallen:
    //  IF Zeiger_aktl = Anz THEN
    //    Zeiger_aktl := Anz;
    //  END_IF;
    
    END_IF;
    Prog_End := SProg_End;
    Nachtrag: VKE-Verschleppung nicht beachtet! Korrektur siehe Beitrag #28

    Harald
    Geändert von PN/DP (23.05.2016 um 10:23 Uhr)
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  5. #25
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.713
    Danke
    443
    Erhielt 914 Danke für 739 Beiträge

    Standard

    Hallo Harald,

    SPN unterbricht doch weder die VKE-Kette noch setzt es das VKE automatisch auf 1. Somit müsste das Ergebnis des vorhergehenden Vergleiches Eingang in die abschließende UND-Verknüpfung von #Prog_End finden, oder?



    PS: In exclis066s Text-Programmauszug im Post#21 fehlt das T #Anz. Deswegen bin ich davon ausgegangen, dass #Anz seinen ursprünglichen Wert behalten soll. Im Bild-Ausschnitt aus Post#1 ist es jedoch drinne.
    Da sieht man mal wieder, was solche Kleinigkeiten ausmachen.

  6. Folgender Benutzer sagt Danke zu hucki für den nützlichen Beitrag:

    PN/DP (23.05.2016)

  7. #26
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.713
    Danke
    443
    Erhielt 914 Danke für 739 Beiträge

    Standard

    Und der Sprung wird doch gemacht, wenn #Anz und #Zeiger_aktl gleich sind (Differenz = 0), oder? Ansonsten erfolgt der Transfer.
    Müsste es daher nicht heißen:
    Code:
    IF #Zeiger_aktl <> #Anz THEN
       #Zeiger_aktl := #Anz;
    END_IF;
    bzw. einfach nur:
    Code:
    #Zeiger_aktl := #Anz;

  8. #27
    exclis066 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    24.06.2013
    Beiträge
    14
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo zusammen,

    ich habe FC erstellt damit SPN verhalten simulieren und verstehen wollte, da nicht den ganzen FB simulieren wollte. Aber AKKU1 =Zeiger_aktl und AKKU2=Anz-1 SPN spring nicht wenn AKKU1=AKKU2 daher mit dem TAK AKKU1= Anz-1 dann Zeiger_aktl :=Anz-1 oder?

    ich habe jetzt so realisiert:

    EDIT:Fehler korrigiert!
    IF Weiter THEN
    Zeiger_aktl:=Zeiger_aktl+1;
    IF (Zeiger_aktl > Anz-1) THEN
    Zeiger_aktl:=Anz-1;
    END_IF;
    END_IF;
    //Programm beendet
    Prog_Ende:=SProg_Ende;
    Geändert von exclis066 (23.05.2016 um 15:35 Uhr)

  9. #28
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.166
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Zitat Zitat von hucki Beitrag anzeigen
    SPN unterbricht doch weder die VKE-Kette noch setzt es das VKE automatisch auf 1. Somit müsste das Ergebnis des vorhergehenden Vergleiches Eingang in die abschließende UND-Verknüpfung von #Prog_End finden, oder?
    Hallo hucki,

    Du hast recht, die VKE-Verschleppung habe ich nicht beachtet, mist...

    Zur Übersicht nochmal der S7-AWL-Code:
    Code:
    UN #Weiter;
    SPB D001;       //setzt auf jeden Fall VKE=1 und /ER=0
    
    L #Zeiger_aktl;
    L 1;
    +I ;
    T #Zeiger_aktl;
    
    L #Anz;
    L 1;
    -I ;
    T #Anz;
    L #Zeiger_aktl;
    >I ;            //(2)
    SPN D001;       //(1)
    TAK ;
    T #Zeiger_aktl;
    
    D001: NOP 0;
    U #SProg_End;
    = #Prog_End;
    (1) SPN springt bei "#Anz <> #Zeiger_aktl" ---> die überflüssige Zuweisung "#Zeiger_aktl := #Anz" wird ausgeführt bei "#Zeiger_aktl = #Anz"
    (2) Das VKE wird gebildet von "#Anz > #Zeiger_aktl" und geht wegen der fehlenden VKE-Abgrenzung in die Verknüpfung zu #Prog_End mit ein

    Meine SCL-Umsetzung sieht nun so aus:
    Code:
    IF Weiter THEN
      Zeiger_aktl := Zeiger_aktl + 1;
      Anz := Anz - 1;
    
    //nächste 3 Zeilen bewirken nichts und können deshalb entfallen:
    //  IF Zeiger_aktl = Anz THEN
    //    Zeiger_aktl := Anz;
    //  END_IF;
    
    END_IF;
    
    Prog_End := (NOT Weiter AND SProg_End) OR (Weiter AND (Anz > Zeiger_aktl) AND SProg_End); //Klammern nicht nötig aber übersichtlicher
    
    // optimiert umgeformt:
    // Prog_End := ((Anz > Zeiger_aktl) OR NOT Weiter) AND SProg_End;
    Doch wer weiß, vielleicht ist das SPN ein Übertragungsfehler vom S5-AWL und wir zerbrechen uns den Kopf über nichts?

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  10. #29
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.166
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Zitat Zitat von exclis066 Beitrag anzeigen
    SPN spring nicht wenn AKKU1=AKKU2 daher mit dem TAK AKKU1= Anz-1 dann Zeiger_aktl :=Anz-1 oder?
    Zur Verdeutlichung wie überflüssig (und daher vermutlich falsch) die Zuweisung an Zeiger_aktl ist, nochmal ausführlich:
    Nach dem Inkrementieren von #Zeiger_aktl und Dekrementieren von #Anz und Laden vom neuen #Zeiger_aktl (vor dem >I) ist folgende Situation:

    AKKU2 = neuer Wert #Anz
    AKKU1 = neuer Wert #Zeiger_aktl

    SPN springt nicht bei AKKU1=AKKU2
    --> Situation hinter dem SPN: AKKU1=AKKU2=#Zeiger_aktl=#Anz
    - TAK: nun wird der ohnehin gleiche Inhalt von AKKU1 mit AKKU2 getauscht (!)
    - T #Zeiger_aktl: der gleiche Wert wie #Zeiger_aktl wird wieder #Zeiger_aktl zugewiesen (!)

    (!) zwei wirkungslose und daher überflüssige Operationen ---> Code vermutlich falsch

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  11. #30
    exclis066 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    24.06.2013
    Beiträge
    14
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Harald,

    hast du recht, TAK und SPN ist überflüssig.Ich habe nachgefragt und festgestellt SPN falscher weise eingesetzt wurde.
    Kollege wollte nur Zeiger_aktl auf Anz-1 begrenzen.

    Vielen Dank an alle
    Geändert von exclis066 (23.05.2016 um 12:34 Uhr)

Ähnliche Themen

  1. AS Sprung in PRG
    Von Tyler-Durden im Forum CODESYS und IEC61131
    Antworten: 3
    Letzter Beitrag: 01.07.2011, 10:08
  2. Sprung programmieren
    Von Stonie im Forum Simatic
    Antworten: 16
    Letzter Beitrag: 22.12.2008, 22:49
  3. Sprung programmieren
    Von Syntaxfehler im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 17.12.2007, 11:19
  4. vergleich mit sprung?
    Von Ibaxx im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 28.09.2007, 09:50
  5. ob1 sprung in fc1
    Von Anonymous im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 14.11.2005, 17:32

Stichworte

Lesezeichen

Berechtigungen

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