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

Seite 1 von 5 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 49

Thema: Störbits erkennen

  1. #1
    Registriert seit
    12.09.2012
    Beiträge
    961
    Danke
    183
    Erhielt 23 Danke für 22 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi,

    ich stecke mal wieder etwas fest ...

    Habe mal folgenden Code

    Code:
          L     MD   200
          INVD  
          L     DB10.DBD   16
          T     MD   200
          UD    
          U     <>0
          FP    M     25.0
          S     A      4.7

    Beispiel dazu:

    1) DB10.DBX16.4 wird 1 --> A4.7 erhält den Status 1. Das klappt soweit!

    2) DB10.DBX16.4 bleibt 1 UND A4.7 wird rückgesetzt!

    3) DB10.DBX16.5 wird 1 --> A4.7 soll erneut den Status 1 erhalten. Das klappt aber nicht!


    Kann ich das Konstrukt irgendwie umbauen, dass der Ausgang (nach Rücksetzen) bei jeder neuen Störerfassung wieder gesetzt wird?
    LG
    spirit
    Zitieren Zitieren Störbits erkennen  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.712
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    Hallo Spirit,

    in deinem Codesnippet ist der Flankenmerker (M25.0) das Problem. Egal, was du mit dem Ausgang 4.7 machst - solange der DB10.DBX16.4 auf True ist bleibt der Flankenmerker auch True und somit würde das Aktiv werden eines weiteren Bits aus dem DBB16 nicht mehr registriert werden.
    Du müßtest das also vollkommen anders anfassen und dir zu deinem DBB den Vorgängerstand speichern und mit dem arbeiten.

    Gruß
    Larry

  3. #3
    Avatar von spirit
    spirit ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    12.09.2012
    Beiträge
    961
    Danke
    183
    Erhielt 23 Danke für 22 Beiträge

    Standard

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    Hallo Spirit,

    in deinem Codesnippet ist der Flankenmerker (M25.0) das Problem. Egal, was du mit dem Ausgang 4.7 machst - solange der DB10.DBX16.4 auf True ist bleibt der Flankenmerker auch True und somit würde das Aktiv werden eines weiteren Bits aus dem DBB16 nicht mehr registriert werden.
    Du müßtest das also vollkommen anders anfassen und dir zu deinem DBB den Vorgängerstand speichern und mit dem arbeiten.

    Gruß
    Larry
    Danke Larry,

    ja das hatte ich schon bemerkt - wollte euch nur den ganzen Code servieren ...

    Das Problem ist halt nur, ohne FM kann ich den Ausgang nicht rücksetzen.
    LG
    spirit

  4. #4
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.712
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    Naja ... du solltest dir ja auch die Logik vor dem FM mal ansehen ...

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

    solltest doch nochmal das hier lesen: Flankenauswertung in Step7
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  6. #6
    Avatar von spirit
    spirit ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    12.09.2012
    Beiträge
    961
    Danke
    183
    Erhielt 23 Danke für 22 Beiträge

    Standard

    Na oK,

    was meint ihr hierzu:

    Code:
          L     MD   200
          L     DB10.DBD   16
          <>D   
          S     A 4.7
    
          L     DB10.DBD   16
          L     MD   200
          INVI  
          UD    
          L     DB10.DBD   16
          T     MD   200
    
          L     DB10.DBD   16
          L     L#0
          ==D   
          R     A 4.7
    LG
    spirit

  7. #7
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.166
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Zitat Zitat von spirit Beitrag anzeigen
    1) DB10.DBX16.4 wird 1 --> A4.7 erhält den Status 1. Das klappt soweit!

    2) DB10.DBX16.4 bleibt 1 UND A4.7 wird rückgesetzt!

    3) DB10.DBX16.5 wird 1 --> A4.7 soll erneut den Status 1 erhalten.
    Also bei mir funktioniert Dein Code genau so wie von Dir gewünscht.
    Die Flankenerkennung "FP M25.0" ist zwar unnötig, stört aber auch nicht. Das UD ergibt schon 1-Bits, welche nur 1 Zyklus lang 1 sind: Nur wenn ein 1-Bit in DB10.DBD16 auftaucht, welches im Zyklus vorher 0 war, dann ergibt das UD einen Wert <>0.

    Beschreibt eine andere Programmstelle Deine beteiligten Variablen?
    Sind die Anweisungen vor Deinem Code VKE-Begrenzend? Schreibe mal "sicherheitshalber" vor die erste Anweisung ein einzelnes CLR oder SET.

    Code:
          CLR                               // sicherheitshalber VKE begrenzen
    
          L     MD   200                    // Zustand der Störbits "vorher"
          INVD
          L     DB10.DBD   16               // Störbits aktuell
          T     MD   200                    // Zustand der Störbits "vorher"
          UD
          U     <>0
    //      FP    M     25.0                  // ist unnötig, stört aber auch nicht
          S     A      4.7
    
    
          U     M     26.0                  // Quittiertaster
          R     A      4.7
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  8. #8
    Avatar von spirit
    spirit ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    12.09.2012
    Beiträge
    961
    Danke
    183
    Erhielt 23 Danke für 22 Beiträge

    Standard

    Zitat Zitat von PN/DP Beitrag anzeigen
    Also bei mir funktioniert Dein Code genau so wie von Dir gewünscht.


    Code:
          L     MD   200                   
          INVD
          L     DB10.DBD   16               
          T     MD   200                    
          UD
          U     <>0
          S     A      4.7
    
          U     M     26.0                  
          R     A      4.7
    Harald

    WOW - ist ja immer interessant, dass andere mit meinem Code besser umgehen können, als ich selber ...

    Habe nun vor diesem Netzwerk noch etwas geändert und nun klappt es erst einmal!


    Da es ja auch noch weitere DBD's gibt, wollte ich das Ganze jetzt mal schön in eine kompakte Schleife packen - ist mir aber noch nicht ganz gelungen; bin soweit gekommen:


    Code:
             AUF   "DB10"
    
             L     P#16.0                     
             T     #pointer_1
    
             L     4                           
    Next: T     #zaehler
    
            L     DBD [#pointer_1]
            L     L#0
            ==D                               
            SPB   Null                       
    
            L     MD   200
            INVD  
            L     DBD [#pointer_1]           
            T     MD   200                    
            UD    
            U     <>0
            S     A 4.7
    
    Null:  NOP   0
            L     #pointer_1
            L     P#4.0
            +D                                
            T     #pointer_1
            L     #zaehler
            LOOP  Next
    
         U   M  26.0                  // Quittiertaster
         R   A  4.7


    Das Problem ist nun noch, dass der Ausgang nicht rückgesetzt wird, sobald alle Störbits gleich Null sind.

    Könnte ich das in obigen Code irgendwie integrieren?
    LG
    spirit

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

    Standard

    Dann müßte dein MD200 durch ein DBD[#Pointer_2] ersetzt werden, dass über einen #Pointer_2 adressiert wird, denn der Zwischenspeicher des "alten Standes" kann ja nicht in jeder Schleife das selbe MD200 sein!
    Also mußt du (am Besten am selben DB) noch ein paar DBD anhängen, und darin den "alten Stand" speichern. Diesen #Pointer_2 addierst du dann genauso auf, wie du das mit #Pointer_1 machst, nur die Anfangsadresse ist natürlich eine andere.
    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

  10. #10
    Avatar von spirit
    spirit ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    12.09.2012
    Beiträge
    961
    Danke
    183
    Erhielt 23 Danke für 22 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Ralle Beitrag anzeigen
    Dann müßte dein MD200 durch ein DBD[#Pointer_2] ersetzt werden, dass über einen #Pointer_2 adressiert wird, denn der Zwischenspeicher des "alten Standes" kann ja nicht in jeder Schleife das selbe MD200 sein!
    Also mußt du (am Besten am selben DB) noch ein paar DBD anhängen, und darin den "alten Stand" speichern. Diesen #Pointer_2 addierst du dann genauso auf, wie du das mit #Pointer_1 machst, nur die Anfangsadresse ist natürlich eine andere.
    Vielen Dank Ralle!

    ... mit noch ein paar DBD anhängen verstehe ich so, dass ich z.B. den DB10.DBD20, DB10.DBD24 und DB10.DBD28 im DB10 anhängen soll?

    Und dann den MD200 einfach durch den #pointer_2 ersetzen?
    LG
    spirit

Ähnliche Themen

  1. \r\n erkennen
    Von skywalker79 im Forum CODESYS und IEC61131
    Antworten: 3
    Letzter Beitrag: 26.09.2012, 07:54
  2. Berührung TP erkennen
    Von Harry im Forum HMI
    Antworten: 8
    Letzter Beitrag: 05.08.2009, 12:34
  3. Spannungsausfall erkennen
    Von baalrok im Forum Simatic
    Antworten: 87
    Letzter Beitrag: 20.08.2008, 21:54
  4. Bildänderung erkennen
    Von costa im Forum PC- und Netzwerktechnik
    Antworten: 3
    Letzter Beitrag: 17.04.2007, 12:42
  5. Palette erkennen
    Von Zimbo30 im Forum Programmierstrategien
    Antworten: 33
    Letzter Beitrag: 19.03.2007, 20:01

Lesezeichen

Berechtigungen

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