Schornsteiner
Level-1
- Beiträge
- 6
- Reaktionspunkte
- 0
-> Hier kostenlos registrieren
Hallo erstmal,
nun muss ich nach 3 Jahren stillen mitlesen doch einmal einen Beitrag verfassen.
Ich hab folgendes Problem ich versuche in SCL einen Alarmbaustein zu schreiben, und der funktioniert auch einwandfrei solange ich ihn nur einmal aufrufe.
Nur sobald ich ihn öfter verwende scheint es als würde er jedes mal wenn er aufgerufen wird jeden anderen Alarm in meinem Melde-DB rücksetzen wobei ich mir nicht erklären kann warum.
Meinem Baustein übergebe ich natürlich den Störeingang (+ Zustand separat), ein Array für die Meldetrigger (DB101.DBX0.0), ein Array für die Quittiervariablen der PLC (DB101.DBX250.0) und ein Array mit dem ich auch den Zustand der Quittiervariable der HMI sehen kann (DB101.DBX500.0). Zusätzlich eine Melde-ID (mitdessen Hilfe ich den jeweiligen Alarm in meinem Array anspreche) und einen externen Quittiereingang.
Kann mir jemand sagen wo da mein großer Denkfehler ist?
Wenn ich den Baustein nur einmal verwende arbeitet er genauso wie er soll (zumindest wirkt es so).
Sobald ich ihn aber öfter verwende (ja unterschiedliche Melde-ID's, unterschiedliche Instanzen, alles 3-mal kontrolliert von der Beschaltung) wechseln sich die Alarme in meiner Meldeanzeige ab.
Das heißt ein Alarm kommt, geht, ein neuer kommt, der neue geht,...usw... und auch in meinem DB sehe ich eigentlich nur den Zustand des Alarms an der Stelle der letzten Melde-ID die ich verwende.
Beste Grüße Schornie
nun muss ich nach 3 Jahren stillen mitlesen doch einmal einen Beitrag verfassen.
Ich hab folgendes Problem ich versuche in SCL einen Alarmbaustein zu schreiben, und der funktioniert auch einwandfrei solange ich ihn nur einmal aufrufe.
Nur sobald ich ihn öfter verwende scheint es als würde er jedes mal wenn er aufgerufen wird jeden anderen Alarm in meinem Melde-DB rücksetzen wobei ich mir nicht erklären kann warum.
Meinem Baustein übergebe ich natürlich den Störeingang (+ Zustand separat), ein Array für die Meldetrigger (DB101.DBX0.0), ein Array für die Quittiervariablen der PLC (DB101.DBX250.0) und ein Array mit dem ich auch den Zustand der Quittiervariable der HMI sehen kann (DB101.DBX500.0). Zusätzlich eine Melde-ID (mitdessen Hilfe ich den jeweiligen Alarm in meinem Array anspreche) und einen externen Quittiereingang.
IF #Zustand THEN //Nur für Anzeige
#Daten.Status.EIN := True;
#Daten.Status.AUS := False;
ELSE
#Daten.Status.EIN := FALSE;
#Daten.Status.AUS := true;
END_IF;
#pf := #Taktmerker AND NOT #fm; //für Verzögerung
#fm := #Taktmerker;
IF #Stoereingang AND NOT #Daten.Status.Stoerung THEN //neuer Alarm
IF #pf THEN
#i := #i + 1;
END_IF;
IF #i >= #Daten.Verz THEN
#Quitt_PLC[#"Melde-ID" - 1] := FALSE;
#StoerDB[#"Melde-ID" - 1] := True;
#Daten.Status.Stoerung := True;
#Daten.Status.Stoerung_unquittiert := True;
END_IF;
ELSE
#i := 0;
END_IF;
IF NOT #Stoereingang AND (NOT #Daten.Status.Stoerung_unquittiert OR NOT #Quitt_HMI_Array[#"Melde-ID"-1]) THEN
#StoerDB[#"Melde-ID" - 1] := false;
#Daten.Status.Stoerung := false;
#Daten.Status.Stoerung_unquittiert := false;
#Daten.Status.Stoerung_unquittiert := false;
END_IF;
IF #Quitt_Ext THEN
IF NOT #Stoereingang THEN
#Daten.Status.Stoerung := false;
END_IF;
#Daten.Status.Stoerung_unquittiert := false;
#Quitt_PLC[#"Melde-ID" - 1] := True;
END_IF;
Kann mir jemand sagen wo da mein großer Denkfehler ist?
Wenn ich den Baustein nur einmal verwende arbeitet er genauso wie er soll (zumindest wirkt es so).
Sobald ich ihn aber öfter verwende (ja unterschiedliche Melde-ID's, unterschiedliche Instanzen, alles 3-mal kontrolliert von der Beschaltung) wechseln sich die Alarme in meiner Meldeanzeige ab.
Das heißt ein Alarm kommt, geht, ein neuer kommt, der neue geht,...usw... und auch in meinem DB sehe ich eigentlich nur den Zustand des Alarms an der Stelle der letzten Melde-ID die ich verwende.
Beste Grüße Schornie
Zuletzt bearbeitet: