ESR_Collect Problem bei Ausgabe

Begonnen von IECChris, 14. Januar 2013, 18:30:03

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 1 Gast betrachten dieses Thema.

IECChris

Hallo zusammen,

beschäftige mich erst seit kurzem mit Codesys und habe deshalb noch Probleme damit...
Wollte mit Hilfe der ESR Bausteine verschiedene Alarme mit einen Zeitstempel versehen und über eine Visu ausgeben

Habe deshalb folgendes Beispiel(im Anhang) zum Test geschrieben aber leider funktioniert es nicht wie gewollt.
1.Wenn ich einen Fehler simuliere (Err1) wird dieser zwar am Eingang ESR_0 des Bausteins geschrieben doch irgendwie kommt dieser nicht bis zum Ausgang ESR_OUT...
2.Laut Doku kann der Baustein ESR_Collect max 64 Meldungen verwalten, aber das Ausgangs-ARRAY hat nur 32 Zeilen...?

Ich hoffe mein Problem ist verständlich
Vielen dank im voraus

Chris

[gelöscht durch Administrator]

peewit

hallo

der collect baustein kann eingangsseitig bis zu 64 meldungen verarbeiten
das heisst z.b. von 8 verschiedenen mon_b8 bausteinen können meldungen entgegen genommen werden
jedoch pro mon_b8 baustein maximal 4 meldungen im selben zyklus

der collect baustein macht aus den maximal 64 inputs eine sammlung vom max. 32 meldungen

der collect baustein hat anscheinend eine macke !
dis zur vollständigen klärung warum das so ist, kann ich dir einen bug.fix anbieten

IF rst OR cnt < 0 THEN
pos := -1;
cnt := 0;         <----- das musst du einfügen
ELSE
FOR cnt := 0 TO max_in DO
IF esr_0[cnt].typ > 0 THEN pos := INC1(pos, max_out); esr_out[pos] := esr_0[cnt]; END_IF;
IF esr_1[cnt].typ > 0 THEN pos := INC1(pos, max_out); esr_out[pos] := esr_1[cnt]; END_IF;
IF esr_2[cnt].typ > 0 THEN pos := INC1(pos, max_out); esr_out[pos] := esr_2[cnt]; END_IF;
IF esr_3[cnt].typ > 0 THEN pos := INC1(pos, max_out); esr_out[pos] := esr_3[cnt]; END_IF;
IF esr_4[cnt].typ > 0 THEN pos := INC1(pos, max_out); esr_out[pos] := esr_4[cnt]; END_IF;
IF esr_5[cnt].typ > 0 THEN pos := INC1(pos, max_out); esr_out[pos] := esr_5[cnt]; END_IF;
IF esr_6[cnt].typ > 0 THEN pos := INC1(pos, max_out); esr_out[pos] := esr_6[cnt]; END_IF;
IF esr_7[cnt].typ > 0 THEN pos := INC1(pos, max_out); esr_out[pos] := esr_7[cnt]; END_IF;
   END_FOR;
END_IF;