Werte in DB suchen

kruz_007

Level-1
Beiträge
31
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
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 ;-)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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.
 
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:
Zurück
Oben