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

Ergebnis 1 bis 7 von 7

Thema: Schleife zum Durchsuchen eines DB bringt SPS in Stopp

  1. #1
    Registriert seit
    05.11.2004
    Ort
    Schweiz
    Beiträge
    1.138
    Danke
    225
    Erhielt 127 Danke für 85 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo.

    Folgender Code wurde von mir programmiert um einen DB zu durchsuchen
    und in diesem festzustellen, ob ein Bit auf 1 ist oder nicht.
    Nur wenn ich diesen FC in der SPS aktiviere geht diese sofort auf Stopp
    und meint ein DB sei nicht geladen. Jedoch verwende ich nirgendes diesen
    DB, der die CPU erwartet.
    Die Parameter von extren:

    START_ADR = 1 (Byte 1 soll als 1. gelesen werden, da in Byte 0 nix zum Auswerten drin steht)
    SOURCE_DB = DB100 (in der SPS vorhanden mit 456 Byte Länge)
    COUNT = 300

    Code:
          U     #Message_Activ
          R     #Message_Activ
          L     #START_ADR
          T     #Adress_Puffer
          L     #COUNT
          +I    
          T     #LAENGE
    // SCHLEIFEN DURCHLAUF
    LOOP: NOP   0
          AUF   #SOURCE_DB                  // WERT AUS QUELL_DB EINLESEN
          L     LW     3
          SLW   3
          LAR1  
          L     DBB [AR1,P#0.0]
          L     0                           // WERT MIT NULL VERGLEICHEN
          ==I   
          SPB   same
          UN    #Message_Activ              //ERGEBNISBIT SETZEN
          S     #Message_Activ
          BEA   
    same: NOP   0
          L     #Adress_Puffer
          INC   1
          T     #Adress_Puffer
          L     #COUNT
          <=I   
          SPB   LOOP
    Da ich den AUF[DB] in der Schleife drin habe, wäre meine Vermutung vielleicht, das ich zu oft diesen Aufrufe. Ist es möglich mit dieser Konstallation, das ist den Befehl AUF[DB] vor die Schleife lege und dieser die ganze Zeit dann für alle Schleifendurchgänge offen bleibt? Könnte es daran liegen?

    Danke
    Kommt Zeit.... Kommt Rat.... In der Tat.
    Gartenlampe mit Windenergie anstelle von Solar? Bei Interesse -> PN
    Zitieren Zitieren Schleife zum Durchsuchen eines DB bringt SPS in Stopp  

  2. #2
    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 Krumnix Beitrag anzeigen
    Hallo.

    Folgender Code wurde von mir programmiert um einen DB zu durchsuchen
    und in diesem festzustellen, ob ein Bit auf 1 ist oder nicht.
    Nur wenn ich diesen FC in der SPS aktiviere geht diese sofort auf Stopp
    und meint ein DB sei nicht geladen. Jedoch verwende ich nirgendes diesen
    DB, der die CPU erwartet.
    Die Parameter von extren:

    START_ADR = 1 (Byte 1 soll als 1. gelesen werden, da in Byte 0 nix zum Auswerten drin steht)
    SOURCE_DB = DB100 (in der SPS vorhanden mit 456 Byte Länge)
    COUNT = 300

    Code:
          U     #Message_Activ
          R     #Message_Activ
          L     #START_ADR
          T     #Adress_Puffer
          L     #COUNT
          +I    
          T     #LAENGE
    // SCHLEIFEN DURCHLAUF
    LOOP: NOP   0
          AUF   #SOURCE_DB                  // WERT AUS QUELL_DB EINLESEN
          L     LW     3
          SLW   3
          LAR1  
          L     DBB [AR1,P#0.0]
          L     0                           // WERT MIT NULL VERGLEICHEN
          ==I   
          SPB   same
          UN    #Message_Activ              //ERGEBNISBIT SETZEN
          S     #Message_Activ
          BEA   
    same: NOP   0
          L     #Adress_Puffer
          INC   1
          T     #Adress_Puffer
          L     #COUNT
          <=I   
          SPB   LOOP
    Da ich den AUF[DB] in der Schleife drin habe, wäre meine Vermutung vielleicht, das ich zu oft diesen Aufrufe. Ist es möglich mit dieser Konstallation, das ist den Befehl AUF[DB] vor die Schleife lege und dieser die ganze Zeit dann für alle Schleifendurchgänge offen bleibt? Könnte es daran liegen?

    Danke
    Ich würde mal sagen da hast Du eine Endlosschleife.
    Du zählst Deine Count Variable nicht zurück.
    Am Label muss stehen:
    Code:
    LOOP: T #Count
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  3. #3
    Krumnix ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    05.11.2004
    Ort
    Schweiz
    Beiträge
    1.138
    Danke
    225
    Erhielt 127 Danke für 85 Beiträge

    Standard

    Nein

    Ich zähle meine Startadresse hoch und vergleiche sie mit Count.
    Wenn sie nicht gleich sind, springt er zu loop zurück. Ansonst ist der Baustein fertig, wenn Adresse und Count gleich sind
    Kommt Zeit.... Kommt Rat.... In der Tat.
    Gartenlampe mit Windenergie anstelle von Solar? Bei Interesse -> PN

  4. #4
    Registriert seit
    18.09.2004
    Ort
    Münsterland/NRW
    Beiträge
    4.728
    Danke
    729
    Erhielt 1.161 Danke für 972 Beiträge

    Standard

    Er sagt ja das er den DB nicht finden kann. Steht in der Diagnose auch nach welchem DB er sucht? Wie ist #Source_DB deklariert und was steht an deinem Eingang vom Baustein? Ich meine das es SLD und nicht SLW sein sollte.
    Warum schreibst du
    Code:
    L LW 3
    Was steht da drin?

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

    Standard

    Naja er lädt ja das LW3.... damit ist SLW 3 nicht falsch.
    Aber das LW 3 ist etwas seltsam anmutend.

    Haha, ich weiss schon, gerade eingefallen.
    Der INC ist ein 8-Bit Befehl... da zählste nicht bis 300......

    Probier mal:

    L #Adress_Puffer
    L 1
    +I
    T #Adress_Puffer

    lG
    Karl

  6. #6
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.794
    Danke
    398
    Erhielt 2.417 Danke für 2.013 Beiträge

    Standard

    Also ...
    mich würde hier auch (genau wie Marlob) interessieren, was es mit dem LW3 auf sich hat. Es wird in der Schleife nicht verändert ... Wäre es nicht sinniger für die Adressierung den Adress_Puffer her zu nehmen ?

    Des weiteren : was hast du für eine CPU und bei welchem Wert steht die Zyklus-Überwachungszeit ?

    Der INC-Befehl wäre mir auch unsympatisch ... siehe Borromeus.

    Gruß
    LL

  7. #7
    Krumnix ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    05.11.2004
    Ort
    Schweiz
    Beiträge
    1.138
    Danke
    225
    Erhielt 127 Danke für 85 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    CPU 319F-3PN/DP 4MB-Card.
    Zykluszeit normal 3ms. Welche das System hat, wenn der Fehler kommt,
    keine Ahnung. Die Anlage steht grad 8000 KM von mir weg ^^

    LW3 bezieht sich auf den Bereich in der Variable #Adress_Puffer.

    Der Baustein hatte bis jetzt immer funktioniert. Aber die maximale Länge,
    die ich durchsucht habe war bis 30 oder 40. Mit 300 ist es das erste Mal.

    Dann könnte der INC-Befehl wirklich das Problem sein.
    Ich werde ads mal testen lassen.

    Danke dafür
    Kommt Zeit.... Kommt Rat.... In der Tat.
    Gartenlampe mit Windenergie anstelle von Solar? Bei Interesse -> PN

Ähnliche Themen

  1. Antworten: 50
    Letzter Beitrag: 01.08.2011, 12:57
  2. Antworten: 22
    Letzter Beitrag: 14.01.2011, 12:10
  3. Durchsuchen eines DB’s
    Von Rich im Forum Programmierstrategien
    Antworten: 12
    Letzter Beitrag: 27.12.2008, 12:00
  4. SFC15 im FB bringt Fehler!
    Von INST im Forum Simatic
    Antworten: 15
    Letzter Beitrag: 30.03.2007, 12:03
  5. Antworten: 12
    Letzter Beitrag: 30.01.2005, 10:48

Lesezeichen

Berechtigungen

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