TIA Komplettes Array setzen/rücksetzen

Beiträge
15
Reaktionspunkte
7
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,

Da mir nichts mehr einfällt und ich auch nichts zufriedenstellendes gefunden habe, habe ich mich nach langem mal hier angemeldet, da nur mitlesen auf Dauer schwierig wird :p.
So jetzt aber zu meinem Problem:
Ich fange alle Meldungen die ich von der CPU an mein HMI übergeben will in einem DB in einem Array of BOOL ab. An verschiedenen Stellen, z.B. externe Quittierung o.ä., Sollen mehrere, bzw. ALLE angelegten Variablen zurückgesetzt werden. Da ich allerdings mit ca. 100 Meldungen arbeite, wäre es ziemlich aufwendig diese alle einzeln zurückzusetzen.
Momentan löse ich diese Aufgabe über ein zweites, identisches Array welches ich mit 0 initialisiere und dann einfach in mein Arbeits DB reinkopiere, wenn ich dieses "rücksetzen" will.
So habe ich zwar nur wenig AWL Code (gut :D) aber dafür ein zweites Array mit über 100 Bits was quasi "unnütz" Speicher verbraucht.

Kennt hier einer einen eleganten Weg dies zu lösen oder gibt es für so etwas vielleicht sogar eine eigene Funktion? ( Bin noch recht neu in SPS-Programmierung)

P.S. zur Ausstattung: Ich programmiere die WinAC RT für einen IPC 277d mit dem TIA v13 sp1 upd1

Schonmal Danke im voraus.

Gruß Phil
 
Zuletzt bearbeitet:
Man kann das schon mit Schleife machen, aber mal ehrlich: Deine Lösung ist okay. 100 bit kosten heute nicht mehr sooo viel.
 
In dem Fall lohnt es sich kaum, aber für solche Aufgaben gibt's die Anweisung FILL oder FILL_BLK.

Hier ein AWL-Beispiel für FILL aus der Online - Hilfe:
AWL
Erläuterung
CALL FILL
// Die Anweisung "Bereich befüllen" wird aufgerufen.
ANY
// Datentyp der Anweisung
BVAL := P#M14.0 WORD 4
// Der Bereich von MW14 bis MW20 wird kopiert.
RET_VAL := "Tag_ErrorCode"
// Fehlerinformationen
BLK := P#M100.0 WORD 10
// Der Speicherbereich von MW100 bis MW118 wird mit dem Inhalt der 4 Wörter
befüllt, die im Speicherbereich am Parameter BVAL enthalten sind.
 
Zuletzt bearbeitet:
Hallo Phil,

100 Bit sollten keiner Steuerung zuviel sein. Deine Lösung ist OK und auch das ablöschen mit Doppelworten ist recht verbreitet.

Wenn es ganz elegant sein soll, dann spendierst du jeder Funktion die eine Störung setzen kann, auch einen Reset-Eingang. Dieser kann gemeinsam für alle Störungen, oder nur Gruppenweise zusammengefasst werden. Das hat den Vorteil, dass alles was gesetzt werden kann, auch nach dem Störereignis quittiert werden kann. Vorausgesetzt, der Reset-Eingang wurde beschalten. ;)
Ein Nebeneffekt ist, dass die Störung/Meldung auch einfach selbstquittierend gemacht werden kann, indem du an den Reset einfach "True" anlegst...

AWL und Schleifen meide ich, wenn irgend möglich. :twisted:

Gruß
Chräshe
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
Erstmal danke an alle für die Antworten :D. Ich denke ich werde wohl vorrübergehend bei meiner Lösung bleiben, bzw. wenn ich mal Zeit finde CHräshes Lösungsweg versuchen. Das mit den Doppelworten habe ich in Step7 auch immer verwendet, wird aber im TIA immer als Warnugn hinterlegt (Ja Warnung ist nicht gleich Fehler und es funktioniert ja auch, is aber trotzdem nicht so schön).


Habe noch eine Funktion Reset gefunden

CALL RESET
S_BIT :="DB_Störungen".Meldungen.Meldung[0] //DB in dem die Meldungen abgelegt sind
N :=128

Wäre vllt noch eine Alternative um alles zurückzusetzen, aber natürlich nichts wenn das nur Bereichsweise geschehen soll. Was haltet ihr von der Funktion?

Gruß
Phil
 
Zuletzt bearbeitet:
Zurück
Oben