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

Seite 5 von 5 ErsteErste ... 345
Ergebnis 41 bis 49 von 49

Thema: Werte in einem DB suchen und vergleichen

  1. #41
    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
    Hallo,

    fehlt nur noch das tää tää tää...Ist halt Rosenmontag..

    neh mal spass beiseite.

    Prob im Moment...

    Habe eine Steckersetzmaschine die ca. 80 Programme beinhaltet.
    Schaue auf den Auftrag was für ein Produkt ich fertigen soll und suche mir das passende Prog. auf dem Zettel.Doof weil ich jedesmal "raten" darf welches Prog passt.

    Würde gerne die Prod.Nummer nehmen und dem die Prog-Nummer zuweisen...dazu noch der Produktname...Dann einmal einrichten und fertig ...Ohne Blatt und hin und her...

    Also z.b. 38-5567-564AX dazugehört Prog 1 Name Hunde
    38-3245-334AN dazugehört Prog 2 Name Katze
    38-3289-324AN dazugehört Prog 2 Name Pferd

    Im Moment muss ich alle 60 Prog am OP durchscrollen...Ist aber bei fast 400 nicht mehr lustig...

    -> Zur Liste im OP...Sehr umständlich da ich jedesmal das PG brauch....
    Hätte evtl. gedacht später es direkt am OP eingeben zu können...

    Also...

    Am OP eingeben : 38-5567-564AX -> Enter dann Anzeige

    38-5567-564AX
    Hund ansonsten Datensatz nicht gefunden
    Programm 1



    Das mit den 20 Zeichen im String---> Op hat max 20 Zeichen pro Zeile...

    Die Nummer ist eigentlich max. 13 Zeichen lang wobei die ersten 3 immer Konstant sind... 38-...
    Evtl. Maskieren...


    Danke und Gruß

  2. #42
    Registriert seit
    04.02.2007
    Beiträge
    2.544
    Danke
    167
    Erhielt 731 Danke für 528 Beiträge

    Standard

    Ich hab auch das Problem gehabt, zwar nicht mit der Eingabe am OP , aber die Daten gingen über mehrere DB's.
    Hab das auch nach einem Lösungsvorschlag von Zotos umgesetzt.

    .
    Da die DB's zu gross wurden, habe ich vier für die Namen und jeweils einen für die Parameter.
    Bei Dir könnte man z.B. Drei DB's nehmen (geht natürlich auch mit zwei)
    DB1 : Produktnummer
    DB2 : Produktname
    DB3 : Programm

    Nun muss nur der DB1 durchsucht werden, wenn gefunden wird jeweils über die Indexnummer der Produktname und das Programm aus den anderen DB's gelesen.

    Ich hatte auch die Aufgabe 3000 typen auf einem OP77 darzustellen, hab das aber abgelehnt und ein TP177B genommen.

  3. #43
    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,

    ich denke das ist ein Ansatz..mit mehreren DB´s zu arbeiten.
    Suche nochmals hier im Forum weiter...

    Danke an alle beteiligten...Ich geb nicht auf...Hoff Ihr auch nicht...

    An Zotos...Wenn wir mit mehreren DB arbeiten...-> kleinere Datenmengem können wird dann mit deiner Lösung weiter machen?


    Gruß

  4. #44
    Registriert seit
    04.02.2007
    Beiträge
    2.544
    Danke
    167
    Erhielt 731 Danke für 528 Beiträge

    Standard

    Bin da dran,
    Zotos kennt sich aber da besser aus, hab das Beispiel mal geändert.
    Eingang zum Lesen Search
    Eingang zum schreiben Save + Nummer wohin (1-400)
    Was dann im UDT Result steht , soll gespeichert werden.
    Läuft aber noch nicht, Lesen geht . schreiben noch nicht
    Code:
    TYPE myUDT
        STRUCT
          ID     : STRING[20];
          P_NAME : STRING[20];
          VALUE  : INT;
        END_STRUCT
    END_TYPE
    
    DATA_BLOCK myDB
        STRUCT
          Target : STRING[20];
          Result : myUDT;
        END_STRUCT
    begin
    END_DATA_BLOCK
    DATA_BLOCK myTypDB1
        STRUCT
          myArray : ARRAY[1..200] OF myUDT;
        END_STRUCT
    begin
    END_DATA_BLOCK
    DATA_BLOCK myTypDB2
        STRUCT
          myArray : ARRAY[201..400] OF myUDT;
        END_STRUCT
    begin
    END_DATA_BLOCK
    
    FUNCTION myFC : INT
    VAR_INPUT
        Target : STRING[20];
        Search : BOOL;
        Save   : BOOL;
        Nr     : INT;
    END_VAR
    VAR_TEMP
        i : INT;
        tmpUDT    : myUDT;   
        tmpTarget : STRING[20];
        tmpNumber : INT;
        SaveUDT   : myUDT;
    END_VAR
    VAR_OUTPUT
        Result : myUDT;
    END_VAR
        tmpNumber := -1;        
        tmpUDT.ID := '';
        tmpUDT.P_NAME := '';
        tmpUDT.VALUE := 0;    
        tmpTarget := Target;
        IF search AND NOT save THEN
            FOR i := 1 TO 200 DO
                IF myTypDB1.myArray[i].ID = tmpTarget THEN
                    tmpUDT := myTypDB1.myArray[i];
                    tmpNumber := i;
                    EXIT;
                END_IF;        
            END_FOR;
            IF (tmpNumber=-1) THEN
                    
                FOR i := 201 TO 400 DO
                    IF myTypDB2.myArray[i].ID = tmpTarget THEN
                        tmpUDT := myTypDB2.myArray[i];
                        tmpNumber := i;
                        EXIT;
                    END_IF;        
                END_FOR;
            END_IF;
            Result := tmpUDT;
            
            myFC := tmpNumber;
        END_IF;
        IF NOT search AND save THEN   // ????????????
            Saveudt:=myDB.result;
            IF nr>0 AND nR<=200 THEN
              myTypDB1.myArray[nr]:=Saveudt;   
            END_IF;
        END_IF;    
    END_FUNCTION

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

    Standard

    Das auf drei DBs aufzuteilen und auch die von Jaba zurecht ins Spiel gebrachte Schreibfunktion sind kein Problem.

    Nur weis ich echt nicht was Du mit dem Programm anfangen willst Wenn Du es 1. nicht verstehst und 2. nicht mal SCL zur Verfügung hast.

    Programm im Anhang und hier der Code der FCs (ich habe schreiben und lesen getrennt):

    Lesen:
    Code:
    FUNCTION SuchProdukt : BOOL (* Retval = TRUE gefunden wenn er FALSE ist dann nicht. *)
    VAR_INPUT
        InLese    : BOOL;     
        InGesucht : STRING[20]; (* Was gesucht wird *)
    END_VAR
    
    VAR_TEMP
        TmpGesucht : STRING[20]; (* lokale Kopie *)
        i : INT; (* Schleifenzähler *)
        Vorhanden : BOOL; (* Zeigt an ob gefunden oder nicht *)
    END_VAR
    
    VAR_OUTPUT
        OutSatznummer    : INT;
        OutProduktnummer : STRING[20];
        OutProduktname   : STRING[20];
        OutProduktwert   : INT;
    END_VAR
    
        (* lokale Kopie *)
        TmpGesucht := InGesucht;
    
        (* Vorbelegung der Rückgabewerte *)
        OutSatznummer    := -1;
        Vorhanden        := False;
        OutProduktnummer := '';
        OutProduktname   := '';
        OutProduktwert   := 0;
        
        IF InLese THEN
            (* Suchenschleife *)
            FOR i := 0 TO 399 DO
                IF Produktnummer.Satz[i] = tmpGesucht THEN 
                    (* Gefunden! *)
                    OutSatznummer    := i; 
                    OutProduktnummer := Produktnummer.Satz[i];
                    OutProduktname   := Produktname.Satz[i];
                    OutProduktwert   := Produktwert.Satz[i];
                    Vorhanden := TRUE;
                    EXIT;
                END_IF;
                
            END_FOR;
        END_IF;    
        SuchProdukt := Vorhanden;
    
    END_FUNCTION
    Schreiben:
    Code:
    FUNCTION SchreibProdukt : Void 
    VAR_INPUT    
        InSatznummer    : INT;
        InProduktnummer : STRING[20];
        InProduktname   : STRING[20];
        InProduktwert   : INT;
    END_VAR
    
    VAR_TEMP
    END_VAR
    
    IF InSatznummer >= 0 AND InSatznummer <=399 then
        Produktnummer.Satz[InSatznummer] := InProduktnummer;
        Produktname.Satz[InSatznummer]   := InProduktname;
        Produktwert.Satz[InSatznummer]   := InProduktwert;
        OK := TRUE;
    ELSE
        OK := FALSE;
    END_IF;    
    
    END_FUNCTION
    Angehängte Dateien Angehängte Dateien
    If you open your Mind too much, your Brain will fall out.

  6. #46
    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 Zotos,

    du hast vielleicht mit einigem Recht was du sagst bezüglich verstehen usw.

    Aber...

    Man lernt nie aus....Hatte schon mal mit SCL zu tun BLK_MOV mit Vierlagig und da ging es auch...

    Führe mir dein Prog. mal zu Gemüte...Denke mit der Zeit werde ich das meiste verstehen...Dauert halt.. Grab mich dann durchs Archiv....

    Ich hoffe falls ich fragen hab wird es "trotzdem" nochmals erlaubt sein euch fragen zu dürfen...

    Gruß Kodan

  7. #47
    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 zotos Beitrag anzeigen
    Nur weis ich echt nicht was Du mit dem Programm anfangen willst Wenn Du es 1. nicht verstehst und 2. nicht mal SCL zur Verfügung hast.
    es ist doch trotzdem in AWL verfügbar - sieht zwar komisch aus, aber wenn man deine quelle daneben legt, könnte man es kommentieren

    @kodan: was ham wir mit BLK_MOV gemacht ... ich bau doch viel lieber kopierschleifen als den SFC21 einzusetzen
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  8. #48
    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
    Danke Zotos,

    du hast vielleicht mit einigem Recht was du sagst bezüglich verstehen usw.

    Aber...

    Man lernt nie aus....Hatte schon mal mit SCL zu tun
    ...
    Ich meinte das auch nicht böse. Nur wenn Dir kein SCL zur Verfügung steht nützt Dir das ja nicht viel. Wenn Du mal was ändern willst/musst.

    Fragen darfst Du ruhig stellen.
    If you open your Mind too much, your Brain will fall out.

  9. #49
    Registriert seit
    30.03.2005
    Beiträge
    2.096
    Danke
    0
    Erhielt 673 Danke für 541 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Kodan Beitrag anzeigen
    Habe eine Steckersetzmaschine die ca. 80 Programme beinhaltet.
    Schaue auf den Auftrag was für ein Produkt ich fertigen soll und suche mir das passende Prog. auf dem Zettel.Doof weil ich jedesmal "raten" darf welches Prog passt.

    Würde gerne die Prod.Nummer nehmen und dem die Prog-Nummer zuweisen...dazu noch der Produktname...Dann einmal einrichten und fertig ...Ohne Blatt und hin und her...

    Also z.b. 38-5567-564AX dazugehört Prog 1 Name Hunde
    38-3245-334AN dazugehört Prog 2 Name Katze
    38-3289-324AN dazugehört Prog 2 Name Pferd

    Im Moment muss ich alle 60 Prog am OP durchscrollen...Ist aber bei fast 400 nicht mehr lustig.
    Wie viele Produktnummern und Programmnummern hast Du?

    Hast Du 400 Produktnummern und 80 Programmnummern?

    Gruß Kai

Ä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
  •