CoDeSys- Position der Elemente in einem Array

Shokoo

Level-1
Beiträge
23
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
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
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
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.
 
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
 
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 ...
 
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
 
Zurück
Oben