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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: DB mit 1000 Strings durchsuchen...?!?!

  1. #1
    Registriert seit
    11.08.2006
    Beiträge
    10
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich bin noch neu hier bei EUCH.

    Ich knabbere schon seit längere Zeit an ein Problem:

    -einen Datenbaustein mit 1000 Strings[4] durchsuchen und
    mit einen eingelesenen Wert (CP340) 1 String[4] auf vorhandensein
    prüfen

    Mein Ansatz ist eine Schleife die ich programmiert habe,
    leider wird diese nur 1mal durchlaufen ::(((
    ich finde einfach das Problem nicht...
    und auserdem 1000 Strings...was sagt den da die Zykluszeit einer
    CPU314 ????

    Vielleicht habt Ihr eine bessere Idee und oder Lösungansätze???
    Zitieren Zitieren DB mit 1000 Strings durchsuchen...?!?!  

  2. #2
    Registriert seit
    06.10.2003
    Beiträge
    3.410
    Danke
    449
    Erhielt 504 Danke für 407 Beiträge

    Standard

    Hallo Klausi,

    Zitat Zitat von Klausi Beitrag anzeigen
    ...Mein Ansatz ist eine Schleife die ich programmiert habe, leider wird diese nur 1mal durchlaufen ::(((
    ich finde einfach das Problem nicht...
    Und wie soll man dir da helfen? Irgendwer würde den Fehler sicherlich finden wenn er den Code von dir sehen würde .

    Zitat Zitat von Klausi Beitrag anzeigen
    ..einen Datenbaustein mit 1000 Strings[4] durchsuchen und mit einen eingelesenen Wert (CP340) 1 String[4] auf vorhandensein prüfen..
    ...und auserdem 1000 Strings...was sagt den da die Zykluszeit einer CPU314 ????
    Für die Zykluszeit ist so etwas natürlich nicht so gut. Da die Strings alle die Länge 4 haben, könnte man die Längenangaben der Strings beim Vergleichen ausser acht lassen und einfach nur die Bitmuster der vier Byte als Doppelwort vergleichen (nicht als String). Desweiteren könnte man u.U. den Vergleich der 1000 Strings auf mehrere Zyklen verteilen.


    Gruß, Onkel
    Es gibt viel mehr Leute, die freiwillig aufgeben, als solche, die echt scheitern.
    Henry Ford

  3. #3
    Registriert seit
    28.06.2006
    Ort
    Königreich Neuseeland
    Beiträge
    2.027
    Danke
    133
    Erhielt 96 Danke für 76 Beiträge

    Standard

    Zitat Zitat von Klausi Beitrag anzeigen
    Mein Ansatz ist eine Schleife die ich programmiert habe,
    leider wird diese nur 1mal durchlaufen ::(((
    ich finde einfach das Problem nicht...
    Das Problem ist klar: Du hast was falsch programmiert.
    Ansonsten: Siehe die guten Tipps von Onkel Dago.

  4. #4
    Klausi ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    11.08.2006
    Beiträge
    10
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hier ist der Code:

    UN E 0.0
    SPB end
    //*
    AUF "Database"
    L 0
    SLD 3
    LAR1
    //*
    loop: L DBD [AR1,P#0.0]
    L DB10.DBD 2
    ==D
    SPB end
    L DBD [AR1,P#0.0]
    T #int1
    TAR1
    L P#4.0
    +D
    LAR1
    SPA loop
    //*
    end: NOP 0
    SET
    S M 0.0

    sobald ich den e0.0 betätige geht die CPU in Stop????

    Bitte um Hilfe!!!!

  5. #5
    Registriert seit
    20.06.2003
    Ort
    Sauerland.NRW.Deutschland
    Beiträge
    4.850
    Danke
    78
    Erhielt 800 Danke für 543 Beiträge

    Standard

    Zitat Zitat von Klausi Beitrag anzeigen
    Hier ist der Code:
    //*
    loop:
    AUF "Database"
    L DBD [AR1,P#0.0]
    L DB10.DBD 2
    ==D
    da dein string vermutlich nicht im db10 liegt, musst du den db wieder öffnen. ansonsten versucht L DBD [AR1,P#0.0] auf db10 zuzugreifen.
    .
    mfg Volker .......... .. alles wird gut ..

    =>Meine Homepage .. direkt zum Download

    Meine Definition von TIA: Total Inakzeptable Applikation

  6. #6
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.220
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    @Klausi
    Weiterhin hast du nur eine Abbruchbedingung, wenn der String erkannt wird. Ist der String nicht in deiner Tabelle verzeichnet, läuft dein Pointer irgenwann ans dem DB (der DB ist dann zu kurz) und deine CPU geht in STOP. (Stopursache über Strg D)

    Ich würde folgendes vorschlagen:

    Du legst eine stat Variable an, in der du die momentan zu vergleichende DW - Nummer ablegst. (Daraus kann man dann auch die Adresse für AR1 ableiten). Weiterhin eine stat Var Busy, die anzeigt, daß ein Vergleich läuft. Mit dem Loop-Befehl programmierst du eine Schleife für z.Bsp. 50 Durchläufe (temp Var Zaehler und stat Var Gesamtzaehler).

    Bei Start des FC kontrollierst du Busy
    Ist Busy 0, dann Neuststart mit den Startwerten (0 für Zaehler und Gesamtzaehler)
    Ist Busy 1, dann Schleife normal durchlaufen mit den stat.Variablen.

    Jeder Durchlauf vergleicht 50 Strings. Danach wird der Loop beendet, das restliche SPS-Programm kann abgearbeitet werden, Busy ist auf 1.
    Bei jedem Nächsten SPS-Zyklus weitere 50 Strings.
    Wird ein String gefunden, Ausgabe des Ergebnis und Busy auf 0 (evtl. noch ein Fertigbit setzen).
    Wenn die stat Var Gesamtzaehler auf 1000 hochgezählt hat, Busy ebenfalls auf 0, dann ist der String nicht im DB (Bit für fehlenden String setzen).

    Ein neuer Vergleich wird nur gestartet, wenn Busy auf 0 ist.

    Bei 50 Vergleichen und einer Zykluszeit von 20ms hast du den DB in einer Sekunde durch, deine Zykluszeit aber nicht allzusehr belastet.
    Geändert von Ralle (15.08.2006 um 09:58 Uhr)
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  7. #7
    Klausi ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    11.08.2006
    Beiträge
    10
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Volker der Tipp war schon gut,
    leider durchsucht die Schleife nicht den DB"Database"::((

    Der Code wird nur 1 mal durchlaufen...der Offsetwert ändert
    sich nicht...müsste man ja in der Onlineansicht im Adressregister sehen
    oder ???

  8. #8
    Klausi ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    11.08.2006
    Beiträge
    10
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ralle, das ist eine sehr guter Ansatz

    Ich hoffe das ich die Sache irgendwie hinbekomme.

    Für ein Codebeispiel wäre ich sehr dankbar.

    Gruss
    Klausi

  9. #9
    Registriert seit
    20.06.2003
    Ort
    Sauerland.NRW.Deutschland
    Beiträge
    4.850
    Danke
    78
    Erhielt 800 Danke für 543 Beiträge

    Standard

    welchen sinn haben diese zeilen?
    L DBD [AR1,P#0.0]
    T #int1

    den index kannst du auch so erhöhen
    L P#4.0
    +AR1

    mache ich im folgenden beispiel aber anders

    Code:
          UN    E      0.0
          SPB   exit
          CLR   
          =     M      0.0
          L     0
          T     #index
    loop: NOP   0
          SLD   3
          LAR1  
          AUF   DB    11
          L     DBD [AR1,P#0.0]
          L     DB10.DBD    2
          ==D   
          =     #gefunden
          SPB   end
          L     4
          L     #index
          +I    
          T     #index                      //index erhöhen
          L     4000                        //letztes dbd
          >=I   
          SPB   exit
          TAK                               //neuen index zurückholen
          SPA   loop
    //*
    end:  NOP   0
          L     #index                      //gefunden in dbd x
          T     #int1
    exit: U     #gefunden
          S     M      0.0
    .
    mfg Volker .......... .. alles wird gut ..

    =>Meine Homepage .. direkt zum Download

    Meine Definition von TIA: Total Inakzeptable Applikation

  10. #10
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.220
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    @Klausi

    Volkers Code ist der "innere" Teil meines Vorschlags, Index allerdings auf 4*50=200. Außen herum mußt du jetzt noch die Start-Routine und einen Gesamtindex legen, so daß also nach jedem Durchlauf der Gesamtindex um 200 höher ist. Der Gesamtindex muß Statisch (DB oder Merker-Wort) sein, da er im nächsten SPS-Zyklus seinen alten Wert noch haben muß. Ebenso das Busy-Bit. Versuchs mal und stell den Code hier rein, dann sehen wir weiter.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

Ähnliche Themen

  1. LG-Ni 1000
    Von Golden Egg im Forum Elektronik
    Antworten: 3
    Letzter Beitrag: 21.03.2011, 20:14
  2. DB's nach Strings durchsuchen
    Von Flying Maulwurf im Forum Simatic
    Antworten: 15
    Letzter Beitrag: 10.05.2010, 14:42
  3. Suche Schaltschrank (ca 1000 x 1000 x 300)
    Von diabolo150973 im Forum Suche - Biete
    Antworten: 8
    Letzter Beitrag: 12.03.2008, 19:31
  4. Bcd >= 1000 ??
    Von borstek im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 09.10.2007, 15:42
  5. DB durchsuchen
    Von puehri im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 05.12.2005, 14:46

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •