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

Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 16 von 16

Thema: Abfrage eines Fehlerdatenbausteines mittels eines Funktionsbausteines

  1. #11
    Registriert seit
    06.12.2011
    Beiträge
    44
    Danke
    19
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ok dann muss ich mir das nochmal anschauen. Es war nur der Fall, dass es mir das Datenwort 0 nicht ausgewertet hat.
    Aber dann probiere ich des gleich nochmal aus!

    [Edit]
    Habe es jetzt nochmal ausprobiert bei meinem Code scheint es so zu sein, dass das Datenwort 0 nicht abgefragt wird.
    Warum auch immer :/
    [/Edit]
    Geändert von DDuesentrieb (04.06.2014 um 11:27 Uhr)

  2. #12
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    echt nicht mein Tag heut oder einfach zu lange raus aus der Materie

    Code:
    *
          AUF   DB [#Aux_DB_Nr]
          L     DBLG
          L     2
          /I    
    next: T     #Loop_Count
          +     -1
          SLD   4
          LAR1  
          L     DBW [AR1,P#0.0]
          L     0
          <>I   
          S     #Collecting_Disturbance
          L     #Loop_Count
          LOOP  next
    Geändert von vierlagig (04.06.2014 um 11:45 Uhr)
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  3. Folgender Benutzer sagt Danke zu vierlagig für den nützlichen Beitrag:

    DDuesentrieb (04.06.2014)

  4. #13
    Registriert seit
    06.12.2011
    Beiträge
    44
    Danke
    19
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Daumen hoch! Jetzt funktioniert das ganze ohne das händische Abfragen

    Dankschön!

  5. #14
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.181
    Danke
    923
    Erhielt 3.288 Danke für 2.657 Beiträge

    Standard

    Es wird keinen Schleifendurchlauf geben, bei dem #Loop_Count = 0 ist (außer der DB ist zufällig nur 2 Byte lang).
    Die Verwendung von LOOP ist vielleicht nicht ganz glücklich gewählt. Man könnte auch vor der Schleife die höchste mögliche Wordadresse berechnen und in der Schleife nur vergleichen, ob die aktuelle Wordadresse größer ist. Dann am besten statt #Loop_Count gleich die Wordadresse als Schleifenindex benutzen (immer nur um P#2.0 erhöhen und für den nächsten Schleifendurchlauf speichern). Das bringt mich dann auf die Idee, auf AR1 zu verzichten und stattdessen direkt speicherindirekte Adressierung zu verwenden ( L DBW [#Word_Address] ).

    @Mr.XX
    Vielleicht solltest Du mal erklären, warum Du von DBLG 2 abziehst.
    Enthält Dein DB nicht eigentlich nichts weiter als das Fehlerbit-Array?

    Eine Prüfung, ob das Öffnen des übergebenen DB #DB_Nr (*) erfolgreich war, wäre sinnvoll.
    (*) was in den Referenzdaten noch nichtmal zu finden sein wird

    Im übrigen könntest Du die Schleife auch schon abbrechen, sobald Du ein Word <> 0 gefunden hast.

    Wenn man Schleifen programmiert, dann sollte man die Schleifen möglichst effizient programmieren und z.B. alle unnötigen (konstanten) Berechnungen aus der Schleife herausnehmen. Es gibt aber bekanntlich viele Wege nach Rom, und viele Geschmäcker und Vorlieben.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  6. #15
    Registriert seit
    06.12.2011
    Beiträge
    44
    Danke
    19
    Erhielt 1 Danke für 1 Beitrag

    Standard

    @PN/DP

    Der Datenbaustein ist nur für die Fehlermeldungen reserviert. Die 2 hab ich von der Gesamtlänge abezogen, da die Länge von meinem Datenbaustein 52 ist.
    Das letzte Datenwort aber die Adresse 50 hat.

    Grüße

  7. #16
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.181
    Danke
    923
    Erhielt 3.288 Danke für 2.657 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    DBLG = 52 Byte = 26 Word
    Wenn Du 2 abziehst, dann wird Deine Schleife nur 25 mal durchlaufen und je nach Programmierung wird entweder das DBW50 oder das DBW0 nicht ausgewertet. Das ist wohl kaum das, was Du wolltest.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

Ähnliche Themen

  1. Antworten: 6
    Letzter Beitrag: 01.11.2013, 20:36
  2. Antworten: 14
    Letzter Beitrag: 21.10.2012, 11:39
  3. Antworten: 27
    Letzter Beitrag: 09.02.2011, 10:29
  4. Abfrage eines DB in SCL.Warum geht es nicht
    Von Gerold im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 31.10.2005, 09:40
  5. Antworten: 2
    Letzter Beitrag: 09.08.2003, 21:24

Lesezeichen

Berechtigungen

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