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

Seite 1 von 5 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 49

Thema: Werte in einem DB suchen und vergleichen

  1. #1
    Registriert seit
    02.03.2007
    Beiträge
    43
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    möchte ein Auswahlmenü mit einem Op7 erstellen.
    D.H. ich habe einen DB in dem ich Daten ablege.

    Lege ein Array das folgende Stuktur hat.

    0.0 String[20] Inhalt `28-0204-01A´ als Anfangs bzw. Aktualwert
    22.0 String[20] Inhalt `Produktname X´ als Anfangs bzw. Aktualwert
    44.0 INT 4 als Anfangs bzw. Aktualwert

    dieses Array wiederholt sich nun x Mal... D.h. alle 46 Byte kommt ein neuer Datensatz.

    Meine Frage wie kann ich nun gezielt nach dem Sting/Wert 28-0204-01A im DB suchen (Wert natürlich variabel) ?

    Habe nun wirklich lange im Forum gesucht aber leider nichts gefunden bzw. evtl den falschen Suchbegriff benutzt.

    Gruß
    Zitieren Zitieren Werte in einem DB suchen und vergleichen  

  2. #2
    Registriert seit
    07.03.2004
    Beiträge
    4.369
    Danke
    946
    Erhielt 1.158 Danke für 831 Beiträge

    Standard

    Zitat Zitat von Kodan Beitrag anzeigen
    ...
    0.0 String[20] Inhalt `28-0204-01A´ als Anfangs bzw. Aktualwert
    22.0 String[20] Inhalt `Produktname X´ als Anfangs bzw. Aktualwert
    44.0 INT 4 als Anfangs bzw. Aktualwert

    dieses Array wiederholt sich nun x Mal... D.h. alle 46 Byte kommt ein neuer Datensatz.
    ...
    Das ist kein Array.

    Ich würde erstmal diese Struktur aus den drei werten in eine UDT Packen und in dem DB wirklich ein Array mit dem Type des UDTs anlegen.

    Dann in SCL einfach eine Forschleife bauen die das Array durchsucht und immer das erste Element des UDTs mit dem Vergleichswert vergleicht.
    If you open your Mind too much, your Brain will fall out.

  3. #3
    Kodan ist offline Benutzer
    Themenstarter
    Registriert seit
    02.03.2007
    Beiträge
    43
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo danke für die Antwort...

    Über die Struktur eines UDT werd ich mich noch schlau machen...

    Mit SCL ist es nicht weit her bei mir....

    Wäre für weite hilfe dankbar..

    Gruß

  4. #4
    Registriert seit
    04.01.2008
    Ort
    Wien
    Beiträge
    773
    Danke
    136
    Erhielt 39 Danke für 35 Beiträge

    Standard

    Du mußt einen SFC20 mit zwei Anypointern bestücken die du dir selbst schreibst.

    Anschliessend verwende den FC10 aus der bibliothek "EQ_String"

    SFC20 brauchst du um dir den ganzen String zb. in einem DB zu schreiben um in für FC10 zum vergleich zu laden.

    für die Start - Adresse in deinem DB nimm ein MW und erhöhe es um 1 wenn der String-Vergleich nicht zu einem "gefunden" führt.

    Den Zähler mit 46 Multiplizieren.
    irgendetwas ist ja immer...
    ING. Gerald Miedler

  5. #5
    Registriert seit
    07.03.2004
    Beiträge
    4.369
    Danke
    946
    Erhielt 1.158 Danke für 831 Beiträge

    Standard

    Zitat Zitat von Kodan Beitrag anzeigen
    ...
    Mit SCL ist es nicht weit her bei mir....

    Wäre für weite hilfe dankbar..
    Code:
    TYPE myUDT
        STRUCT
          ID     : STRING[20];
          P_NAME : STRING[20];
          VALUE  : INT;
        END_STRUCT
    END_TYPE
    Code:
    DATA_BLOCK myDB
        STRUCT
          myArray : ARRAY[0..99] OF myUDT;
          Target : STRING[20];
          Result : myUDT;
        END_STRUCT
    BEGIN
    
    END_DATA_BLOCK
    Code:
    FUNCTION myFC : myUDT
    
    VAR_INPUT
        myTarget : STRING[20];
    END_VAR
    
    VAR_TEMP
        i : INT;
        tmpUDT : myUDT;
        tmpTarget : STRING[20];
    END_VAR
    
    VAR_OUTPUT
        ElementNumber : INT;
    END_VAR
    
        ElementNumber := -1;        
        tmpUDT.ID := '';
        tmpUDT.P_NAME := '';
        tmpUDT.VALUE := 0;
        
        tmpTarget := myTarget;
        
        FOR i := 0 TO 99 DO
            IF myDB.myArray[i].ID = tmpTarget THEN
                tmpUDT := myDB.myArray[i];
                ElementNumber := i;
                EXIT;
            END_IF;        
        END_FOR;
        myFC := tmpUDT;
    END_FUNCTION
    Projekt im Anhang.
    Angehängte Dateien Angehängte Dateien
    If you open your Mind too much, your Brain will fall out.

  6. #6
    Registriert seit
    07.03.2004
    Beiträge
    4.369
    Danke
    946
    Erhielt 1.158 Danke für 831 Beiträge

    Standard

    Kommentare zum Fc
    Code:
    FUNCTION myFC : myUDT
    
    VAR_INPUT
        myTarget : STRING[20]; (* Was gesucht wird *)
    END_VAR
    
    VAR_TEMP
        i : INT; (* Schleifenzähler *)
        tmpUDT : myUDT; (* Temporäres Ergebnis *)
        tmpTarget : STRING[20]; (* SIEMENS Rotz die können nicht mit dem String aus dem VAR_INPUT arbeiten ;o( *)
    END_VAR
    
    VAR_OUTPUT
        ElementNumber : INT; (* Hab ich nachgefügt fals die Elementnummer wichtig ist *)
    END_VAR
        (* Alles ablöschen *)
        ElementNumber := -1;        
        tmpUDT.ID := '';
        tmpUDT.P_NAME := '';
        tmpUDT.VALUE := 0;
        
        tmpTarget := myTarget; (* Siehe Variablendeklaration *)
        
        FOR i := 0 TO 99 DO  (* Suchschleife *)
            IF myDB.myArray[i].ID = tmpTarget THEN (* Vergleich *)
                tmpUDT := myDB.myArray[i]; (* gefunden *)
                ElementNumber := i;
                EXIT; (* Suche beenden *)
            END_IF;        
        END_FOR;
        myFC := tmpUDT; (* Rückgabewert beschreiben *)
    END_FUNCTION
    If you open your Mind too much, your Brain will fall out.

  7. #7
    Kodan ist offline Benutzer
    Themenstarter
    Registriert seit
    02.03.2007
    Beiträge
    43
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke für die Hilfe...
    Werde es sofort ausprobieren....

    Melde mich wieder wenns funktioniert oder ich noch Hilfe benötige....

    Gruß

  8. #8
    Kodan ist offline Benutzer
    Themenstarter
    Registriert seit
    02.03.2007
    Beiträge
    43
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Zotos,

    bin gerade am probieren.
    Leider kann ich den OB1 nicht ins AG laden da ein Fehlerangezeigt wird.
    Unzulässiger Befehl im Baustein.Bausteinadresse 42.

    Auch mit dem DB bzw.der Vat komm ich nicht ganz klar..

    Gruß
    Zitieren Zitieren OB 1 nicht übertragbar  

  9. #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

    was steht denn bei bausteinadresse 42 für ein befehl?
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  10. #10
    Kodan ist offline Benutzer
    Themenstarter
    Registriert seit
    02.03.2007
    Beiträge
    43
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi Vierlagig,

    Ist von Zotos ein FC..siehe oben..!

    Gruß Kodan..

Ähnliche Themen

  1. 8 Integer Werte vergleichen
    Von HarryH im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 20.09.2011, 08:00
  2. Antworten: 27
    Letzter Beitrag: 07.04.2011, 22:56
  3. DB-Werte nacheinander einem FB zuweisen
    Von Herrminator im Forum Programmierstrategien
    Antworten: 11
    Letzter Beitrag: 26.02.2009, 16:50
  4. Antworten: 2
    Letzter Beitrag: 26.09.2006, 09:04
  5. 2 versch. werte an einem analogen ausgang mit der ps3
    Von Anonymous im Forum Sonstige Steuerungen
    Antworten: 4
    Letzter Beitrag: 01.08.2004, 19:54

Stichworte

Lesezeichen

Berechtigungen

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