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

Ergebnis 1 bis 10 von 10

Thema: FB der vergleicht um zusätzlichen Ausgang erweitern

  1. #1
    Registriert seit
    20.09.2005
    Beiträge
    63
    Danke
    1
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo

    Ich habe hier einen FB den mein nicht mehr vorhandener Kollege geschrieben hat. Dieser FB vergleicht zwei eingegebene Stringarrays miteinander.

    Er ist recht einfach aufgebaut und hat auch nur ein Netzwerk was so aussieht:

    Code:
          LAR1  P##A
          LAR2  P##B
          L     D [AR1,P#0.0]
          L     D [AR2,P#0.0]
          ==D   
          SPBN  end0
    
          LAR1  P##A
          LAR2  P##B
          L     D [AR1,P#4.0]
          L     D [AR2,P#4.0]
          ==D   
          SPBN  end0
    
          LAR1  P##A
          LAR2  P##B
          L     D [AR1,P#8.0]
          L     D [AR2,P#8.0]
          ==D   
          SPBN  end0
    
          LAR1  P##A
          LAR2  P##B
          L     D [AR1,P#12.0]
          L     D [AR2,P#12.0]
          ==D   
          SPBN  end0
    
          LAR1  P##A
          LAR2  P##B
          L     D [AR1,P#16.0]
          L     D [AR2,P#16.0]
          ==D   
          SPBN  end0
    
          LAR1  P##A
          LAR2  P##B
          L     D [AR1,P#20.0]
          L     D [AR2,P#20.0]
          ==D   
          SPBN  end0
    
          LAR1  P##A
          LAR2  P##B
          L     W [AR1,P#24.0]
          L     W [AR2,P#24.0]
          ==I   
          SPBN  end0
    
          CLR   
          =     #oFailure
          SET   
          BE    
    
    end0: SET   
          =     #oFailure
          CLR   
          BE
    Vom Prinzio her, schaltet der FB den ENO Ausgang, wenn der Vergleich erfolgreich war.
    Nun wollte ich noch einen weiteren Ausgang "oFailure" hinzufügen, der mir geschaltet wird, wenn der Vergleich nicht erfolgreich war. Also habe ich mit meinem bisher erworbenen Wissen die Zeilen

    Code:
    CLR
    = #oFailure
    und die Zeilen

    Code:
    SET
    = #oFailure
    an die entsprechenden Stellen geschrieben wie sie auch im oben gezeigten Code sind.

    Leider geht mir die CPU immer mit einem Programmierfehler in den Stop und ich weiß leider nicht, wie ich die Zeilen für oFailure schreiben muss, damit es Programmiertechnisch richtig ist.

    Könnt ihr mir da auf die Sprünge helfen?
    Solltet ihr noch zusätzliche Daten brauchen, dann schreibt einfach.

    Vielen Dank im Voraus.

    Grüße
    Daimonion
    Zitieren Zitieren FB der vergleicht um zusätzlichen Ausgang erweitern  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.399 Danke für 1.999 Beiträge

    Standard

    ... wenn du den FB (in dem Fall an der Schnittstelle) änderst, so mußt du beim Aufruf desselben auch den Instanz-DB neu erzeugen und diesen dann auch an die CPU übertragen (und auch den aufrufenden Baustein).

    Gruß
    Larry

  3. #3
    Registriert seit
    20.09.2005
    Beiträge
    63
    Danke
    1
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Das hab ich natürlich gemacht und auch darauf geachtet, dass keine Konflikte mehr existieren. Weiterhin hab ich das an der realen Anlage und aber auch am PLCSIM getestet und nachvollzogen.

  4. #4
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.399 Danke für 1.999 Beiträge

    Standard

    Sorry ... außer den genannten Fehler-Möglichkeiten weiß ich sonst nichts mehr. Dann hättest du das auf jeden Fall richtig gemacht.
    Was sagt das system den konkret zu dem Fehler und an welche Stelle im Programm verweist dich die Diagnose bei dem Fehler ?

  5. #5
    Registriert seit
    19.07.2010
    Beiträge
    1.289
    Danke
    213
    Erhielt 267 Danke für 233 Beiträge

    Standard

    Du rufst das Ding aber nicht als Multinstanz auf, oder? In dem Fall wäre es sinnvoll mit dem AR2 etwas vorsichtiger umzugehen.
    mfG Aventinus

  6. #6
    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

    Zitat Zitat von Aventinus Beitrag anzeigen
    Du rufst das Ding aber nicht als Multinstanz auf, oder? In dem Fall wäre es sinnvoll mit dem AR2 etwas vorsichtiger umzugehen.
    selbst bei nicht muliinstanzaufruf verwurschtelt er das AR2
    also am anfang speichern TAR2 #dTempAR2 und vor dem zugriff auf #oFailure mit LAR2 #dTempAR2 wiederherstellen
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  7. #7
    Registriert seit
    20.09.2005
    Beiträge
    63
    Danke
    1
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Okay, das heißt, der Baustein von der eigentlichen Verarbeitung ist verbesserungswürdig. Das nehm ich mal so hin und werde es bei Gelegenheit (nächster Kundenbesuch) so verbessern wie vierlagig beschrieben hat. Das Adressregister vor Abarbeitung sichern und vor verlassen des Bausteins wieder zurückschreiben.
    Der Baustein an sich wird nicht als Multinstanz aufgerufen.

    Als Fehlermeldung kann ich euch folgendes geben:

    Ereignis 2 von 19: Ereignis-ID 16# 4562
    STOP durch Programmierfehler (OB nicht geladen oder nicht möglich, bzw. kein FRB vorhanden )
    Unterbrechungstelle im Anwenderprogramm: Zyklisches Programm (OB 1)
    Prioritätsklasse: 1
    FB-Nummer: 310
    Bausteinadresse: 184
    Bisheriger Betriebszustand: RUN
    Angeforderter Betriebszustand: STOP (intern)
    interner Fehler, kommendes Ereignis
    14:01:38.479 20.05.2011


    Ereignis 3 von 19: Ereignis-ID 16# 2523
    Bereichslängenfehler beim Schreiben
    Instanz-DB , Bitzugriff, Zugriffsadresse: 78
    FB-Nummer: 310
    Bausteinadresse: 184
    Angeforderter OB: Programmierfehler-OB (OB 121)
    OB nicht vorhanden oder gesperrt oder nicht startbar im aktuellen Betriebszustand
    interner Fehler, kommendes Ereignis
    14:01:38.479 20.05.2011
    Edit:

    So, ich hab jetzt nochmal den OB121 ausgelesen

    FLT_REG sagt: W#16#004E
    als Fehler, den ich in der Hilfe nicht finde

    OB121_RESERVED_1 sagt: B#16#05
    was ein Peripheriefehler auf den Ausgängen sein könnte.

    Ich kann mir leider noch keinen genauen Reim auf das Fehlerbild machen. Solltet ihr noch andere Daten brauchen, so sagt bitte bescheid.

    Edit2:

    So, wenn ich anstelle des #oFailure einen globalen Merker nehme, dann funktioniert der Baustein. Aber wieso kann ich denn in einem Baustein auf diese Weise nicht auf ein Ausgangsbit des FB schreiben?

    Edit3:

    Wenn ich anstelle eines globalen Merkers das ganze in einen DB schreiben möchte dann stürzt mir der FB zwar nicht ab aber schreiben tut er auch nicht in den FB.
    Geändert von Daimonion (20.05.2011 um 14:39 Uhr)

  8. #8
    Registriert seit
    30.03.2005
    Beiträge
    2.096
    Danke
    0
    Erhielt 673 Danke für 541 Beiträge

    Standard

    1. Multiinstanzfähige FBs

    STEP 7 verwendet bei multiinstanzfähigen FBs das Adressregister AR2 als Basisadressregister für die Instanzdaten.

    Wenn man in einem multiinstanzfähigen FB das Adressregister AR2 verwenden will, muss man den Inhalt vorher retten und nach der
    Verwendung wiederherstellen.

    In dem Bereich, in dem man mit dem Adressregister AR2 arbeitet, darf man keinen Zugriff auf Bausteinparameter oder statische
    Lokaldaten pogrammieren.

    2. Nicht multiinstanzfähige FBs

    STEP 7 verwendet bei nicht multiinstanzfähigen FB das Adressregister AR2 nicht.

    Bei einem nicht multiinstanzfähigen FB muss in den Eigenschaften des FB der Haken bei Multiinstanzfähigkeit entfernt werden.

    Multiinstanz.jpg

    Gruß Kai

  9. #9
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.399 Danke für 1.999 Beiträge

    Standard

    So ... ich habe das gerade mal gegengecheckt ...

    Es ist so, wie von 4L beschrieben. AR2 sichern und vor Verwendung von oFailure wieder zurücksichern - dann geht es. Ansonsten geht der Zugriff auf die Instanz-Variable "in die Hose". - Kai hat es ja sehr schön beschrieben ...

    Der Merker befindet sich außerhalb der Instanz und wird korrekt adressiert.
    Wenn du möchtest, dass es funktioniert solltest du es wie beschrieben machen.
    Dann kannst du aber auch gleich die vielen "LAR1 P##A LAR2 P##B" wegmachen - die brauchst du nämlich auch nur einmal (am Anfang). Danach machst du den Rest ja über den Pointer-Offset (P#0.0 , P#4.0 , P#8.0 etc.).

    Gruß
    Larry

  10. #10
    Registriert seit
    20.09.2005
    Beiträge
    63
    Danke
    1
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Vielen Dank für die Erklärungen und die Lösung.

    Nachdem ich die Änderungen eingebaut habe funktioniert alles wie gewünscht.

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    Dann kannst du aber auch gleich die vielen "LAR1 P##A LAR2 P##B" wegmachen - die brauchst du nämlich auch nur einmal (am Anfang). Danach machst du den Rest ja über den Pointer-Offset (P#0.0 , P#4.0 , P#8.0 etc.).
    Das hab ich mich auch schon gefragt und du hast mich dann jetzt mit deiner Aussage direkt bestätigt...


    Danke nochmal für die Hilfe und ein schönes WE.

Ähnliche Themen

  1. Nachteile durch zusätzlichen 400 Euro-Job?
    Von Buschmann im Forum Stammtisch
    Antworten: 7
    Letzter Beitrag: 23.03.2011, 09:30
  2. Profibuskabel mit zusätzlichen Leitungen
    Von Losossos im Forum Feldbusse
    Antworten: 5
    Letzter Beitrag: 02.10.2009, 20:15
  3. UDT erweitern
    Von maddin im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 02.03.2007, 09:05
  4. PROFIBUS-Umsetzer NetLink jetzt mit zusätzlichen Möglichkeiten
    Von Gerhard Bäurle im Forum Werbung und Produktneuheiten
    Antworten: 6
    Letzter Beitrag: 28.06.2006, 16:08
  5. ENO-Ausgang oder eigener OK-Ausgang?
    Von MSP im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 02.11.2005, 19:32

Lesezeichen

Berechtigungen

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