TIA Array of Bit durchgehen

litlegerman

Level-2
Beiträge
312
Reaktionspunkte
7
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
Ich habe folgendes Problem, ich habe ein Array off Bit [16] (AT_Bits[16]), hier möchte die Plätze die TRUE sind nacheinander für 3 Sekunden anzeigen.
Es geht hier konkret um eine Maschine mit 16 Not-Halt Schaltern, mit einem Digitalen Rückmelde-Kontakt, wenn einer oder mehrere Betätigt sind, sollen diese ,dem Bediener angezeigt werden (Kom HMI Funktionen".M008_Not_Aus.I_KanalMeldung).
Wenn alle aus sind, soll der Hinweis zum Not-Halt entsperren gegeben werden (Kom HMI Funktionen".M008_Not_Aus.B_Meldung := 0).
An sich funktioniert mein Code, aber sobald mehr als ein Bit True ist zeigt er sie nur kurz im Wechsel an, ich hätte es aber gerne so, dass er sie immer 3 Sekunden anzeigt und dann zum nächsten springt.
Außerdem gefällt mir die Lösung mit dem zweiten Timer (ZeiOk) auch nicht (dient dazu, die Anzeige zurückzusetzen, falls keiner betätigt ist).

Kann mir jemand helfen?
Gruß

Code:
//Durchschalten der Funktion
IF NOT #Spe_X_Zeigen AND #I2 < 17 THEN
    #I2 := #I2 + 1;
END_IF;
IF #I2 > 16 THEN
    #I2 := 1;
END_IF;

IF #AT_Bits[#I2]
THEN
    "Kom HMI Funktionen".M008_Not_Aus.I_KanalMeldung := #I2;
    "Kom HMI Funktionen".M008_Not_Aus.B_Meldung := 1;
    #Spe_X_Zeigen := 1;
END_IF;

#ZeiDel(IN := #Spe_X_Zeigen, //TON Timer
        PT := t#3s);
IF #ZeiDel.Q THEN
    #Spe_X_Zeigen := false;
END_IF;

#ZeiOk(IN:=NOT #Spe_X_Zeigen, //TON Timer
       PT:=t#1s);
IF #ZeiOk.Q THEN
    "Kom HMI Funktionen".M008_Not_Aus.I_KanalMeldung := 0;
    "Kom HMI Funktionen".M008_Not_Aus.B_Meldung := 0;
END_IF;
 
Hier war letzte Woche fast das selbe Problem und es gab Lösungshinweise:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Sortiere es um und kommentiere Dir mehr wann was passieren soll, dann wird es vielleicht einfacher.

Code:
// Array-Grenzfehler verhindern bzw. die Maximalanzahl begrenzen
IF #I2<1 OR #I2 > 16 THEN
    #I2 := 1;
END_IF;

// Prüfung auf Bit=TRUE
IF #AT_Bits[#I2] AND NOT #Spe_X_Zeigen THEN
    "Kom HMI Funktionen".M008_Not_Aus.I_KanalMeldung := #I2; // Angabe des ausgelösten Ortes
    "Kom HMI Funktionen".M008_Not_Aus.B_Meldung := 1; // Ausgabe das eine Meldung angezeigt werden soll
    #Spe_X_Zeigen := 1; // Für Visualisierung und Timer notwendiger Merker
END_IF;

// Anzeigetimer
#ZeiDel(IN := #Spe_X_Zeigen,
        PT := t#3s);

// Anzeige bei erreichen der Anzeigedauer weiterschalten bzw. zurücksetzen
IF #ZeiDel.Q OR NOT #AT_Bits[#I2] THEN
    #Spe_X_Zeigen := false;
    "Kom HMI Funktionen".M008_Not_Aus.I_KanalMeldung := 0;
    "Kom HMI Funktionen".M008_Not_Aus.B_Meldung := 0;
END_IF;

// #I2 zyklisch um 1 addieren sofern gerade keine Anzeige erfolgt
IF NOT #Spe_X_Zeigen AND #I2 < 17 THEN
    #I2 := #I2 + 1;
END_IF;
 
Sortiere es um und kommentiere Dir mehr wann was passieren soll, dann wird es vielleicht einfacher.

Code:
// Array-Grenzfehler verhindern bzw. die Maximalanzahl begrenzen
IF #I2<1 OR #I2 > 16 THEN
    #I2 := 1;
END_IF;

// Prüfung auf Bit=TRUE
IF #AT_Bits[#I2] AND NOT #Spe_X_Zeigen THEN
    "Kom HMI Funktionen".M008_Not_Aus.I_KanalMeldung := #I2; // Angabe des ausgelösten Ortes
    "Kom HMI Funktionen".M008_Not_Aus.B_Meldung := 1; // Ausgabe das eine Meldung angezeigt werden soll
    #Spe_X_Zeigen := 1; // Für Visualisierung und Timer notwendiger Merker
END_IF;

// Anzeigetimer
#ZeiDel(IN := #Spe_X_Zeigen,
        PT := t#3s);

// Anzeige bei erreichen der Anzeigedauer weiterschalten bzw. zurücksetzen
IF #ZeiDel.Q OR NOT #AT_Bits[#I2] THEN
    #Spe_X_Zeigen := false;
    "Kom HMI Funktionen".M008_Not_Aus.I_KanalMeldung := 0;
    "Kom HMI Funktionen".M008_Not_Aus.B_Meldung := 0;
END_IF;

// #I2 zyklisch um 1 addieren sofern gerade keine Anzeige erfolgt
IF NOT #Spe_X_Zeigen AND #I2 < 17 THEN
    #I2 := #I2 + 1;
END_IF;

Danke,
ich war tatsächlich auf dem richtigem Weg.

Gruß
 
Also meine Erfahrung hat gezeigt, dass es sehr praktisch ist die Not-Halt per Layout am HMI zu visualisieren. Auch wenn es mehrere „Teilbereiche“ geben muss. Und ich hab immer nur 9“ Panels zur Verfügung. Die Bediener können mit einer BMK nicht viel anfangen wenn der Logistiker auf der Rückseite der Anlage am Not-Halt angestoßen hat.
 
Wenn es mehr als 4 Notaus-Taster gibt, dann mache ich immer ein schematisches Übersichtsbild/Lageplan der (Teil-)Anlage, wo man die Taster und deren Position in der Anlage sieht. Bei 10" ist da ordentlich Platz auf dem Bildschirm. Von den gedrückten Tastern lasse ich das rote Viereck rot/gelb blinken, und solange das Notaus aktiv ist, blende ich im Bild eine rot/gelb blinkende Anzeige "Notaus" (oder "Emergency stop") ein.
 

Anhänge

  • CCx_overview.jpg
    CCx_overview.jpg
    70,5 KB · Aufrufe: 40
Zuviel Werbung?
-> Hier kostenlos registrieren
... Weil die Anzahl der Not-Halt Taster Variabel ist und die Visu mit 10" dann doch schnell überfüllt wirken könnte.
Ich würde auch alle Not-Halt-Schalter an der Position, an der sie sich an / in der Maschine befinden zumindestens schematisch anzeigen - oder zumindestens auf die Visu packen. Man könnte es ja auch so machen, dass nur der Schalter sichtbar ist, der gerade betätigt ist.
Solche "Spielereien" freuen dann auch den Instandhalter ... ;)
 
Wer schon mal eine Fabrikhalle mit mehreren Ebenen ablaufen musste, um einen gedrückten Notaus-Taster zu finden, der wird ein animiertes Bild mit dem Lageplan auf dem HMI zu schätzen wissen.
Und das schematische Übersichtsbild ist nicht nur für die Visu, sondern kommt auch auf eine Seite des Stromlaufplans.
 
Zurück
Oben