# CoDeSys- Position der Elemente in einem Array



## Shokoo (6 Februar 2015)

Hallo alle Mitglieder,
ich möchte in CoDeSys einen Eingangsnummer mit Elemente eines Arrays vergleichen und herausfinden, dass diese Zahl mit welchen Element gleich ist (z.B. ersten, zweiten, dritten, .....element des Arrays). Gibt es einen Befehl in CoDeSys um die Position der Elemente in einem Array zu extrahieren?
Vielen Dank im Voraus

VG
Shokoo


----------



## shrimps (6 Februar 2015)

Hallo Shokoo,
ist zwar etwas kryptisch ausgedrückt, aber ich hoffe deine Frage verstanden zu haben.

Du suchst z.Bsp. ob die 77 in einem Array [0..99] of int enthalten ist und an welcher Position ?!
Nachfolgend suche ich in einer Schleife deinen Wert, merke mir die Position und springe dann vorzeitig aus der Schleife.
Wenn nichts gefunden wurde, ist der Pos auf -1

LG
Shrimps

Pseudocode:
iPos := -1;
for index := 0 to 9 do
  if DeinArray[Index] = iDeinZahl then
    iPos := Index;
    exit;
  end_if
end_do


----------



## Shokoo (6 Februar 2015)

danke Shrimps. ich hatte aber auch die gleiche code geschrieben. Ich  verstehe nicht warum es funktioniert nicht. 'pos' bleibt immer null:
VAR
    x_TIM    : ARRAY [1 .. 100] OF DT; 
    val             :ARRAY [1 .. 100] OF REAL;
    dtRtc: DT;
    Pos: INT;
   dummy: BOOL := TRUE;
    x_Val: REAL;
   numPts: INT;
M:=INT;
END_VAR
------------------
dtRTC :=SysRtcGetTime(dummy);
    x_TIM:=FB1.x_TIME;
    val:= FB1.x_soll;
FOR M:=1 TO numPts DO
    IF (x_TIM [M]=dtRTC) THEN
    Pos:=M;     
    x_Val:= val [Pos];
EXIT;
    END_IF
END_FOR


----------



## Larry Laffer (6 Februar 2015)

An welcher Stelle hast du "numPts" zugewiesen ?


----------



## Shokoo (6 Februar 2015)

Ich habe gerade x_Tim lokal so definiert und die programm funktioniert ganz richtig! 
x_TIM    : ARRAY [1 .. 100] OF DT:= DT#2015-02-06-13:05:00,DT#2015-02-06-13:05:10,DT#2015-02-06-13:50:20;

aber warum sind die variable x_Val und pos nicht mehr richtig, wenn  x_TIM von einem anderen Funktion Block gelesen werden muss? FB1 bekommt die daten über IEC 61850 protocol.


----------



## Shokoo (6 Februar 2015)

Hi larry ,
 ich habe es durch "werte schreiben"  online geschrieben.


----------



## Shokoo (6 Februar 2015)

Ich arbeite mit WAGO CoDeSys version 2.3.9.42


----------



## Larry Laffer (6 Februar 2015)

OK ... ich kenne nun deine Zeitwerte nicht, die du da vergleichen willst ... aber in deinem Fall muss x_Tim[M] auf die Millisekunde identisch mit dtRTC sein - das klappt doch im Leben nicht ...
Ich würde den Millisekunden-Bereich dabei heraus lassen / in dtRTC auf Null schreiben ...

Gruß
Larry


----------



## Shokoo (6 Februar 2015)

Es funktioniert aber doch lokal und dtRTC und x_Time können bis ms verglichen werden. Ich denke das Problem liegt irgendwo anderes.


----------



## Larry Laffer (6 Februar 2015)

Natürlich funktioniert das - die Frage, die ich mir stelle, ist : bekommst du es für den Vergleich auf die Millisekunde genau gleich ... ich glaube eher nicht ...


----------



## Shokoo (6 Februar 2015)

Sorry ich war bisschen irritiert. :razz: Problem gelöst. es war meine Fähler bei der Input entry. Definition der Datentyp 'DT' ist in CoDeSys "DT#Jahr-Monat-Tag-hh:mm:ss" aber in IEC 61850-protocol-simulator ist "DT#Jahr-Tag-Monat-hh:mm:ss" . jetzt funktioniert alles wunderbar.

und Larry die können ganz genau verglichen werden.

vielen Dank 
grüß
shokoo


----------

