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

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 21

Thema: Problem beim "durchtakten" eines Fehlermeldungswortes

  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

    Bei einem SPS Projekt was ich hier vor mir habe, wird für jeden Alarm (Fehler), der auf dem System erscheint ein Bit in einem Doppelwort ausgegeben.

    Alarm1 A30.0
    Alarm2 A30.1
    .
    .
    .

    Es gibt 32 Alarmmeldungen, also ein Doppelwort AD30.
    Die Bedingung dabei ist, dass immer nur ein Alarm gerade aktiv ist. Nach einer Zeit X soll dann der nächste Alarm erscheinen, der aktiv ist.

    Nun hab ich diese Aufgabe soweit implementiert, dass ich mir eine rotierende Maske programmiert habe (DWORD mit 1), die mir zusammen mit einer binären Verknüpfung mit dem Quellwort immer nur den Alarm ausgibt, der gerade in der rotierenden Maske aktiv ist. Anbei mal die Codezeilen, die mir das realisieren:
    Code:
          L     DB120.DBD    2
          L     0
          ==D   
          SPB   TEnd
          U     #sHMAnzeigeFehler
          SPB   TEnd                        //starte Rotation der Anzeige wenn kein Fehler angezeigt wird
          L     #sAlarmNr
          RLD   1
          T     #sAlarmNr
          L     #sAlarmNr
          L     DB120.DBD    2
          UD                                //verknüpfe Rotation mit Fehleranzeige
          T     #sAlarmAnzeige
          L     #sAlarmAnzeige
          L     0
          ==D                               //Prüfe ob Fehlerbit gesetzt ist
          SPB   TEnd
          S     #sHMAnzeigeFehler           //wenn Fehlerbit gesetzt ist , dann starte die Anzeigetimer
    TEnd: NOP   0
    Zur Erläuterung:

    DB120.DBD2 ist das DWORD in dem sich die 32 möglichen Alarme befinden
    #sAlarmNr ist das DWORD in dem als Maske immer 1 Bit auf 1 ist.
    #sAlarmAnzeige ist dann die binäre Verknüpfung des Quellwortes und der Maske wo dann immer nur 1 Alarm aktiv ist.
    #sHMAnzeigeFehler startet die AnzeigeTimer die dann die Alarmmeldungen auf die Ausgänge schreiben...

    Soweit so gut. Das Prinzip funktioniert gut. Ich bekomme immer nur einen aktiven Alarm und die Meldungen rotieren durch. Wenn zum Beispiel das 5. und das 9. Bit auf 1 sind, also einen Alarm enthalten, dann wird für die Zeit X zuerst das 5. Bit ausgegeben und danach für die Zeit X das 9. Bit. Dann wieder das 5. usw. Der Code arbeitet pro Zyklus eine Rotation in der Maske ab und prüft dann ob das Ergebniswort #sAlarmAnzeige größer 0 ist. Wenn ja, dann muss der Alarm angezeigt werden. Wenn nicht wird im nächsten Zyklus die nächste Rotation geprüft. Wird ein Alarm gefunden so wird #sHMAnzeigeFehler gesetzt, der dann den Timer für die Anzeigedauer startet und nach Ablauf der Anzeigedauer von dieser wieder zurück gesetzt wird.

    Nun hab ich aber ein Problem. Wenn in dem Quellwort DB120.DBD2 zwei Bits nacheinander einen Alarm anzeigen, nehmen wir als Beispiel das Bit 9 und 10, dann funktioniert die Rotation nicht.
    Mein Wort wo die Alarme reingeschrieben werden, #sAlarmAnzeige, zeigt dann immer nur das 9. Bit an.
    Aus irgendwelchen Gründen wird das Rotationsbit entweder über das 10. Bit drüber geschoben oder es wird vorher gelöscht (durch was auch immer), so das der Suchlauf immer von vorn beginnt.

    Die Variablen sind statische Variablen in einem MultiinstanzFB.

    Ich hab schon den halben Tag damit verbracht die Ursache zu finden, aber ich komme nicht drauf. Ich hab auch schon anstatt der statischen DB Variablen globale Merker genommen, aber das funktioniert genau so wenig.
    Könnt ihr mir da einen Tipp geben, was da der Fehler sein kann?

    Solltet ihr noch Infos brauchen, dann gebt eine Info. Dann kann ich auch noch mehr Infos geben.

    Danke im Voraus und Grüße

    Daimonion
    Zitieren Zitieren Problem beim "durchtakten" eines Fehlermeldungswortes  

  2. #2
    Registriert seit
    17.05.2010
    Ort
    Paderborn
    Beiträge
    824
    Danke
    84
    Erhielt 125 Danke für 94 Beiträge

    Frage

    Hi,

    hast du schon mal daran gedacht, eine WORD-Addition dafür zu nutzen?

    z.B.:

    L MD20
    L L#0
    <>D
    SPB RUN

    // Initialisierung
    L L#1
    T MD 20 // Filter

    RUN: NOP 0

    L MD 10 // hier sind Deine Alarme 32 Bit
    L MD 20 // Dein Filter
    WAND
    T AD 30 // = nur das eine Bit was durch den Filter geht

    L MD20
    SLW 1 // Filter um ein Bit verschieben
    T MD20

    Grüße
    Michael
    Grüße
    Michael

    1001101110110100... Das ist meine Welt

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

    Standard

    Keine Ahnung, weil der Rest des Programmes nicht zu sehen ist, aber ich denke es liegt daran dass der "#sHMAnzeigeFehler" keine Flanke macht wenn zwei Bits hintereinander sind.
    Edit: ohne Flanke keine neue Zeit......das meine ich!


    Kannst Du das mal prüfen!

    lG
    Karl
    Geändert von borromeus (15.10.2010 um 17:28 Uhr)

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

    Standard

    Zitat Zitat von MCerv Beitrag anzeigen
    Hi,

    hast du schon mal daran gedacht, eine WORD-Addition dafür zu nutzen?
    Grüße
    Michael
    Für die Funktion fehlt mir da die Phantasie....

  5. #5
    Registriert seit
    17.05.2010
    Ort
    Paderborn
    Beiträge
    824
    Danke
    84
    Erhielt 125 Danke für 94 Beiträge

    Rotes Gesicht

    Zitat Zitat von borromeus Beitrag anzeigen
    Für die Funktion fehlt mir da die Phantasie....
    Kerativ sein! Ich hab den "WAND"-Befehl (WORD AND) auch lange ignoriert oder keine Anwendung dafür gehabt, jetzt nutze ich das z. B. bei unseren Anlage zur Überprüfung der ausgewählter Werkzeuge (16 bzw. 32 Möglichkeiten), manche Werkzeuge dürfen nicht mit anderen verwendet werden und manche schon!

    Einfach mal in S7-KOP/FUP/AWL-Editor in der Befehlsauswahl den WAND-Befehl suchen und mit F1 die Doku zum Befehl ansehen!

    Grüße
    Michael
    Grüße
    Michael

    1001101110110100... Das ist meine Welt

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

    Standard

    Zitat Zitat von MCerv Beitrag anzeigen
    Kerativ sein! Ich hab den "WAND"-Befehl (WORD AND) auch lange ignoriert oder keine Anwendung dafür gehabt, jetzt nutze ich das z. B. bei unseren Anlage zur Überprüfung der ausgewählter Werkzeuge (16 bzw. 32 Möglichkeiten), manche Werkzeuge dürfen nicht mit anderen verwendet werden und manche schon!

    Einfach mal in S7-KOP/FUP/AWL-Editor in der Befehlsauswahl den WAND-Befehl suchen und mit F1 die Doku zum Befehl ansehen!

    Grüße
    Michael
    Da ist aber kein WORD sondern ein DOUBLEWORD... wie soll das dann bei 32bit breite kreativ funktionieren?

  7. #7
    Registriert seit
    19.06.2005
    Ort
    in Bayern ganz oben
    Beiträge
    1.360
    Danke
    188
    Erhielt 372 Danke für 290 Beiträge

    Standard

    Hi,

    Code:
          L     MD    20
          L     MD    24
          wand
          T     MD    28
    Das sagt der Editor dazu.

    Richtig wäre UD (Doppelword AND).

    Gruss Daniel
    Erfahrung ist eine nützliche Sache. Leider macht man sie immer erst kurz nachdem man sie brauchte...

    OSCAT.lib Step 7

    Open Source Community for Automation Technolgy

    SPS-Forum Chat (Mibbit) | SPS-Forum Chat (MIRC)

  8. #8
    Registriert seit
    19.06.2005
    Ort
    in Bayern ganz oben
    Beiträge
    1.360
    Danke
    188
    Erhielt 372 Danke für 290 Beiträge

    Standard

    Oder in englisch AD.

    Gruss Daniel
    Erfahrung ist eine nützliche Sache. Leider macht man sie immer erst kurz nachdem man sie brauchte...

    OSCAT.lib Step 7

    Open Source Community for Automation Technolgy

    SPS-Forum Chat (Mibbit) | SPS-Forum Chat (MIRC)

  9. #9
    Registriert seit
    19.06.2005
    Ort
    in Bayern ganz oben
    Beiträge
    1.360
    Danke
    188
    Erhielt 372 Danke für 290 Beiträge

    Standard

    Hi Daimonion,

    wo wird #sHMAnzeigeFehler zurück gesetzt?
    Stell doch bitte mal den ganzen Code rein, auch das mit dem Timer.

    Gruss Daniel
    Erfahrung ist eine nützliche Sache. Leider macht man sie immer erst kurz nachdem man sie brauchte...

    OSCAT.lib Step 7

    Open Source Community for Automation Technolgy

    SPS-Forum Chat (Mibbit) | SPS-Forum Chat (MIRC)

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von dalbi Beitrag anzeigen
    Hi,

    Code:
          L     MD    20
          L     MD    24
          wand
          T     MD    28
    Das sagt der Editor dazu.

    Richtig wäre UD (Doppelword AND).

    Gruss Daniel
    Dass es wand gäbe, hätte mich auch gewundert, aber die Idee dahinter ist klar... hab sogar extra den Befehlssatz runtergeladen ob ich nicht doch was verpasst habe die letzten 20 Jahre....

Ähnliche Themen

  1. Variablen eines Datenblocks mit Merkern "verknüpfen"?
    Von FrankTheTank im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 25.10.2011, 15:45
  2. "Index Pulse", "Home Switch" und "Position Limit Switch"
    Von senmeis im Forum Antriebstechnik
    Antworten: 3
    Letzter Beitrag: 07.03.2011, 11:21
  3. Modicon-Quantum: Probleme beim Laden von "Interrup sections"
    Von Trajan im Forum Sonstige Steuerungen
    Antworten: 1
    Letzter Beitrag: 23.06.2009, 17:49
  4. Antworten: 2
    Letzter Beitrag: 22.12.2008, 13:20
  5. Antworten: 1
    Letzter Beitrag: 09.09.2004, 16:08

Lesezeichen

Berechtigungen

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