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

Ergebnis 1 bis 8 von 8

Thema: Zählerstand (Zeiten) in DB speichern

  1. #1
    Registriert seit
    29.05.2012
    Beiträge
    4
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,
    ich bin neu hier in diesem Forum und habe ein kleines Problem und komm einfach auf keinen grünen Zweig.
    Vorab: Ich bin NICHT gerade ein Profiprogrammierer, hab aber gewisse Grundkenntnisse in Step7 (V5.5).

    Ablauf:
    Es handelt sich um ein Projekt, in dem ich Zeiten (Zählwerte eines Taktgebers) erfassen muss. Es gibt drei Varianten dieser Anlage, die jedoch immer das selbe machen. Die Anlage fährt von Position A (Sensor B0) nach Position B (Sensor B180) und wieder zurück nach Position A (Sensor B0). Dieser Ablauf entspricht einem Zyklus. Auf jeder Endlage soll die Anlage 2sec. verweilen. Bevor die Zeiten jedoch erfasst werden, muss die Anlage zuerst einmal 100 Zyklen warmlaufen. Von den 30 darauffolgenden Zyklen brauch ich dann die Zeit, wenn die Anlage von Pos.A (B0) nach Pos.B (B180) fährt.

    Programmierung:
    Ich hab diesen Ablauf in einem FB als Ablaufkette programmiert. Das Warmlaufen und die anschließende Zeitenermittlung hab ich mit zwei Rückwärtszählern realisiert: Der Warmlaufzähler (Z1) zählt von 100 rückwärts bis auf 0. Er setzt einen Merker (Warmlaufmerker), der als Startbedingung für das verfahren von Pos A nach Pos B nötig wird. Ist der Zähler dann auf 0 setzt der Flankenwechsel von Q den Zählwert des Messzählers (Z2). Der wiederum setzt einen zweiten Merker, der ebenfalls als Weiterfahrbedingung von Pos A nach Pos B nötig ist (Oderverknüpfung "Warmlaufmerker oder Messmerker"). Sind Beider Merker (Warmlaufmerker und Messmerker) auf 0, bleibt die Anlage stehen und die Messung ist beendet.
    Alles eben Genannte sowie den Taktgenerator zur Zeitenermittlung hab ich in FUP programmiert. Bei der Zeitenermittlung hab ich mich in AWL versucht:

    [U "M2" // Schrittmerker (Schritt2) Schwenken 0 auf 180
    FP M 5.3 // Positive Flanke Schritt 2
    S M 5.4 // Hilfsmerker für Positive Flanke
    U Z 2 // Bedingung für Messzähler muss da sein
    UN Z 1 // Warmlaufmerker darf nicht da sein ( könnte man wahrscheinlich auf weglassen)
    R #B180 // Rücksetzen des Hilfsmerkers bei erreichen von B180
    SPB M000 // Sprungbefehl in die Zykluszeitermittlung

    //
    M000: L #Schritt // Statische Variable #Schritt (Anfangswert 0)
    L 1 // Zahl "1" laden
    +I // Zur Variable #Schritt addieren
    T #Schritt // neuen Wert in #Schritt transferieren

    L #Schritt // Zyklusvergleich
    L 1 // 1. Zyklus
    ==I
    SPB M001 // Springe nach Zeitenzuweisung 1. Zyklus


    L #Schritt // Zyklusvergleich
    L 2 // 2. Zyklus
    ==I
    SPB M002 // Springe nach Zeitenzuweisung 2. Zyklus

    // …………..wird bis Zyklus 30 wiederholt ………………………………

    M001: U( // Zeitenzuweisung 1. Zyklus mit Zähler Z5
    U "M2" // Bewegung von Pos A nach Pos B setzt den Zähler
    UN #B0 // ... sobald B0 nicht mehr da ist
    S M 20.0
    U "M3" // Sobald Verweilzeit (2sec) beginnt und B180 da ist
    R M 20.0 // Rücksetzten des Zählers
    U M 20.0
    )
    U T 10 // Bei jedem Takt von T10 vorwärtszählen
    ZV Z 5
    BLD 101
    NOP 0
    NOP 0
    NOP 0
    NOP 0
    LC Z 5 // Lade den Zählwert von Z5
    T #Zeitspeicher // Transferiere den Zählwert in Temporäre Variable #Zeitspeicher
    DTR // Umwandeln des Zählers von BCD in INT
    RND
    T #Zeit1 // Transferiere INT-Zahl in Out-Variable #Zeit 1
    NOP 0
    BEA
    // …………wird ebenfalls bis Zyklus 30 wiederholt einzige Änderung anstatt #Zeit 1 => #Zeit2…]

    Problem:
    Die Werte kommen nicht als INT im DB an und laufen zudem ständig. Ich hab mir vorgestellt, dass wenn ich den DB im Beobachten-Modus anschaue, ich Schritt für Schritt die Werte reingeschrieben bekomme.
    Es stehen bei jeder Zeit die gleichen Werte (Zeit 1 bis 30)

    So, ich hoffe mein Problem langweilt euch nicht zu sehr, aber ich hab mir gedacht bei euch müsste mir jemand weiterhelfen können.

    Danke mal im Voraus für eure Antworten.
    Zitieren Zitieren Zählerstand (Zeiten) in DB speichern  

  2. #2
    Registriert seit
    08.02.2007
    Ort
    A-2320
    Beiträge
    2.252
    Danke
    244
    Erhielt 332 Danke für 303 Beiträge

    Standard

    DTR wandelt Ganzzahl zu Real
    BTI wandelt BCD zu INT

  3. #3
    StefanK_R ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    29.05.2012
    Beiträge
    4
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ich hoffe diesesmal klappt es mit dem [CODE]
    Code:
      U     "M2"                        // Schrittmerker (Schritt2) Schwenken 0 auf 180
          FP    M      5.3                  // Positive Flanke Schritt 2
          S     M      5.4                  // Hilfsmerker für Positive Flanke
          U     Z      2                    // Bedingung für Messzähler muss da sein 
          UN    Z      1                    // Warmlaufmerker darf nicht da sein ( könnte mann wahrscheinlich auf weglassen)
          R     #B180                       // Rücksetzeten des Hilfsmerkers bei erreichen von B180
          SPB   M000                        // Sprungbefehl in die Zykluszeitermittlung
    // 
    M000: L     #Schritt                    // Statische Variable #Schritt (Anfangswert 0)
          L     1                           // Zahl "1" laden 
          +I                                // Zur Variable #Schritt addieren
          T     #Schritt                    // neuen Wert in #Schritt transverieren 
          L     #Schritt                    // Zyklusvergleich 
          L     1                           // 1. Zyklus
          ==I   
          SPB   M001                        // Springe nach Zeitenzuweisung 1. Zyklus 
    
          L     #Schritt                    // Zyklusvergleich 
          L     2                           // 2. Zyklus
          ==I   
          SPB   M002                        // Springe nach Zeitenzuweisung 2. Zyklus
          L     #Schritt                    // Zyklusvergleich 
          L     3                           // 3. Zyklus
          ==I   
          SPB   M003                        // Springe nach Zeitenzuweisung 3. Zyklus
    
    //...bis Zyklus 30
    
    M001: U(                                // Zeitenzuweisung 1. Zyklus mit Zähler Z5 
          U     "M2"                        // Bewegung von Pos A nach Pos B  setzt den Zähler
          UN    #B0                         // ... sobald B0 nicht mehr da ist 
          S     M     20.0
          U     "M3"                        // Sobald verweilzeit (2sec) beginnt und B180 da ist
          R     M     20.0                  // Rücksetzten des Zählers
          U     M     20.0
          )     
          U     T     10                    // Bei jedem Takt von T10 vorwärtszählen 
          ZV    Z      5
          BLD   101
          NOP   0
          NOP   0
          NOP   0
          NOP   0
          LC    Z      5                    // Lade den Zählwert von Z5
          T     #Zeitspeicher               // Transveriere den Zählwert in Temporäre Variable #Zeitspeicher // Umwandeln des Zählsers von BCD in INT 
          BTI   
          T     #Zeit1                      // Transveriere INT-Zahl in Out-Variable #Zeit 1 
          NOP   0
          BEA
    Danke Borromeus für deine Antwort. Ich hab´s jetzt mal probiert. Leider steht jetzt im Instanz DB bei jeder INT-Variable #Zeit 1 bis 30 "999" drin.

  4. #4
    Registriert seit
    08.02.2007
    Ort
    A-2320
    Beiträge
    2.252
    Danke
    244
    Erhielt 332 Danke für 303 Beiträge

    Standard

    Wird der Zählerstand irgendwo zurückgestetzt?

  5. #5
    StefanK_R ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    29.05.2012
    Beiträge
    4
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ich meine Ja. Bei M001 (siehe Code) bis M030 sag ich ihm die Startbedingung
    Code:
     U(                                // Zeitenzuweisung 1. Zyklus mit Zähler Z5 
          U     "M2"                        // Bewegung von Pos A nach Pos B  setzt den Zähler
          UN    #B0                         // ... sobald B0 nicht mehr da ist 
          S     M     20.0
          U     "M3"
    und Rücksetztbedingungen
    Code:
     R     M     20.0                  // Rücksetzten des Zählers 
          U     M     20.0
          )
    sowie die Vorwärtszählbedingung T10.
    Code:
     U     T     10                    // Bei jedem Takt von T10 vorwärtszählen 
          ZV    Z      5

  6. #6
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Standard

    Zitat Zitat von StefanK_R Beitrag anzeigen
    Leider steht jetzt im Instanz DB bei jeder INT-Variable #Zeit 1 bis 30 "999" drin.
    Kann ich mir gut vorstellen, du zählst ja auch pausenlos weiter:
    Code:
    M000: L     #Schritt                    // Statische Variable #Schritt (Anfangswert 0)
          L     1                           // Zahl "1" laden 
          +I                                // Zur Variable #Schritt addieren
          T     #Schritt                    // neuen Wert in #Schritt transverieren 
          L     #Schritt                    // Zyklusvergleich 
          L     1                           // 1. Zyklus
          ==I   
          SPB   M001
    Das Zählen wird doch in jedem Zyklus ausgeführt.
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  7. #7
    StefanK_R ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    29.05.2012
    Beiträge
    4
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Paule,
    ich sag doch aber als Sprungbedingung zu M000, dass die Positive Flanke vom M2 sowie Z2 und nicht Z3 da sein darf.

  8. #8
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von StefanK_R Beitrag anzeigen
    Hallo Paule,
    ich sag doch aber als Sprungbedingung zu M000, dass die Positive Flanke vom M2 sowie Z2 und nicht Z3 da sein darf.
    Hallo Stefan,
    ich behaupt jetzt mal das die Flanke an der Sprungmarke durch die Zuweisungen S / R keine Auswirkung mehr hat.
    Aber selbst wenn es doch funktionieren sollte, du musst doch dann das "Zählen" überspringen, so in etwa:
    Code:
          SPB   M000                        // Sprungbefehl in die Zykluszeitermittlung
    // 
          L     #Schritt                    // Statische Variable #Schritt (Anfangswert 0)
          L     1                           // Zahl "1" laden 
          +I                                // Zur Variable #Schritt addieren
          T     #Schritt                    // neuen Wert in #Schritt transverieren 
    M000: L     #Schritt                    // Zyklusvergleich 
          L     1                           // 1. Zyklus
          ==I   
          SPB   M001
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

Ähnliche Themen

  1. FM350-1 Ungenauer Zählerstand
    Von ElJupo im Forum Simatic
    Antworten: 25
    Letzter Beitrag: 08.08.2011, 14:11
  2. FM 350-1 Zählerstand Null setzen
    Von bernd67 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 08.05.2009, 12:16
  3. Zeiten zyklisch in einem DB speichern
    Von Sebastian im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 28.03.2006, 15:58
  4. Zeiten!
    Von Anonymous im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 02.06.2005, 15:48
  5. Antworten: 5
    Letzter Beitrag: 15.10.2004, 15:19

Lesezeichen

Berechtigungen

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