Fehlermeldungen per Blinklicht ausgeben

Thomas4281

Level-2
Beiträge
13
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich habe eine PLC wo ich kein separates Display anschließen möchte, wie haben eine Meldeleuchte das eine Störung bzw. Fehler vorhanden ist. Nun möchte ich es etwas Support freundlicher machen und wenn ein Fehler anliegt als Blinkcode herausgeben.

erstmal nur die Einfachen Fehler wie Sicherungen, Motorschutzschalter, Frequenzumrichter gestört. halt einfache Sachen.

Irgendwie So:
2x Blinken Sicherungen
3x Blinken Motorschutz
4x Blinken FU
dann pause und wieder von vorn

Wer hat da vielleicht noch einen Lösungsansatz

Gruß
Thomas
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Du könntest dir einen Baustein bauen mit
  • IN für die Anzahl Blinken.
  • IN für alarm aktiv
  • IN/OUT der einen CaseIndex anzeigt, wobei der Baustein beim beenden des Blinkvorgangs den Caseindex incrementiert.
In einem Array legst du eine struktur ab, mit
  • Bool Alarm aktiv
  • Int Anzahl Blinkvorgänge
  • string Typ des Alarms (optional)
 
Irgendwie So:
2x Blinken Sicherungen
3x Blinken Motorschutz
4x Blinken FU
In die 3 Fälle wäre es besser wenn der Anwender den Schranktür aufmacht und schaut welchen Gerät ausgefallen ist.
Das muss er ja sowiso um die Sicherungen oder MSS zu rückstellen, bzw. die FU quittieren.
Auf die FU gibt es vermutlich ein Display mit bessere Fehlermeldung als nur 'es gibt eine Störung bei der FU'.

edit: Ich sehe relativ oft dass es gibt eine Störmeldelampe auf die Schaltschränke, um zu melden es gibt eine Störung in die Schrank. Um die eigentliche Störursache zu erkennen muss man halt die Tür aufmachen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
So können aber schonmal die Bediener sehen was es sein kann.
Aber man könnte ja auch andere Fehler damit anzeigen lassen sind ja nur erstmal einfache dinge.
Ich weiß nicht ob der FU ein Display hat bzw. mit ausgeliefert wird. Vielleicht bleibt das Display ja auch nur den Service personal vorbehalten.
 
So können aber schonmal die Bediener sehen was es sein kann.
Näh. Die Code sagt nur es gibt eine Sicherung oder ein MSS, oder irgendein Fehler bei die FU.
Ohne dies näher zu untersuchen (die Tür aufmachen) ist es nicht vieles wert.

Aber man könnte ja auch andere Fehler damit anzeigen lassen sind ja nur erstmal einfache dinge.
Wenn es komplizierter wird, dann wird die Blink Code auch komplizierter.
Wenn es handelt um die kosten niedrig zu halten, dann überleg die Fehlermeldungen in eine Webseite darzustellen, wenn die SPS dies unterstützt.
 
Ich verwende für die "erste" Signalisation bei Altanlagen meist die Betriebsleuchte z.B. Antrieb Ein für die Signalisierung.
Dauerleuchten Ein, langsam blinken Anlauf oder Freigabe, schnell blinken Störung...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Näh. Die Code sagt nur es gibt eine Sicherung oder ein MSS, oder irgendein Fehler bei die FU.
Ohne dies näher zu untersuchen (die Tür aufmachen) ist es nicht vieles wert.


Wenn es komplizierter wird, dann wird die Blink Code auch komplizierter.
Wenn es handelt um die kosten niedrig zu halten, dann überleg die Fehlermeldungen in eine Webseite darzustellen, wenn die SPS dies unterstützt.
Darf eine nicht Elektrisch befähigte Person an eine elektrische Anlage herumfummeln?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
So kann also der Laie schonmal sagen was da Sache ist und wenn man Support per telefon hat kann man halt schon damit auch was anfangen bzw. ersatz rausschicken. wenn der Blinkcode nun nicht gerade Sicherung oder Motorschutz ist.
 
In Anlehnung an folgenden Forumsbeitrag https://www.sps-forum.de/threads/blinklicht-scl.113779/
hier eine abgewandelte Version:
Code:
FUNCTION_BLOCK "BlinkSeq_FB"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
   VAR_INPUT
      FU: Bool;
      MSS: Bool;
      LS: Bool;
   END_VAR

   VAR_OUTPUT
      Lampe : Bool;
   END_VAR

   VAR
      Seq : Array[0..9] of Time;
      SeqMax : Int;
      TP_Pulse : TP_TIME;
      Pulse : Bool;
      Step : Int;
   END_VAR


BEGIN
    IF #Step = 0 THEN //Werte nur übernehmen, wenn die Sequenz neu startet
        IF #FU THEN
            #Seq[0] := t#1s;
            #Seq[1] := t#500ms;
            #Seq[2] := t#1s;
            #Seq[3] := t#500ms;
            #Seq[4] := t#1s;
            #Seq[5] := t#500ms;
            #Seq[6] := t#1s;
            #Seq[7] := t#3s;
            #SeqMax := 7;
        ELSIF #MSS THEN
            #Seq[0] := t#1s;
            #Seq[1] := t#500ms;
            #Seq[2] := t#1s;
            #Seq[3] := t#500ms;
            #Seq[4] := t#1s;
            #Seq[5] := t#3s;
            #SeqMax := 5;
        ELSIF #LS THEN
            #Seq[0] := t#1s;
            #Seq[1] := t#500ms;
            #Seq[2] := t#1s;
            #Seq[3] := t#3s;
            #SeqMax := 3;
        ELSE
            #SeqMax := 0;
        END_IF;
    END_IF;
 
    //Pulse erzeugen
    #TP_Pulse(IN := NOT #Pulse,
              PT := #Seq[#Step],
              Q => #Pulse);
 
    //Wenn Puls zu Ende gehe in den nächsten Schritt
    IF (NOT #Pulse) THEN
        #Step += 1;
    END_IF;
 
    //Wenn Maximum erreicht, dann von vorne
    IF #Step > #SeqMax THEN
        #Step := 0;
    END_IF;
 
    //Lampe nur in den geraden Schritten einschalten, daher Modulo mit 2 auf 0 abgefragt.
    #Lampe := #Pulse AND #Step MOD 2 = 0 AND (#FU OR #MSS OR #LS);
END_FUNCTION_BLOCK
 
So kann also der Laie schonmal sagen was da Sache ist und wenn man Support per telefon hat kann man halt schon damit auch was anfangen bzw. ersatz rausschicken. wenn der Blinkcode nun nicht gerade Sicherung oder Motorschutz ist.
Von der Idee mit dem Blinklicht bin ich nicht überzeugt, in unserem falle würden Bediener es bei weitem nicht auf die reihe bringen sich die mühe zu geben um einen blinkcode auszuwerten, der griff zum telefon ist wesentlicher verbreiteter bei uns
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Von der Idee mit dem Blinklicht bin ich nicht überzeugt, in unserem falle würden Bediener es bei weitem nicht auf die reihe bringen sich die mühe zu geben um einen blinkcode auszuwerten, der griff zum telefon ist wesentlicher verbreiteter bei uns
Der Support wird aber bestimmt nach den Blinkcode fragen um zu reagieren
 
Code:
FUNCTION_BLOCK "fbBlinkCode"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
   VAR_INPUT
      iAnzBlink : Int;
      bAktiv : Bool;
      bTakt : Bool;
   END_VAR

   VAR_OUTPUT
      bBlink : Bool;
   END_VAR

   VAR_IN_OUT
      iCaseIndex : Int;
   END_VAR

   VAR
      bTakten : Bool;
      iAnzahlLauft : Int;
      tonPause {InstructionName := 'TON_TIME'; LibVersion := '1.0'} : TON_TIME;
      iCaseIndexSave : Int;
      bTrigger : Bool;
      rtrigBlink {InstructionName := 'R_TRIG'; LibVersion := '1.0'} : R_TRIG;
      rtrigAktiv {InstructionName := 'R_TRIG'; LibVersion := '1.0'} : R_TRIG;
   END_VAR


BEGIN
 

#rtrigAktiv(CLK := #bAktiv AND NOT #bTrigger);

IF #rtrigAktiv.Q THEN // Alarmtyp aktiv. definierte Anzahl Pulse laden. Und Erkennungstrigger setzen.
    #iAnzahlLauft := #iAnzBlink;
    #bTrigger := true;
END_IF;

#bBlink := #iAnzahlLauft > 0 AND #bTakt;
#rtrigBlink(CLK := NOT #bTakt);

IF #rtrigBlink.Q THEN // Nach jedem Blinktrue von der Anzahl subtrahieren.
    #iAnzahlLauft -= 1;
END_IF;

#tonPause(IN := #iAnzahlLauft <= 0,
          PT := t#3s); // Pausezeit zwischen Fehlercodes



IF NOT #bAktiv THEN // Wenn Alarmtyp nicht aktiv dann direkt zum nächsten Typen weiterspringen
    #iCaseIndex += 1;
    #bTrigger := false;
ELSIF #tonPause.Q AND #rtrigBlink.Q THEN // Nach Pausezeit zwischen Fehlercodes Takt abwarten und weiterspringen
    #iCaseIndex += 1;
    #bTrigger := false; // Erkennungstrigger zurücksetzen um neuen Alarmtyp im nächsten Aufruf zu erkennen.
END_IF;
 
 
     
 
END_FUNCTION_BLOCK

DATA_BLOCK "fbBlinkCode_DB"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
NON_RETAIN
"fbBlinkCode"

BEGIN

END_DATA_BLOCK

DATA_BLOCK "Datenbaustein_1"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
NON_RETAIN
   VAR
      Fehler : Array[0..20] of Struct
         iAnzBlink : Int;
         bAktiv : Bool;
         Fehlertext : String;
      END_STRUCT;
   END_VAR


BEGIN
   Fehler[0].iAnzBlink := 3;
   Fehler[0].Fehlertext := 'Sicherung';
   Fehler[1].iAnzBlink := 6;
   Fehler[1].bAktiv := true;
   Fehler[1].Fehlertext := 'Schalter';
   Fehler[2].iAnzBlink := 2;
   Fehler[3].iAnzBlink := 15;

END_DATA_BLOCK

ORGANIZATION_BLOCK "Main_1"
TITLE = "Main Program Sweep (Cycle)"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1

BEGIN
    "fbBlinkCode_DB"(iAnzBlink  := "Datenbaustein_1".Fehler["iIndex"].iAnzBlink,
                     bAktiv     := "Datenbaustein_1".Fehler["iIndex"].bAktiv,
                     bTakt:="Clock_1Hz",
                     bBlink     => "Ausgang",
                     iCaseIndex := "iIndex");
 
    IF "iIndex" > 20 THEN
        "iIndex" := 0;
    END_IF;
 
 
END_ORGANIZATION_BLOCK

Rein interessehalber habe ich mal da was quick und dirty zusammengebastelt. das So als Gedankengang wie man die einzelnen Fehlergruppen einfach in einem DB ablegen könnte und Durchiterieren kann.

Den Codeteil im OB könnte man jetzt sinnigerweise auch in einen FB packen und z.B. das Definitionsarray aus dem DB direkt zu übergeben. Länge abzufragen und somit das ganze komfortabel aufzurufen. Dann hätte man am Schluss einen FB mit nur einem Eingang fürs Array und einem für den Takt (den man auch im Baustein generieren könnte). Das kann man so immer weitertreiben. Z.B. könnte man statt Text auch noch eine Zahl ausgeben die in der Zeit der Blinkcodeausgabe angezeigt wird. Und so weiter.
Es macht manchmal Sinn sich ein nettes Gerüst zu bauen für weitergehende Modifikationen.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Der Support wird aber bestimmt nach den Blinkcode fragen um zu reagieren
mir geht es ja nicht darum ob der support einen blink Code auslesen kann, erfahrungsgemäss entstehen bei uns die Probleme bei den Bedienern.
Da wird einfachstes falsch ausgelesen, unverständlich ausgedrückt beim kontaktieren vom support.....

Nimmst du eine BCD Anzeige wird dir eine klare Zahl ausgegeben. Werden Fehler auf einer Website dargestellt siehts auch der Support ein etc.
 
mir geht es ja nicht darum ob der support einen blink Code auslesen kann, erfahrungsgemäss entstehen bei uns die Probleme bei den Bedienern.
Da wird einfachstes falsch ausgelesen, unverständlich ausgedrückt beim kontaktieren vom support.....

Nimmst du eine BCD Anzeige wird dir eine klare Zahl ausgegeben. Werden Fehler auf einer Website dargestellt siehts auch der Support ein etc.
Gut das man solche Sachen Diskutieren kann , an die bcd-Anzeige hab ich nun noch nicht gedacht. wäre zwar ein Loch mehr in der Tür aber es wäre eindeutiger.
 
Gut das man solche Sachen Diskutieren kann , an die bcd-Anzeige hab ich nun noch nicht gedacht. wäre zwar ein Loch mehr in der Tür aber es wäre eindeutiger.
Ich finde BCD Anzeigen recht ungewohnt an Anlagen, jedoch hat es sich bei kleineren Pressen oder Justierstationen gut bewährt und Zeitaufwände minimiert.
 
Zurück
Oben