Baustein Find und DB variabel

skyvan

Level-1
Beiträge
52
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Gemeinde

Ich versuche mit dem IEC Baustein "Find" zwei strings miteinander zu vergleichen. Ich habe einen "Quell-DB" und 15 "Ziel-DB´s" aus denen ich ein String vergleichen muß. Meine Frage ist nun folgende, der BAustein möchte nur String als In haben ich würde ihm gerne einen Pointer zuweisen, ist das irgendwie möglich? Schön wäre auch noch wenn ich die länge bestimmen könnte und die Startadresse.

Gruß Marco
 
Also ich hatte so ein ähnliches Problem mal gehabt und hab mir dann "einfach" selbst einen "Byte-Für-Byte"-Vergleicher geschrieben.

Der hatte folgnende Parameter:
Lenght (Länge die verglichen werden soll)
SRC_DB (DB wo die Quelle drin steht)
SRC_Byte (Startbyte im DB)
DEST_DB (DB wo die zu vergleichende Informationen drin steht)
DEST_Byte (Startbyte im DB)

Is ne einfache Schleife innerhalb des FC's den du dann schreiben müsstest

LG
Hawkster
 
Zuviel Werbung?
-> Hier kostenlos registrieren
hi hawkster

ist auf jedenfall mal ne Idee. Werd es mal versuchen damit

Tante edit: hab gerade in meinem Fundus genau das gefunden was du beschreibst. Hilft mir aber bei genauerer Betrachtung leider nicht weiter.

Gruß Marco
 
Zuletzt bearbeitet:
Hoffe du kannst dir vorstellen was ich meine...

Grad ne schleife die X mal (also die Lenght) durchläuft und dann vergleichst du einfach indirekt jedes byte vom DB, haste ne Abweichung, springste raus und gibt halt die entsprechende Rückmeldung.

Schaffste die Schleife Erfolgreich zu durchlaufen gibste halt ne positive Rückmeldung :)

LG
Hawkster
 
Hi Hi
ja ich weiß wie du es meinst hab das ganze ja schon einmal gemacht aber eben nicht für diese Prob. Hier sieht die Sache (da ich ja mehrere Index DB´s habe) doch schon anders aus. Bin noch am überlegen ob ich es in SCL schreiben werde.

Gruß Marco
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich würde das Ganze auch über einen eigenen Baustein lösen. In den Index-Bausteinen haben ja hoffentlich alle Einträge die gleiche Länge, zumindest von der Anlage der Daten her. Mit dem Baustein würde ich nun von Eintragbeginn zu Eintragbeginn "springen" und erstmal nur den ersten Buchstaben vergleichen. Wenn der identisch ist, dann einen Byteweisen Vergleich durchführen, das spart sicher auch einiges an Zeit. Der Inputparameter des Bausteins kann dann von der Art sein, wie man es halt bevorzugt. SCL wäre in einem solchen Fall sicher angebracht, mein Vorschlag ließe sich aber auch in AWL recht fix umsetzen.
 
hi Ralle

es ist schön zu sehen das ich nicht der einzige Depp bin der arbeitet ;)

sprechen wir hier von einer Schleife in einer Schleife?

hier einmal wie es jetzt gelöst ist

Code:
   U     #Trigger_Start
      SPBN  End
      CALL  "FIND"
       IN1    :="DB303 IFM03 Stat.3".EmpfangenDaten
       IN2    :="Index_DB_Teile".Fach_0_2D_Code
       RET_VAL:=#Dummy
      L     #Dummy
      L     1
      ==I   
      SPBN  s1
      L     0
      T     #Daten_DB
      SPA   End
s1:   NOP   0
      CALL  "FIND"
       IN1    :="DB303 IFM03 Stat.3".EmpfangenDaten
       IN2    :="Index_DB_Teile".Fach_1_2D_Code
       RET_VAL:=#Dummy
      L     #Dummy
      L     1
      ==I   
      SPBN  s2
      L     1
      T     #Daten_DB
      SPA   End
s2:   NOP   0
      CALL  "FIND"
       IN1    :="DB303 IFM03 Stat.3".EmpfangenDaten
       IN2    :="Index_DB_Teile".Fach_2_2D_Code
       RET_VAL:=#Dummy
      L     #Dummy
      L     1
      ==I   
      SPBN  s3
      L     2
      T     #Daten_DB
      SPA   End
s3:   NOP   0
      CALL  "FIND"
       IN1    :="DB303 IFM03 Stat.3".EmpfangenDaten
       IN2    :="Index_DB_Teile".Fach_3_2D_Code
       RET_VAL:=#Dummy
      L     #Dummy
      L     1
      ==I   
      SPBN  s4
      L     3
      T     #Daten_DB
      SPA   End
s4:   NOP   0
      CALL  "FIND"
       IN1    :="DB303 IFM03 Stat.3".EmpfangenDaten
       IN2    :="Index_DB_Teile".Fach_4_2D_Code
       RET_VAL:=#Dummy
      L     #Dummy
      L     1
      ==I   
      SPBN  s5
      L     4
      T     #Daten_DB
      SPA   End
s5:   NOP   0
      CALL  "FIND"
       IN1    :="DB303 IFM03 Stat.3".EmpfangenDaten
       IN2    :="Index_DB_Teile".Fach_5_2D_Code
       RET_VAL:=#Dummy
      L     #Dummy
      L     1
      ==I   
      SPBN  s6
      L     5
      T     #Daten_DB
      SPA   End
s6:   NOP   0
      CALL  "FIND"
       IN1    :="DB303 IFM03 Stat.3".EmpfangenDaten
       IN2    :="Index_DB_Teile".Fach_6_2D_Code
       RET_VAL:=#Dummy
      L     #Dummy
      L     1
      ==I   
      SPBN  s7
      L     6
      T     #Daten_DB
      SPA   End
s7:   NOP   0
      CALL  "FIND"
       IN1    :="DB303 IFM03 Stat.3".EmpfangenDaten
       IN2    :="Index_DB_Teile".Fach_7_2D_Code
       RET_VAL:=#Dummy
      L     #Dummy
      L     1
      ==I   
      SPBN  s8
      L     7
      T     #Daten_DB
      SPA   End
s8:   NOP   0
      CALL  "FIND"
       IN1    :="DB303 IFM03 Stat.3".EmpfangenDaten
       IN2    :="Index_DB_Teile".Fach_8_2D_Code
       RET_VAL:=#Dummy
      L     #Dummy
      L     1
      ==I   
      SPBN  s9
      L     8
      T     #Daten_DB
      SPA   End
s9:   NOP   0
      CALL  "FIND"
       IN1    :="DB303 IFM03 Stat.3".EmpfangenDaten
       IN2    :="Index_DB_Teile".Fach_9_2D_Code
       RET_VAL:=#Dummy
      L     #Dummy
      L     1
      ==I   
      SPBN  s10
      L     9
      T     #Daten_DB
      SPA   End
s10:  NOP   0
      CALL  "FIND"
       IN1    :="DB303 IFM03 Stat.3".EmpfangenDaten
       IN2    :="Index_DB_Teile".Fach_10_2D_Code
       RET_VAL:=#Dummy
      L     #Dummy
      L     1
      ==I   
      SPBN  s11
      L     10
      T     #Daten_DB
      SPA   End
s11:  NOP   0
      CALL  "FIND"
       IN1    :="DB303 IFM03 Stat.3".EmpfangenDaten
       IN2    :="Index_DB_Teile".Fach_11_2D_Code
       RET_VAL:=#Dummy
      L     #Dummy
      L     1
      ==I   
      SPBN  s12
      L     11
      T     #Daten_DB
      SPA   End
s12:  NOP   0
      CALL  "FIND"
       IN1    :="DB303 IFM03 Stat.3".EmpfangenDaten
       IN2    :="Index_DB_Teile".Fach_12_2D_Code
       RET_VAL:=#Dummy
      L     #Dummy
      L     1
      ==I   
      SPBN  s13
      L     12
      T     #Daten_DB
      SPA   End
s13:  NOP   0
      CALL  "FIND"
       IN1    :="DB303 IFM03 Stat.3".EmpfangenDaten
       IN2    :="Index_DB_Teile".Fach_13_2D_Code
       RET_VAL:=#Dummy
      L     #Dummy
      L     1
      ==I   
      SPBN  s14
      L     13
      T     #Daten_DB
      SPA   End
s14:  NOP   0
      CALL  "FIND"
       IN1    :="DB303 IFM03 Stat.3".EmpfangenDaten
       IN2    :="Index_DB_Teile".Fach_14_2D_Code
       RET_VAL:=#Dummy
      L     #Dummy
      L     1
      ==I   
      SPBN  s15
      L     14
      T     #Daten_DB
      SPA   End
s15:  NOP   0
      CALL  "FIND"
       IN1    :="DB303 IFM03 Stat.3".EmpfangenDaten
       IN2    :="Index_DB_Teile".Fach_15_2D_Code
       RET_VAL:=#Dummy
      L     #Dummy
      L     1
      ==I   
      SPBN  End
      L     15
      T     #Daten_DB
      SPA   End
End:  NOP   0

ich mag so endlos Bausteine eben nicht

Gruß MArco
 
Zuviel Werbung?
-> Hier kostenlos registrieren
hi SPSkiller

ja in dem Beispiel ist es so das es der gleiche DB für den Index ist, in meinem neuen Prog will ich es eleganter mit getrennten DB´s gestalten.

daher mein Wunsch nach variabler Länge, Ziel und Quelle

Gruß Marco
 
Zurück
Oben