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]
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;