Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: CoDeSys- Position der Elemente in einem Array

  1. #1
    Registriert seit
    07.10.2014
    Ort
    Deutschland
    Beiträge
    23
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    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
    Zitieren Zitieren CoDeSys- Position der Elemente in einem Array  

  2. #2
    Registriert seit
    16.03.2014
    Beiträge
    358
    Danke
    74
    Erhielt 45 Danke für 38 Beiträge

    Standard

    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

  3. #3
    Shokoo ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    07.10.2014
    Ort
    Deutschland
    Beiträge
    23
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    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

  4. #4
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.710
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    An welcher Stelle hast du "numPts" zugewiesen ?

  5. #5
    Shokoo ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    07.10.2014
    Ort
    Deutschland
    Beiträge
    23
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    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.

  6. #6
    Shokoo ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    07.10.2014
    Ort
    Deutschland
    Beiträge
    23
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

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

  7. #7
    Shokoo ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    07.10.2014
    Ort
    Deutschland
    Beiträge
    23
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ich arbeite mit WAGO CoDeSys version 2.3.9.42

  8. #8
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.710
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    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

  9. #9
    Shokoo ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    07.10.2014
    Ort
    Deutschland
    Beiträge
    23
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

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

  10. #10
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.710
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    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 ...

Ähnliche Themen

  1. Array ändern in der Visualisierung (codesys 2.3.x.x)
    Von KingHelmer im Forum CODESYS und IEC61131
    Antworten: 4
    Letzter Beitrag: 04.05.2013, 03:07
  2. Auf mehrere Elemente eines ARRAY per FC zugreifen
    Von bentrup9405 im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 13.04.2013, 17:26
  3. Antworten: 22
    Letzter Beitrag: 26.11.2012, 22:10
  4. Anzahl der Elemente in einem globalen DB
    Von elfriso im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 21.07.2012, 20:35
  5. Tabelle für Array Elemente
    Von TimeOUT im Forum CODESYS und IEC61131
    Antworten: 2
    Letzter Beitrag: 15.02.2012, 14:25

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •