Problem beim "durchtakten" eines Fehlermeldungswortes

Daimonion

Level-1
Beiträge
79
Reaktionspunkte
2
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
 
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
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
Zuletzt bearbeitet:
Für die Funktion fehlt mir da die Phantasie....:confused:

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
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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?
 
Hi,

Code:
      L     MD    20
      L     MD    24
      [COLOR=Red]wand[/COLOR]
      T     MD    28

Das sagt der Editor dazu. :)

Richtig wäre UD (Doppelword AND).

Gruss Daniel
 
Hi,

Code:
      L     MD    20
      L     MD    24
      [COLOR=red]wand[/COLOR]
      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.... :D
 
Hallo und vielen Dank erst mal für die Beteiligung.

Ich hab nun mal ein paar Screenshots von den Netzwerken gemacht, die daran beteiligt sind. Sie hängen unten an.

Aufgrund der gegebenen Infos find ich Borromeus Idee mit der fehlenden Flanke eigentlich interessant, aber ich glaube nicht, dass es das ist.

Das mit dem Wand ist wiederum ne lustige GEschichte, denn ich nutze natürlich die binäre Und Funktion schon. ;) Siehe Netzwerk 6 Bild "Rotation..." Nur, wie schon richtig bemerkt wurde, heißt diese in AWL UD.

So, anbei nochmal die Bilder. Bitte lasst euch nicht von dem Code verwirren, denn da ist noch eine Ausblenddauer dabei, die die reellen Ausgänge für eine Zeit X auf 0 schaltet.
Das Problem hab ich nicht an dem Ausgangswort beobachtet sondern an der Zwischenvariable #sAlarmAnzeige, die ja immer den jeweiligen Status enthält.

Noch eine kurze Zwischenfrage. Kann ich den Ablauf auch irgendwie simulieren? Die Anlage steht ein paar Kilometer weg und bevor ich da wieder hin fahre wollte ich eine potentielle Lösung testen.
 

Anhänge

  • Timer.png
    Timer.png
    11,7 KB · Aufrufe: 34
  • Setze 1 wenn 0.png
    Setze 1 wenn 0.png
    5,4 KB · Aufrufe: 33
  • Rotation_Anzeige.png
    Rotation_Anzeige.png
    17 KB · Aufrufe: 33
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

doch Borromeus hat vollkommen recht mit der Flanke. Programme kannst Du mit PLC-Sim testen.
PLC-Sim ist in den Professional Version von Step 7 enthalten oder man kann es optional kaufen.

Gruss Daniel
 
Dann würde es doch im einfachsten Falle reichen, wenn ich das Netzwerk mit den Timern hinter das Netzwerk mit der Rotation mache, oder?

Ich muss mal schauen, welches Paket in unserer Firma vorhanden ist. Das Step-7 wurde mir mittels NetInstall draufgebügelt...
PLCSim wäre natürlich schon cool.
 
Die Netzwerke zu tauschen wird nichts bringen....
Im Netzwerk 4 gehört der unterste Ast (der dritte) vor den ersten.
Das macht, dass zuerst der sHMAnzeigefehler abgesteuert wird und dann der Timer120 abgesteuert wird .

Ist das klar?
Dein Problem ist, dass der T120 angesteuert ist... ein paar Befehle später nimmst Du den sHMAnzeigefehler weg im Netzwerk 6 wird er aber wieder gesetzt und im nächsten Zylus Netzwerk 4 kriegt der T120 die Änderung nicht mit- deswegen ist das netzwerktauschen auch sinnlos, weil auch hier der T120 nicht abgesteuert werden würde.

lG
Karl
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Okay, soweit ist mir das klar. Werde ich mal so ändern, wie du es beschrieben hast.

Wobei bei mir aber noch die Frage aufkommt, wieso der T120 die Ursache dafür sein soll, dass der angezeigte Fehler nicht weiter wandert. Der wird ja in Netzwerk 6 unabhängig vom Timer verarbeitet. Der Timer steuert ja nur die Ausgabe. Für meine Betrachtungen hab ich die Werte in sAnzeigeFehler herangezogen.

Beachte bitte, wenn in dem Fehlerwort mehrere Fehler mindestens 2 Bits auseinander sind, funktioniert die Anzeige wie gewünscht.

Danke erst mal für die Antwort. Ich werde es morgen gleich mal probieren. Wenn wir im Unternehmen kein PLCSim haben (was ich mir eigentlich nicht vorstellen kann) dann werd ich mir irgendwo ne CPU krallen.
 
Okay, soweit ist mir das klar. Werde ich mal so ändern, wie du es beschrieben hast.

Wobei bei mir aber noch die Frage aufkommt, wieso der T120 die Ursache dafür sein soll, dass der angezeigte Fehler nicht weiter wandert. Der wird ja in Netzwerk 6 unabhängig vom Timer verarbeitet. Der Timer steuert ja nur die Ausgabe. Für meine Betrachtungen hab ich die Werte in sAnzeigeFehler herangezogen.

Beachte bitte, wenn in dem Fehlerwort mehrere Fehler mindestens 2 Bits auseinander sind, funktioniert die Anzeige wie gewünscht.

Danke erst mal für die Antwort. Ich werde es morgen gleich mal probieren. Wenn wir im Unternehmen kein PLCSim haben (was ich mir eigentlich nicht vorstellen kann) dann werd ich mir irgendwo ne CPU krallen.

"Wobei bei mir aber noch die Frage aufkommt"

ja das weiss ich auf die Gachen auch nicht.... aber es schaut eben danach aus....

ist wie bei einem Indizienprozess:
- die Timeransteuerung ist falsch
- Effekt tritt nur auf wenn 2 Bits hintereinander, wo die falsche Timeransteuerung zuschlägt

Vielleicht ist es eh ein Fehlurteil....
;-)
 
Na gut, ich werds morgen früh gleich mal testen. Vielleicht krieg ich heut noch ein PLCSim her, dann kann ich heute schon mal schauen.

Danke dir auf jeden Fall erst mal. Wem jedoch noch was auffällt, immer her damit.
 
Zurück
Oben