Werte in DB suchen

kruz_007

Level-1
Beiträge
31
Reaktionspunkte
0
Hallo, ich habe ein Problem bei der suche einen Wert der in einem DB gespeichert ist. in diesem DB sind 100 Werte Type DWORD gespeichert, diese Werte werden nach bestimmte durchläufe überschrieben.

war mit FC86 TBL_Find leider nicht erfolgreich und mit SCL habe leider keine Erfahrung.

wäre für eure Hilfe sehr Dankbar
 
Such doch nach dem datenbaustein DWord und nicht nach dem wert an sich das macht es um einiges einfacher würde ich sagen ;-)
 
Was möchtest du den genau haben, wenn du Ihn gefunden hast?
Die Position oder den Wert?
Suchen im DB mit SCL (wurde nicht getestet):
Code:
FUNCTION FC100 : INT
VAR_INPUT
    DATEN: BLOCK_DB;
    GESUCHT: WORD;
END_VAR
VAR_OUTPUT
    AUSGABE:WORD;
END_VAR
VAR_TEMP
    Index:INT;
END_VAR
BEGIN
    Index := 0;
    REPEAT
        Index := Index + 1;
    UNTIL DATEN.DW[Index] = Gesucht OR Index >=100 
    END_REPEAT
    FC100 := 1;
END_FUNCTION
 
Zuletzt bearbeitet:
ich suche nach dem Wert, also ob diese Wert in meinem DB vorhanden ist oder nicht und gebe eine Ausgangssignal 1 oder 0.
Beispiel: ich lese den Wert der in DB4.DBD4 aus und Suche in DB 7 (in DB7 sind 100 DWORD ) nach dem Wert.

leider SCL steht mir nicht zu Verfügung und habe keine Erfahrung damit.

Danke Vorab
 
Was für eine CPU verwendest du?
Falls es keine 1200er ist wären AWL und indirekte Adressierung die richtigen Stichworte für die Suche.

Wenn du nicht indirekt adressieren möchtest kannst du auch jeden einzelnen Wert laden und mit dem den du suchst vergleichen.
L DBXDBDx
L DBYDBDY
=I
S AXY

und das ganze dann eben für jede Adresse.
 
es ist auch eine Lösung aber für 100 Werte oder mehr geht es bestimmt eleganter mit AWL, oder ?
 
musste noch mal drüberschauen. ist aus einer funktion die was ähnliche macht.
Code:
      L     #Datenbaustein_1 //in INT
      T     #db_1 //temp INT
      L     #Datenbaustein_2 //in INT
      T     #db_2 //temp INT
      L     #Datenanfang_1 //in INT
      T     #datpos1 //temp INT
      L     #Datenanfang_2 //in INT
      T     #datpos2 //temp INT
      L     1
      T     #schleife //temp INT
      L     0
      T     #position //out INT
      CLR   
      =     #gleich// out BOOL
anfa: NOP   0                           //Schleifenanfang
      L     #datpos1
      SLD   3
      LAR1  
      L     #datpos2
      SLD   3
      LAR2  
      AUF   DB [#db_1]
      L     DBD [AR1,P#0.0]
      AUF   DB [#db_2]
      L     DBD [AR2,P#0.0]
      ==D    
      =     #gleich
      SPB   gl1                        //gleich deshalb zum ende

      L     #datpos1
      L     4//+4 wegen dword
      +I    
      T     #datpos1
      L     #datpos2
      L     4 //bei dword
      +I    
      T     #datpos2
      L     #schleife
      L     1
      +I    
      T     #schleife
      L     #schleife
      L     #anzahl//in INT anzahl der variablen die verglichen werden sollten
      >I    
      SPB   fert
      SPA   anfa
fert: NOP   0
      BEA   
gl1: NOP   0
      L     #schleife
      T     #position//position wo  der erste gleich gefunden wurde
 
Zuletzt bearbeitet:
kann mir bitte jemand mal das genau erklären, eine Kommentar neben das Programm wäre supper
 
Für die Nutzung dieser Website sind Cookies erforderlich. Du musst diese akzeptieren, um die Website weiter nutzen zu können. Erfahre mehr…