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

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

Thema: TAW, Schiebefunktion und Bit-Wertigkeiten

  1. #1
    Registriert seit
    03.07.2013
    Beiträge
    9
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo liebe Gemeinde,

    dieses ist mein erster Beitrag in diesem Forum, soll aber nicht so bleiben .
    Kurzer Überblick: Arbeite mit S7 seit knapp 1 Jahren erst, vorwiegend mit FC-Bausteinen und in FUP. Nun habe ich den Sprung in die FB-Bausteine gewagt und ebenfalls die Programmiersprache auf AWL umgestellt. Gibt da einfach zu viele Vorteile drin.

    Zur Problematik: Ich habe seit Freitag den Einstieg in den Dateityp "Word" gemacht und soll nun ein kleines Programm schreiben, welches für unsere Maschine als Test fungiert, soll heißen, dass wir jeden Ausgang per Tastendruck anwählen können und so jenen beobachten können.
    Es gibt 2 Taster (E125.0, E125.1) mit denen ich jeweils "Vor- bzw Zurückspringen" kann.
    Das "Springen" erfolgt danach per Schiebefunktion (Ebenfalls Neuland).

    Das Problem ist nun folgendes: Das Programm funktioniert soweit so gut wie es auch soll, heute habe ich den TAW Befehl eingefügt, da sonst mein Bit mit der Wertigkeit 1 der A125.0 ist, ich jedoch am Anfang gerne A124.0 ansteuern möchte. Alternativ hätte ich auch L 256 machen können.

    Wenn das Programm den A124.0 schaltet und ich zurückspringe, lande ich auf A125.7 bis hin zu A125.0, danach aber auf 124.0 und nicht auf 124.7, so wie ich es vermute. Wenn ich ab 124.0 vorspringe, springt er bei A124.7 den darauffolgenden Schritt wieder auf A124.0. Mit anderen Worten: Ungenügend irgendwie. A124.0 hat die Wertigkeit 256, A124.7 die Wertigkeit -32786 (höchstwertigstes Bit) und A125.0 hat die Wertigkeit 1. Was muss ich ändern, damit ich ganz normal durchklicken kann das Programm, ohne das auf A124.0 zurückgesprungen wird(außer natürlich es wird gewollt )

    Hier mein Programm:
    OB1:


    U E 126.6
    = L 20.0
    BLD 103
    U E 125.1
    = L 20.1
    BLD 103
    U E 125.0
    = L 20.2
    BLD 103
    CALL FB 1 , DB1
    Not_Aus :=L20.0
    Taster_Start:=L20.1
    Taster_EV :=L20.2
    EINGANG :=AW124
    Ausgang :=AW124
    NOP 0

    FB1


    L #EINGANG
    L 0
    ==I // Einmaliger Vergleich bei SPS-Start
    SPBN nw3 // Bei Routineablauf in NW3 springen
    L 1 // lade Wertigkeit 1 ins Word
    TAW // Tauschen des Bytes; start bei A124.0
    T #Ausgang // Ergebniss ins AW transferieren
    nw3: L #EINGANG
    U #Taster_Start //"Vorspringen"
    FP #Flp // Flanke
    SPB nw5 //Fortsetzung NW5
    U #Taster_EV //"Zurückspringen"
    FP #Flp2 //Flanke
    SPB nw7 //Fortsetzung NW7
    BE // Ansonsten BE

    nw5: SRW 1 // Schiebebefehl rechts
    SPB tra

    nw7: SLW 1 //Schiebebefehl links

    tra: NOP 0
    T #Ausgang

    BE

    Bin über jeden Tip dankbar

    Ps: Gibt es die Möglichkeit, dass das Programm besser hochgeladen werden kann?

    Gruß

    winRARE
    Zitieren Zitieren TAW, Schiebefunktion und Bit-Wertigkeiten  

  2. #2
    winRARE ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    03.07.2013
    Beiträge
    9
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Anmerkung: Es handelt sich um eine CPU 314C-2 DP. Als Software verwende ich Step 7 V5.5 +SP2

    Code:
    OB1: 
    
    
    U E 126.6
     = L 20.0
     BLD 103
     U E 125.1
     = L 20.1
     BLD 103
     U E 125.0
     = L 20.2
     BLD 103
     CALL FB 1 , DB1
     Not_Aus :=L20.0
     Taster_Start:=L20.1
     Taster_EV :=L20.2
     EINGANG :=AW124
     Ausgang :=AW124
     NOP 0
     
    FB1
     
    
    L #EINGANG
     L 0
     ==I                                  // Einmaliger Vergleich bei SPS-Start
     SPBN nw3                         // Bei Routineablauf in NW3 springen
     L 1                                   // lade Wertigkeit 1 ins Word
     TAW                                 // Tauschen des Bytes; start bei A124.0
     T #Ausgang                      // Ergebniss ins AW transferieren
     nw3: L #EINGANG
     U #Taster_Start                //"Vorspringen"
     FP #Flp                            // Flanke
     SPB nw5                          //Fortsetzung NW5
     U #Taster_EV                  //"Zurückspringen"
     FP #Flp2                         //Flanke
     SPB nw7                         //Fortsetzung NW7
     BE                                  // Ansonsten BE
     
    nw5: SRW 1                     // Schiebebefehl rechts
     SPB tra
     
    nw7: SLW 1                     //Schiebebefehl links
     
    tra: NOP 0
     T #Ausgang
     
    BE

    So ist das evtl übersichtlicher?

  3. #3
    Registriert seit
    30.10.2009
    Ort
    10 km vom Herzen der Natur
    Beiträge
    1.626
    Danke
    120
    Erhielt 340 Danke für 255 Beiträge

    Standard

    Sind Deine Flankenmerker (Flp unf Flp2) als TEMP oder STAT deklariert?
    Gruß
    Michael

  4. #4
    winRARE ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    03.07.2013
    Beiträge
    9
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ich habe sie als Stat programmiert

  5. #5
    Registriert seit
    30.10.2009
    Ort
    10 km vom Herzen der Natur
    Beiträge
    1.626
    Danke
    120
    Erhielt 340 Danke für 255 Beiträge

    Standard

    Das löst es zwar nicht, aber aus "SPB tra" solltest Du "SPA tra" machen.
    Gruß
    Michael

  6. #6
    winRARE ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    03.07.2013
    Beiträge
    9
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Als Nachtrag eventuell: Wenn ich das Programm ohne TAW durchlaufen lassen, wenn also der Ausgang 125.0 bei Programmstart angesteuert wird, dann kann ich ganz normal durchschalten, nur kann ich mit "zurückspringen" nicht mehr von A125.0 auf A124.7 springen.

    Evtl. hilft das ein wenig weiter

  7. #7
    Registriert seit
    19.06.2008
    Ort
    Ostalbkreis
    Beiträge
    3.140
    Danke
    201
    Erhielt 553 Danke für 498 Beiträge

    Standard

    Zitat Zitat von winRARE Beitrag anzeigen
    Ps: Gibt es die Möglichkeit, dass das Programm besser hochgeladen werden kann?
    Ja. # anklicken (Code).

    wieso eigentlich?

    EINGANG :=AW124
    Ausgang :=AW124

    da TAW'st du dich im Kreis rum.

    Nimm doch ein Wort im Stat-Bereich (deklarieren) und arbeite mit diesem weiter.
    Am Ende transferierst das auf das AW124 (Out)

  8. #8
    Registriert seit
    30.10.2009
    Ort
    10 km vom Herzen der Natur
    Beiträge
    1.626
    Danke
    120
    Erhielt 340 Danke für 255 Beiträge

    Standard

    Was mir noch auffällt:
    Bei "Vorspringen" nutzt Du SRW und bei "Zurückspringen" SLW. Lies Dir mal Die Hilfe dazu durch. Wenn Du zurückspringst, wird das Wort nach links verschoben, das heißt, Dein Merker wird auf die nächstHÖHERE Adresse verschoben und umgekehrt. Du solltest vielleicht mal beide Bytes separat in einer Variablentabelle beobachten, wielleicht klärt sich dann alles auf.
    Gruß
    Michael

  9. #9
    Registriert seit
    30.10.2009
    Ort
    10 km vom Herzen der Natur
    Beiträge
    1.626
    Danke
    120
    Erhielt 340 Danke für 255 Beiträge

    Standard

    Nachtrag: Es wird nicht auf die Nächsthöhere Adresse verschoben, sondern auf das nächsthöhere Bit.
    Die Bytereihenfolge ist - wie immer bei STEP7 - so, dass das niedrigstadressierte Byte das höherwertigste ist.
    Geändert von M-Ott (03.07.2013 um 13:17 Uhr) Grund: meinte Bit und hatte Byte geschrieben
    Gruß
    Michael

  10. #10
    Registriert seit
    06.10.2009
    Ort
    NRW
    Beiträge
    1.569
    Danke
    63
    Erhielt 258 Danke für 218 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich hab mal "quick + dirty" was geschrieben mit indirekter Adressierung über das Adressregister:

    Code:
    FUNCTION_BLOCK "BITPOS"
    TITLE =
    VERSION : 0.1
    
    
    VAR_INPUT
      iAusgangswort : WORD ;    
      iBitPos_plus : BOOL ;    
      iBitPos_minus : BOOL ;    
    END_VAR
    VAR_OUTPUT
      oAusgangsbit : BOOL ;    
    END_VAR
    VAR
      Bitposition : INT ;    
      FP_Plus : BOOL ;    
      FP_Minus : BOOL ;    
    END_VAR
    VAR_TEMP
      tmpAR1 : DWORD ;    
      tmpWort : WORD ;    
    END_VAR
    BEGIN
    NETWORK
    TITLE =AR1 sichern
    
          TAR1  #tmpAR1; 
    
    NETWORK
    TITLE =Eingangswort rangieren
    //1. Kopieren des Eingangswortes auf "tmpWort"
    //2. AR1 mit der Adresse von tmpWort laden
          L     #iAusgangswort; 
          T     #tmpWort; 
          LAR1  P##tmpWort; 
    NETWORK
    TITLE =Bitposition erhöhen
    
          U     #iBitPos_plus; 
          FP    #FP_Plus; 
          SPBN  inc; 
    
          L     #Bitposition; 
          L     1; 
          +I    ; 
          T     #Bitposition; 
    
    inc:  NOP   0; 
    
    NETWORK
    TITLE =Bitposition verringern
    
          U     #iBitPos_minus; 
          FP    #FP_Minus; 
          SPBN  dec; 
    
          L     #Bitposition; 
          L     1; 
          -I    ; 
          T     #Bitposition; 
    
    dec:  NOP   0; 
    
    NETWORK
    TITLE =Grenzen prüfen
    
    
          L     #Bitposition; 
          L     0; 
          <I    ; 
          SPBN  min; 
    
          L     0; 
          T     #Bitposition; 
    
    min:  L     #Bitposition; 
          L     15; 
          >I    ; 
          SPBN  max; 
    
          L     15; 
          T     #Bitposition; 
    
    max:  NOP   0; 
    NETWORK
    TITLE =
    
          L     #Bitposition; 
          +AR1  ; 
    
          U     L [AR1,P#0.0]; 
          =     #oAusgangsbit; 
    NETWORK
    TITLE =AR1 zurückschreiben
    
          LAR1  #tmpAR1; 
    
    END_FUNCTION_BLOCK
    Sollte so gehen. Fragen dürfen gern gestellt werden. Korrekturen sind auch erlaubt.

    Vielleicht noch eine kurze Erklärung der Schnittstelle:

    An "iAusgangswort" kommt das zu prüfende Ausgangswort.
    An "oAusgangsbit" ein Ausgang der nicht in dem Bereich des zu prüfenden Worts liegt. Ggf. auch ein Merker.
    Geändert von Tigerente1974 (03.07.2013 um 13:21 Uhr)
    Meine Motivation läuft nackig mit einem Cocktail über eine Wiese.

Ähnliche Themen

  1. Schiebefunktion
    Von Zito im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 09.04.2011, 10:09
  2. Taster verschiedene Wertigkeiten addieren
    Von blaupille29 im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 30.11.2010, 11:36
  3. Schiebefunktion
    Von Trappatobi im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 22.03.2010, 13:44
  4. Wertigkeiten erkennen und Rangfolge zuweisen
    Von Stoepsel im Forum Programmierstrategien
    Antworten: 2
    Letzter Beitrag: 29.04.2009, 19:28
  5. SCL und TAW
    Von MSB im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 14.08.2007, 08:36

Lesezeichen

Berechtigungen

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