Flanke bei kommender Sammelstörung

norman

Level-1
Beiträge
20
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,

ich brauch mal wieder eure Hilfe.
Ich haben einen Datenbaustein für Störmeldungen deklariert.
Alle Einzelmeldungen laufen in diesem Zusammen.

1. Jetzt brauch in einen Baustein, der selbstständig die Länge des DB ermittelt, und mir ausgibt ob eine Anlagenstörung ansteht.

2. Bei jeder kommenden Störung benötige ich eine Flanke, mit der ich dann einen Zähler und eine Hupe ansteuern kann.

Punkt 1. Habe ich so umgesetzt

VAR_INPUT
END_VAR
VAR_OUTPUT
Sammelstoerung : BOOL ;
END_VAR
VAR_IN_OUT
END_VAR
VAR_TEMP
SCHLEIFENZ : INT ;
END_VAR
BEGIN
NETWORK
TITLE =



AUF DB 50;
L DBLG;
+ -1;
LP: T #SCHLEIFENZ;
L #SCHLEIFENZ;
SLD 3;
LAR1 ;
L DBB [AR1,P#0.0];
L 0;
<>I ;
SPB STOE;
L #SCHLEIFENZ;
LOOP LP;
SET ;
R #Sammelstoerung;
SPA M001;
STOE: SET ;
S #Sammelstoerung;


Nur wie bekomme ich jetzt mit wenn eine 2 Störung hinzukommt?


Danke
 
Hallo!

Hast du von deinem Störmeldungsbyte in den DB noch ein Bit frei oder kannst du das Byte auf ein Word erweitern?
Dann könntest du die Schleife immer ganz durchlaufen lassen und wenn dein Vergleicher ungleich Null ist und das eine Bit false ist Zählst du eins weiter in deinem Zähler. Danach setzt du gleich das zusätzliche Bit somit weißt du dann in dem nächsten Zyklus das diese Störmeldung schon gezählt wurde.
Wie werden die Störungen Quittiert? Muss jede einzeln Quittiert werden oder gibt es da eine Sammelstörungsquittierung?

godi
 
Störung

Hi,
mach eine Int Variable(Strg_count); du durchsuchst dein Störungs DB, und
wenn da eine Störung anliegt, zählst + 1. Danach hast du die Anzahl
der anliegende Störungen; wenn die Variable >0, dann Samelstörung.
So, die Variable auf Änderung überwachen(aber nur Hochlauf!), und eine
Flanke daraus bilden.

Vladi
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich hab das bis jetzt immer in der Recourcenfressende Version gemacht.

In DB1 werden die Störungen hinterlegt
Also DB1.DBX0.0 Störung 0 DB1.DBX0.1 Störung 1

In DB2 werden die bearbeiteten Störungen Hinterlegt

Jetzt wird Wort für Wort vergleichen
Also

Code:
      L     DB1.DBD    0
      L     DB2.DBD    0
      <>R   
      S     M      0.0
      L     DB1.DBD    4
      L     DB2.DBD    4
      <>R   
      S     M      0.0
usw.

Danach Kopierst du den inhalt der Wörder von DB1 in DB2
z.B. mit SFC 20

M0.0 ist hier jetzt dein Blinkbit zurücksetzen mit Quittiertaste z.B.

Wie du die DB länge ermittelst und automatisch DB2 generierst weiss ich nicht. Ich mach das mit Excel und da weiss es natürlich wie lange DB1 ist generiert DB2 und natürlich gleich die dazugehörigen FBs

mfG René

mFG René
 
Zuletzt bearbeitet:
Hallo Godi,

es gibt eine Sammelquittierung.

aus dem Byte kann ich leider kein Word machen.

Hast du noch eine andere Idee?

Könnte vielleicht automatisch einen 2. DB anlegen in dem ich den Status ablegen, hab aber leider keine Ahnung wie das geht.

Gruß Norman
 
Kann offensichtlich nicht ganz folgen, weil:
man braucht eine Schleife die DW-weise

ungefähr so durchlaufen wird.

L ALTWERT //DW
L ISTWERT //DW
XOD
L ISTWERT //DW
UD //Wenn positive Flanke.... steht hier was drinnen
L 0
<>D
S Alarm
ZV Alarmzähler

L ISTWERT
T ALTWERT

Sollte ich eine Themaverfehlung haben, sry für das posting!
Anm.: der Zähler zählt nur 1x sollte innerhalb eines Zyklus im selben Doppelwort mehrer Alarme kommen.

Edit: der Altwert ist natürlich ein 2ter DB
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Sorry, vielleicht hab ich mich falsch ausgedrückt.

Ich benötige eine Flanke bei kommender Störung.
Steht eine Sammelstörung an, und es kommt eine Störung hinzu,
dann benötige ich eine weitere Flanke.

Kommen in einem Zyklus 2 Störungen gleichzeitig, reicht mir eine Flanke.

Mit dieser Flanke muss ich dann eine Hupe Ansteuern und einen Impuls auf einen Zähler geben.
 
Ich benötige eine Flanke bei kommender Störung.
Steht eine Sammelstörung an, und es kommt eine Störung hinzu,
dann benötige ich eine weitere Flanke.

Kommen in einem Zyklus 2 Störungen gleichzeitig, reicht mir eine Flanke.

Die Flanke ist ja dein geringstes Problem.
Dein Problem ist offensichtlich das du automatisch ermitteln willst wie lange dein Alarm-DB ist.

Alles andere ist ja gelöst.

mfG René
 
Nein das lese ich ja hier aus,
mein Problem ist das ich bei jeder kommenden Störung eine Flanke bilden muss.

AUF DB 50;
L DBLG;
+ -1;
LP: T #SCHLEIFENZ;


Die Variante von Vladi ist glaube ich ganz gut.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nein das lese ich ja hier aus,
mein Problem ist das ich bei jeder kommenden Störung eine Flanke bilden muss.


Dann mach das doch, setz den Störungsmerker am Ende zurück, gleiche die DB inhalte ab. Und vergleiche wieder auf änderung im nächsten Zyklus.

Damit hättest du alle neuen Alarme pro Zyklus erschlagen. Mehrere Alarme in einem Zyklus einzeln zu erkennen wird kniffliger.

mfG René
 
Hallo,

jetzt hab ich gerade irgend wie ein kleines Problem bei der Umsetzung.

Bekomm es nicht so richtig auf die Reihe, Pointer und Schleifen sind nicht ganz meine Stärke
 
Hallo!

L Neuwert
L Altwert
INVI
UW
L 0
<>I
= PositiveFlanke

L Neuwert
T Altwert

Schleife drüber, fertig. Brauchst einen zus. DB für Altwerte.

Gruß
Flinn
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
so ganz tut's der Voprschlag von Flinn noch nicht ...
Es sollen ja nur die hinzukommenden Störungen erfasst werden.
Aber im Grundsatz geht es nur so. Du musst deinen Störungs-DB quasi spiegeln und immer die Störungen aktuell mit den bereits gemeldeten vergleichen. Das würde ich so machen :

Code:
L Neuwert
L Altwert
OW
L Neuwert
<>I
spbn X001

S Fehler_Flanke

L Neuwert
T Altwert

L Fehler_Zähler
L 1
+I
T Fehler_Zähler

X001: nop 0

oder so ...
und selbsteständlich die schon erwähnte Schleife darüber legen ...
 
Hallo,
so ganz tut's der Voprschlag von Flinn noch nicht ...
Es sollen ja nur die hinzukommenden Störungen erfasst werden.
Aber im Grundsatz geht es nur so. Du musst deinen Störungs-DB quasi spiegeln und immer die Störungen aktuell mit den bereits gemeldeten vergleichen. Das würde ich so machen :

Code:
L Neuwert
L Altwert
OW
L Neuwert
<>I
spbn X001
 
S Fehler_Flanke
 
L Neuwert
T Altwert
 
L Fehler_Zähler
L 1
+I
T Fehler_Zähler
 
X001: nop 0

oder so ...
und selbsteständlich die schon erwähnte Schleife darüber legen ...

Hallo,
warum tuts der nicht? Die Flanke kommt doch nur bei neuen Störungen, oder???? Oder habe ich die Aufgabe nicht geschnallt? Übrigens ist die Variante (von borromeus) mit XOD genauso gut; soweit hatte ich noch nicht gelesen.

Gruß
Flinn
 
... und was ist mit den gehenden Störungen ... sollen die auch jedes Mal eine Meldung auslösen ?
Das würde nämlich bei der INV1 oder XOR Variante passieren ...

Nichts für ungut ...
 
... und was ist mit den gehenden Störungen ... sollen die auch jedes Mal eine Meldung auslösen ?
Das würde nämlich bei der INV1 oder XOR Variante passieren ...

Nichts für ungut ...

Nichts für ungut, daher weitere Bespiele:

L Neuwert
L Altwert
INVD
UD
L 0
<>D
= PositiveFlanke

L Neuwert
INVD
L Altwert
UD
L 0
<>D
= NegativeFlanke

L Neuwert
T Altwert

Jetzt alles klar??

Gruß
Flinn
 
Zuletzt bearbeitet:
Zurück
Oben