Werte in einem DB suchen und vergleichen

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

Anhänge

  • StringDB.zip
    53,4 KB · Aufrufe: 12
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
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 :rolleyes:

@kodan: was ham wir mit BLK_MOV gemacht :confused: ... ich bau doch viel lieber kopierschleifen als den SFC21 einzusetzen *ROFL*
 
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.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
Zurück
Oben