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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Wiederholende Datenerfassungen in einem DB bei s7

  1. #1
    Registriert seit
    28.07.2003
    Beiträge
    108
    Danke
    112
    Erhielt 7 Danke für 7 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    ich habe folgendes problem bei einem s7 prog:
    ich möchte 10 daten(bei mir zeiten) in einem db so hinterlegen, das sie nacheinander geschrieben werden und nach der 10ten wieder von vorne.
    habe mir auch eine möglichkeit mit zähler, dann mit vergleicher ins dementsprechende dw zuschreiben "gebaut". es muß doch aber auch eine elegantere lösung dafür geben(sfc,fc oder fb oder indierekte Adre.).
    wer kann mir dabei wohl tipps geben?
    Religionskriege sind Konflikte zwischen erwachsenen Menschen, bei denen es darum geht, wer den cooleren, imaginaeren Freund hat
    Zitieren Zitieren Wiederholende Datenerfassungen in einem DB bei s7  

  2. #2
    Registriert seit
    16.06.2003
    Ort
    88356 Ostrach
    Beiträge
    4.811
    Danke
    1.231
    Erhielt 1.101 Danke für 527 Beiträge

    Standard

    ohne garantie, nicht getestet.
    eventuell um das ganze noch ne schleife legen wenn alle zeiten in einem zyklus gespeichert werden sollen.
    bzw. von wo sollen die zeiten ausgelesen werden?

    Code:
          L     MD     0                    //Pointer DB-Wort
          L     20
          >=I                                //Wenn DW20 erreicht wurde
          SPBN  M001
          L     0
          T     MD     0                    //Setze Pointer wieder auf 0
    
    M001: NOP   0
    
          L     MD     4                    //Zeitwert steht in MD4
          T     DBW [MD 0]                  //Schreibe Zeit in DBW0 - DBW20
    
          L     MD     0
          +     2                            //pointer um ein Wort erhöhen
          T     MD     0

  3. #3
    loop2003 Gast

    Standard

    Hey DEGO,

    ich versuche jetzt mal dein Problem zu analysieren:

    also du möchtest alle x Sekunden ein Wert in ein Register eintragen, welches eine bestimmte Länge hat! Richtig?

    Warte auf Antwort
    Grüsslies

  4. #4
    Anonymous Gast

    Standard

    :P Hi, in der S7 gibt es eine viel elegantere Lösung.

    Versuch mal den Befehl "Loop"

    Die Funktion ist im Hilfetext F1 gut beschrieben.

  5. #5
    Registriert seit
    16.06.2003
    Ort
    88356 Ostrach
    Beiträge
    4.811
    Danke
    1.231
    Erhielt 1.101 Danke für 527 Beiträge

    Standard

    loop zählt aber runter, und wir wollen immer zwei hochzählen...
    man könnte loop wie beschrieben einsetzen um alle zeiten in einem zyklus zu verarbeiten.

    also um das ganze programm herum noch ne loop schleife...

  6. #6
    Registriert seit
    19.06.2003
    Beiträge
    197
    Danke
    10
    Erhielt 17 Danke für 13 Beiträge

    Standard

    Hallo,
    Ich setzte für solche Aufgabe sehr oft das Zusatzproramm "SCL" ein.
    Mit diesem Programmen lassen sich For..Next-Schleifen und Arrays mit variablen Index programmieren.
    Wenn die Zykluszeit aber möglichst kurz sein soll, sollte aber in AWL programmiert werden.
    Gruss Martin

  7. #7
    Anonymous Gast

    Standard


    Schreibe im FC-Kopf die temporären Variablen
    0.0 Zaehler WORD Schleifenzähler
    0.2 Zeiger DWORD Zeiger zum Speichern

    Netzwerk 1

    AUF DB 10 // Aufschlagen des Datenbausteines
    // um die Zeiten zu speichern
    L P#0.0
    T #Zeiger
    L 10 // Schleife mit dem Zählwert 10 laden
    Next: T #Zaehler
    L #Zeiger
    LAR1
    L MD 4
    T DBD [AR1,P#0.0]
    L #Zeiger
    L P#4.0
    +D
    T #Zeiger

    L #Zaehler
    LOOP Next

    Ich hoffe, ich konnte helfen.

  8. #8
    Anonymous Gast

    Standard

    Tschuldigung habe mich nicht zu Erkennen gegeben.

  9. #9
    Registriert seit
    17.06.2003
    Beiträge
    18
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo DEGO,

    einen umlaufenden Zeiger kannst du ganz einfach mit der MOD-Anweisung berechnen:

    //*** Umlaufregister mit MOD
    L #REGISTER_ZEIGER
    L #ANZAHL
    MOD
    T #REGISTER_ZEIGER // 0..ANZAHL


    Ein Beispiel findest du auch unter

    http://www.sps-net.de/infos/info_main.htm
    "Verwaltung eines FiFo's für Integerwerte"


    mfG, Stefan



    Zwei Dinge sind unendlich:
    Das All
    und
    die Dummheit der Menschen.

    (bei Ersterem bin ich mir nicht so sicher)

  10. #10
    Registriert seit
    17.06.2003
    Beiträge
    18
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo DEGO,

    noch ein Hinweis. Wenn du in meinem o.g. Beispiel (unter www.sps-net.de) den Ausgang "VOLL" mit dem Eingang "AUSTRAGEN" verschaltest, sollte der Baustein als reines Umlaufregister funktionieren!

    mfG, Stefan

Ähnliche Themen

  1. Multiinstanzing aus einem OB
    Von vollmi im Forum Simatic
    Antworten: 15
    Letzter Beitrag: 18.02.2011, 14:08
  2. UDT in einem DB
    Von Bensen83 im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 10.08.2010, 13:39
  3. Ausgang von einem BK9100 aus einem BC9050 steuern
    Von merlin im Forum CODESYS und IEC61131
    Antworten: 2
    Letzter Beitrag: 28.09.2008, 10:51
  4. 2 mastersysteme an einem cp
    Von delphie im Forum Feldbusse
    Antworten: 0
    Letzter Beitrag: 15.03.2008, 04:02
  5. Verbindungskontrolle zu einem MP
    Von Frustrated im Forum HMI
    Antworten: 8
    Letzter Beitrag: 19.12.2006, 16:06

Lesezeichen

Berechtigungen

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