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

Ergebnis 1 bis 7 von 7

Thema: Kontinuierliche Daten mit der S7 aufzeichnen

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

    Frage


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    ich habe das Problem, dass ich Analogdaten nach entsprechender Wandlung in REAL-Werte alle 100ms in einen DB schreiben muss. Start und Ende der Aufzeichnung werden durch Ereignisse gesteuert (das Funktioniert auch soweit).

    Als Steuerung benutze ich eine VIPA CPU 315 SB/DPM und zum Programmieren STEP 7 V5.3 SP1.

    Ich habe mir einen FC geschrieben der von einem FB aus alle 100ms aufgerufen wird und dann dort bei jedem Aufruf einen REAL-Wert in einen zuvor definierten DB schreiben soll. Den DB habe ich als Array mit 500 REAL-Werten definiert (Definition aus Siemensunterlagen, daher sicherlich fehlerfrei). Der FC bekommt als Übergabewert leidglich die Adresse, die in dem FB nach jedem Aufruf des FCs um 4 (INT) erhöht wird. Vor dem Start jeder Aufzeichnung wird die Adresse immer wieder auf 0 gesetzt.

    Code:
          AUF   "Vak5_1"                    // DB30 öffnen
          L     #adresse                    // IN-Variable in INT
          T     #akt_ADR                    // TEMP-Variable in INT
     
          L     #akt_ADR
          SLD   3                           // INT-Wert zu Pointer wandeln
          LAR1  
     
          L     "Trending".Vac5_1           // Realwert laden (so möglich???)
          T     DBD [AR1,P#0.0]             // schreiben von DB30
     
          BE                             // zum Testen eingefügt!
     
          AUF   "Vak5_2"                    // DB31 öffnen
          L     "Trending".Vac5_2           // Realwert laden
          T     DBD [AR1,P#0.0]             // schreiben von DB31
     
          AUF   "Vak13_1"                   // DB32 öffnen
          L     "Trending".Vac13_1          // Realwert laden
          T     DBD [AR1,P#0.0]             // schreiben von DB32
     
          AUF   "Vak13_2"                   // DB33 öffnen
          L     "Trending".Vac13_2          // Realwert laden
          T     DBD [AR1,P#0.0]             // schreiben von DB33
     
          AUF   "Vak13_3"                   // DB34 öffnen
          L     "Trending".Vac13_3          // Realwert laden
          T     DBD [AR1,P#0.0]             // schreiben von DB34
    Den OB121 (fängt Programmierfehler ab) habe ich auch eingefügt, da die Steuerung sonst sofort in STOP geht, wenn der Aufruf T DBD [AR1,P#0.0] abgearbeitet wird. Die Steuerung gibt einen Fehler aus, der auf eine unerlaubte Adressierung hinweist. Bei der Erstellung des FCs habe ich micht weitestgehend an ein Beispiel von volker gehalten (http://www.sps-forum.de/showthread.php?t=6364), doch leider bekomme ich außer der Fehlermeldung kein Ergebnis zustande.

    Noch einige Fragen:
    • Darf des Beschreiben des DBs in einem FC geschehen, oder führt dies schon zu Problemen.
    • Darf ich den Messwert mit dem Aufruf L "Trending".Vac5_1 laden oder funktioniert das nicht so einfach (es steht dort definitiev ein REAL-Wert drin!)
    • Kann ich, wie in dem Beispiel oben, mehrere DBs hintereinander öffnen und gleich beschreiben (die Adresse ist für alle DBs die gleiche) oder muss ich dies in unterschiedlichen FCs machen.
    Sollte noch etwas unklar sein, werde ich es so gut es geht Erklären.

    Vielen Dank schonmal vorab für die Hilfestellungen!!!

    mfg Sebastian
    Zitieren Zitieren Kontinuierliche Daten mit der S7 aufzeichnen  

  2. #2
    Registriert seit
    10.12.2003
    Beiträge
    34
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo,

    versuch mal die Befehle so umzustellen:
    L "Trending".Vac5_1 // Realwert laden (so möglich???)

    Hier: Auf "Vak5_1"
    T DBD [AR1,P#0.0] // schreiben von DB30

    Ich vermute mal dass "Trending" der symbolische Name eines DB`s ist, und
    Du damit den vorherigen Befehle AUF "" überschreibst, d.h. die SPS schreibt in den DB "Trending", und falls der nicht bis zum DBD30 offen ist, bekommst Du einem Programmierfehler.
    m.f.G
    RonOro
    Zitieren Zitieren Falscher DB ?  

  3. #3
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    Achtung der Pointer ist ein DWORD, also auch ein DINT verwenden bzw. wandeln. Es funktioniert sonst nur für "kurze Sprünge", da ab einer bestimmten Sprungweite die Adresse falsch ist.

    Code:
     
          L     #akt_ADR
          ITD                                //INT in DINT wandeln
          SLD   3                           //DINT-Wert zu Pointer wandeln
          LAR1
    Ansonsten siehe vorigen Beitrag, du willst immer in den "Trending"-DB schreiben.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  4. #4
    Avatar von Sebastian
    Sebastian ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    15.03.2006
    Beiträge
    4
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    @RonOro

    Danke für den Hinweis! Das vertauschen der beiden Aufrufe hat wunderbar funktioniert. Ich kann nun alle fünf DBs mit den Werten der fünf Messstellen beschreiben!!!

    Hätte nicht gedascht, dass dabei so penibel auf die Reihenfolge der Aufrufe geachtet werden muss.

    @Ralle

    Ich habe mich wie schon zuvor erwähnt an das Beispiel von volker gehalten (http://www.sps-forum.de/showthread.php?t=6364), darin hat CrazyCat gefragt, welcher Datentyp für akt_ADR (bei Ihm hieß das teil akt_dw) verwendet werden kann.

    >>Für akt_dw ist nur der Datentyp INT zulässig, oder?
    sollte doch wohl reichen,oder? oder hast du einen db der dw mit einer adresse > 32768 hat.
    Ich habe für akt_ADR auch den Datentyp INT verwendet und es geht!?!? Ich habe auch einen Timer mit laufen lassen um die Messdauer zu kontrollieren, damit ich einen Ruckschluss auf die Anzahl der aufgezeichneten Messwerte ziehen kann und auch das ist richtig. Messdauer 16,4 sek --> 164 aufgezeichnete Messwerte bei einem Trigger von 100ms.

    Wie lange ist ein "langer" bzw "kurzer" Sprung? Momentan springe ich immer 4 um auf die nächste höhere Adresse des DBs zu kommen.
    Gruß
    Sebastian

  5. #5
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    @Sebastian

    Das mit dem DINT sollte nur ein Hinweis sein, ich hatte auch immer INT stehen, bis ich in einem Datenbaustein von 15384 Byte Länge fast ganz am Ende Daten per indirekter Adressierung auslesen wollte. Das ergibt eigenartige Effekte in der SPS. Sie geht nicht mal unbedingt in Stop, aber beim Schreiben der Daten kann es passieren, daß irgendwas im Programm gesetzt wird, z.Bsp. Ausgänge die gar nicht beschaltet waren. Nachdem ich mit DINT bzw ITD gearbeitet habe war das Problem behoben. Bis wann INT ausreicht weiß ich nicht (bin zu faul das mal genau nachzurechnen) und eigentlich ist es egal, ich nutze seitdem DINT bzw. DWORD und es geht.

    PS: Vielleicht kann ich es nächste Woche nochmal austesten.
    Geändert von Ralle (16.03.2006 um 17:40 Uhr)
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  6. #6
    Avatar von Sebastian
    Sebastian ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    15.03.2006
    Beiträge
    4
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke für den Hinweis!

    Wenn du ein Ergebnis hast bis wohin INT funkioniert und ab wann man DINT benutzen sollte, dann kannst es ja mal ins Form stellen. Würde mich auch interessieren.
    Gruß
    Sebastian

  7. #7
    Registriert seit
    28.10.2005
    Ort
    Ottweiler, Saar
    Beiträge
    940
    Danke
    259
    Erhielt 124 Danke für 109 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich würde vermuten das ist der Fall bei (Bausteinadresse + Offset) > 64k

Ähnliche Themen

  1. S7-Daten schnell aufzeichnen und anzeigen
    Von Günni1977 im Forum HMI
    Antworten: 9
    Letzter Beitrag: 25.03.2010, 19:57
  2. Daten über mehrere Wochen aufzeichnen mit TwinCAT
    Von olitheis im Forum CODESYS und IEC61131
    Antworten: 15
    Letzter Beitrag: 18.05.2009, 08:15
  3. Antworten: 1
    Letzter Beitrag: 22.05.2008, 11:27
  4. SPS Daten aufzeichnen
    Von Fluffi im Forum Simatic
    Antworten: 22
    Letzter Beitrag: 14.10.2007, 21:42
  5. Daten aufzeichnen
    Von capri-fan im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 28.04.2006, 18:49

Lesezeichen

Berechtigungen

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