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

Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 29

Thema: Werte in DB vergleichen und wegspeichern

  1. #11
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.794
    Danke
    398
    Erhielt 2.417 Danke für 2.013 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    ... so wie du es dargestellt hast sollte es funktionieren.
    Ich kann allerdings nicht erkennen, ob der DB12 auch 30 Elemente hat.
    Der Bereichslängenfehler deutet jedenfalls darauf hin, dass du einen Index adressieren willst, der nicht existiert ...

    Ganz generell ist es für solche Experimente immer schönen, wenn man die Variablen mit in der Instanz des auswertenden Bausteins hat - der DB1 (und eigentlich auch die Quelldaten des DB12) könnten Bestandteil der Instanz deines FB sein ...

    Gruß
    Larry

  2. #12
    Registriert seit
    23.05.2008
    Beiträge
    131
    Danke
    60
    Erhielt 11 Danke für 10 Beiträge

    Standard

    Zitat Zitat von anne Beitrag anzeigen
    Habe das Ganze jetzt nochmals versucht - habe jetzt zwei DB's.

    Aber ich bekomme einen Bereichslängenfehler und die Sps geht auf Stop!

    Mein Code:

    FOR Count := 1 TO 30 BY 1 DO

    IF DB12.Messwerte[Count].Wert1 = 33 THEN

    DB1.adr[Count] := 33;

    END_IF;

    END_FOR;


    Die beiden DB's:

    Anhang 17718Anhang 17719
    DB1.adr[Count] := 33; ist meines erachtens falsch, da hast du dann ein array mit den einträgen '0' und '33'.

    hier mal mein quelltext (ungetestet) dazu, es entsteht eine liste (speicherort) die alle positionen des suchwertes enthält.

    Code:
    // Suche nach Wert
    FOR #count := 1 TO 50 BY 1 DO
      // Initialisierung
      IF #count = 1 THEN
        #i := 1;
      END_IF;
      IF "DB_Messwerte".MW[#count] = 33  THEN
        "DB_Suchergebnisse".Speicherort[#i] := #count;
        #i := #i + 1;
      END_IF; 
    END_FOR;

  3. #13
    anne ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    01.02.2010
    Beiträge
    345
    Danke
    0
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Danke testuser für deinen Vorschlag - aber irgendwie klappt es nicht!

    Bekomme schon beim Übersetzen Fehler und weiß nicht warum?

    Habe mal alles gepostet was ich so verbrochen habe; evtl. könntest du da nochmals draufschaun, lieben Dank!


    Uebersetzung.jpgFC.jpgDB1.jpgDB12.jpg
    Grüße
    anne

  4. #14
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.794
    Danke
    398
    Erhielt 2.417 Danke für 2.013 Beiträge

    Standard

    Heißt der DB, den du für die Suchergebnisse verwendest bei dir SYMBOLISCH auch DB_Suchergebnisse ?

  5. #15
    anne ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    01.02.2010
    Beiträge
    345
    Danke
    0
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Ja, LL - heißt auch symbolisch so!
    Grüße
    anne

  6. #16
    Registriert seit
    03.04.2008
    Beiträge
    6.206
    Danke
    237
    Erhielt 818 Danke für 692 Beiträge

    Standard

    Fehlt da nicht ein BEGIN?


    bike
    "Any fool can write code that a computer can understand.
    Good programmers write code that humans can understand."
    --Martin Fowler

  7. #17
    Registriert seit
    19.06.2008
    Ort
    Ostalbkreis
    Beiträge
    3.140
    Danke
    201
    Erhielt 553 Danke für 498 Beiträge

    Standard

    Die Variable Speicherort: INT müßte doch nicht im Temp angelegt werden.

    Die Adressierung "DB_Suchergebnisse.Speicherort"[...] ist doch fix als integer im DB

    Gleiches für MW

    Die darf man doch nicht deklarieren, oder?

  8. #18
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.794
    Danke
    398
    Erhielt 2.417 Danke für 2.013 Beiträge

    Standard

    @Verpolt:
    Das sind dann aber doch 2 verschiedenen Variablen.
    Die Fehlermeldung, an der Anne hängt, besagt aber, dass SCL das Element für die Zuweisung ("DB_Suchergebnisse".Speicherort[...]) nicht adressieren kann - heißt es findet das nicht ...

    @Anne:
    In dem Script sehe ich so weiter keinen Fehler ...
    Ich würde allerdings das "i" fest vor der FOR-Schleife auf 1 setzen und mit den Kram in der Schleife mit "IF Count =1" ganz sparen. Das macht das Ganze auf jeden Fall sicherer ...

    Schön wäre es aber wenn du doch mal keine Bilder sondern den "echten" Text hier einstellen würdest ...

    Gruß
    Larry

  9. #19
    anne ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    01.02.2010
    Beiträge
    345
    Danke
    0
    Erhielt 2 Danke für 2 Beiträge

    Standard

    So, bin ein kleines Stückchen weiter...

    Habe jetzt anstatt MW im DB einfach mal Werte geschrieben und siehe da, das frißt der Editor - wurde das evtl. als Merkerwort gedeutet?
    Also "IF DB_Messwerte.Werte[count] = 33 THEN" wird akzeptiert!


    Aber schon folgt das nächste Problem:

    In dem Datenbaustein "DB_Suchergebnisse" tut sich rein gar nichts.

    Bin hier grad arg überfordert!

    1) Wenn ich über die Variablentabelle z.B. in DB12.DBB0 die 33 einschreibe, so steht unter Statuswert auch die 33. Im DB12 steht als Aktualwert aber 8481 - woher kommt das?

    2) Verstehe auch die Funktion von i nicht so ganz...

    Wenn in dem Array von DB_Messwerte an einer Stelle die Zahl 33 steht, dann sollte doch im Array von DB_Suchergebnisse an entsprechender Stelle der Wert von count stehen, oder?
    Und warum wird am Ende i stets um eins erhöht?


    Danke für eine Aufklärung meiner Mißstände...
    Geändert von anne (29.06.2012 um 09:29 Uhr)
    Grüße
    anne

  10. #20
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.794
    Danke
    398
    Erhielt 2.417 Danke für 2.013 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Anne,
    ich beziehe mich mal auf das folgende Script (von mir aus Text und nich als Bild gepostet) :
    Code:
    // Initialisieren
    #i := 1;
    FOR #count := 1 TO 50 BY 1 DO
       "DB_Suchergebnisse".Speicherort[#count] := 0;
    END_FOR;
    
    // Suche nach Wert
    FOR #count := 1 TO 50 BY 1 DO
        IF "DB_Messwerte".MW[#count] = 33  THEN
            "DB_Suchergebnisse".Speicherort[#i] := #count;
            #i := #i + 1;
       END_IF; 
    END_FOR;
    i wird auf 1 gesetzt. Das ist im Ziel-DB (also DB_Suchergebnisse der Index wohin geschrieben werden soll). Der Ziel-Speicher wird gelöscht - also alle alten Ergebnisse entfernt.
    Die Schleife durchläudt die Liste mit den erfassten Werten. Nun wird irgendwo eine 33 gefunden. Nun wird dann im Ziel-DB an Position des Index (i) die Position, wo im Quell-DB die 33 steht (count) abgelegt und der Index um 1 erhöht. Das bewirkt dann, dass die nächste gefundene 33-Position im nächsten Speicherort abgelegt wird.
    Sähe deine Liste also z.B. so aus : 1,2,33,4,5,6,7,8,9,33,... dann würde im Ziel-DB dann 3,10,... als Ergebnis stehen.

    Gruß
    Larry

Ähnliche Themen

  1. 3 Werte vergleichen
    Von chipset im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 24.04.2012, 21:19
  2. Antworten: 9
    Letzter Beitrag: 12.04.2012, 22:42
  3. 8 Integer Werte vergleichen
    Von HarryH im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 20.09.2011, 08:00
  4. Antworten: 27
    Letzter Beitrag: 07.04.2011, 22:56
  5. Werte in einem DB suchen und vergleichen
    Von Kodan im Forum Simatic
    Antworten: 48
    Letzter Beitrag: 25.02.2009, 18:06

Lesezeichen

Berechtigungen

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