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

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

Thema: DB Array Intern auf doppelte Eingabe vergleichen

  1. #1
    Registriert seit
    07.02.2009
    Beiträge
    2
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Guten Morgen,
    Habe eine Frage zu oben genannten Thema.
    Ein Kunde möchte in einem "ARRAY [1 .. 60 ] OF INT" die Felder überprüfen um zu sehen ob ein Zahlenwert zb.: 22 mehrfach vorhanden ist (zur Info. die werte werden über ein TP177 an den DB Übertragen).

    Nun habe ich mir einen FC erstellt welcher einen Wert mit einem der schon im DB vorhanden ist auf gleich auswertet.
    Mein Problem ist jetzt das ich die abfrage "intern" auf mehrfach vorhanden nicht hinbekomme

    Habe schon probiert über die Funktion eine weitere Schleife darüber zu legen und diese mit der Anzahl der zu überprüfenden Zahlenwerte (INT) ablaufen lasse. und dann den vergleich ausführe und wenn der vergleich wahr ist aus der Schleife springe.
    Jedoch vergleicht er dann nur ob eine Zahl mit der übergelagerten schleifen Zahl stimmt, und nicht ob ein Eintrag mehrfach vorhanden ist.

    (STEP7 V5.4 +SP4)

    AWL Quelle als Anhang

    Währe nett wenn mir da jemand helfen könnte.
    Angehängte Dateien Angehängte Dateien
    Geändert von Vielhro (12.02.2009 um 08:33 Uhr)
    Zitieren Zitieren DB Array Intern auf doppelte Eingabe vergleichen  

  2. #2
    Registriert seit
    30.08.2003
    Beiträge
    2.197
    Danke
    30
    Erhielt 258 Danke für 229 Beiträge

    Standard

    Hallo Vielhro,

    ohne den Anhang zu sehen würde ich folgendes vorschlagen. Schau dir mal nen Baustein für Bubblesort (Suchfunktion!) an. Das kannste dann mit deiner Auswertung kombinieren. Oder 2 Schleifen und dann in nen neuen Bereich kopieren wenn der Eintrag noch nicht im neuen Bereich vorhanden ist. Schleife 1 über Quellbereich, Schleife 2 über Zielbereich

    André
    Geändert von sps-concept (12.02.2009 um 08:42 Uhr)
    www.raeppel.de
    mit innovativen SPS-Tools schneller ans Ziel ....

  3. Folgender Benutzer sagt Danke zu sps-concept für den nützlichen Beitrag:

    Vielhro (12.02.2009)

  4. #3
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Code:
    *
    WHILE i <= 60 DO
        FOR k := 1 TO 60 DO
            IF (arrayFeld[i] == arrayFeld[k] AND i <> k) THEN
                gleicheWerte := TRUE;
            END_IF;
        END_FOR;
        i := i+1;
    END_WHILE;
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  5. #4
    Registriert seit
    22.09.2006
    Ort
    Bodenseeraum
    Beiträge
    1.022
    Danke
    61
    Erhielt 136 Danke für 122 Beiträge

    Beitrag

    Hi,
    er möchte doch auf "Mehrfachvorhanden" prüfen, so müsste man ein Index
    bei einem Treffer hochzählen, wenn am Schluss der Index>1 -> ist der Wert mehrfach drin.

    Gruss: V.
    ______________________________________
    relax, take it easy
    Zitieren Zitieren Check..  

  6. #5
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Zitat Zitat von vladi Beitrag anzeigen
    Hi,
    er möchte doch auf "Mehrfachvorhanden" prüfen, so müsste man ein Index
    bei einem Treffer hochzählen, wenn am Schluss der Index>1 -> ist der Wert mehrfach drin.

    Gruss: V.
    ich hab das bit gleicheWerte drin, das müßte reichen. anforderung war ja nicht, auszugeben was, wie oft doppelt ist...
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  7. #6
    Registriert seit
    11.05.2005
    Ort
    Baden-Württemberg
    Beiträge
    673
    Danke
    113
    Erhielt 153 Danke für 124 Beiträge

    Standard

    Zitat Zitat von vladi Beitrag anzeigen
    Hi,
    er möchte doch auf "Mehrfachvorhanden" prüfen, so müsste man ein Index
    bei einem Treffer hochzählen, wenn am Schluss der Index>1 -> ist der Wert mehrfach drin.

    Gruss: V.
    das macht der Code von 4l schon.

    IMHO sollte die Schleife aber beim 1. doppelten Eintrag verlassen werden...
    "arbeite klug, nicht hart" - deutsches Sprichwort

  8. #7
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Zitat Zitat von SPSKILLER Beitrag anzeigen
    IMHO sollte die Schleife aber beim 1. doppelten Eintrag verlassen werden...
    hatte in der ersten version ein RETURN drin, fand ich nicht so gelungen
    dann hat ich ein GOTO drin ... da gehen die meinungen ja mittlerweile nicht mehr soweit auseinander ergo raus.
    er könnte an der stelle ja noch einen zähler einbauen und erfassen, wieviele werte gleich sind evtl. sogar noch den wert rausschmeißen in ein array[0..59] (das die leute immer bei eins anfangen will mir nich in den schädel] of INT ...
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  9. #8
    Registriert seit
    11.05.2005
    Ort
    Baden-Württemberg
    Beiträge
    673
    Danke
    113
    Erhielt 153 Danke für 124 Beiträge

    Standard

    ist schon klar, aber wenns nur um das "GleichBit" geht, dann macht die CPU u.U. >3000 unnötige Vergleiche.
    Find ich nicht so toll.

    Ist aber auch egal. Den Weg hast du aufgezeigt.
    Darauf kommts ja an
    "arbeite klug, nicht hart" - deutsches Sprichwort

  10. #9
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    wahrscheinlich hat er kein SCL

    Code:
    *
          TAR1  #dAR1Save                   //AR1 retten
          TAR2  #dAR2Save                   //AR2 retten
          LAR1  P##arrayFeld                //start
          LAR2  P##arrayFeld                //festlegen
     
    //WHILE i <= 60 DO
          L     60
    whil: T     #i
     
    //FOR k := 1 TO 60 DO
          L     60
    for:  T     #k
    //IF (arrayFeld[i] == arrayFeld[k] AND i <> k) THEN
          U(    
          L     W [AR1,P#0.0]
          L     W [AR2,P#0.0]
          ==I   
          )     
          U(    
          LAR1 
          TAK 
          LAR2  
          <>D   
          )     
    //gleicheWerte := TRUE; GOTO end;
          =     #gleicherWert
          SPA   end
    //end if
          +AR2  P#2.0
          L     #k
          LOOP  for
    //end for
     
          +AR1  P#2.0
          LAR2  P##arrayFeld
          L     #i
          LOOP  whil
    //end while
     
          LAR1  #dAR1Save
          LAR2  #dAR2Save
    end:  NOP   0
    Geändert von vierlagig (12.02.2009 um 10:14 Uhr)
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  11. Folgender Benutzer sagt Danke zu vierlagig für den nützlichen Beitrag:

    Vielhro (12.02.2009)

  12. #10
    Vielhro ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    07.02.2009
    Beiträge
    2
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Danke an alle!! (Für die rasche Hilfe bzw. für die Lösungsmöglichkeiten)

Ähnliche Themen

  1. Array of Bool auf 0 vergleichen
    Von Nordischerjung im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 02.07.2010, 09:25
  2. SFB47 intern
    Von jungi im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 26.03.2010, 06:23
  3. Oscat doppelte Bausteine
    Von Doofundstinkt im Forum CODESYS und IEC61131
    Antworten: 7
    Letzter Beitrag: 20.01.2010, 14:00
  4. Doppelte Panel OP7
    Von Pinguino im Forum HMI
    Antworten: 6
    Letzter Beitrag: 31.05.2007, 22:09
  5. DP: Doppelte Adresse bei Baudratenwechsel
    Von kipphase im Forum Feldbusse
    Antworten: 2
    Letzter Beitrag: 03.03.2006, 10:54

Lesezeichen

Berechtigungen

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