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

Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 29 von 29

Thema: Werte in DB vergleichen und wegspeichern

  1. #21
    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


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Larry Laffer Beitrag anzeigen
    ... und der Index um 1 erhöht. Das bewirkt dann, dass die nächste gefundene 33-Position im nächsten Speicherort abgelegt wird.

    Gruß
    Larry
    Lieben Dank für deine ausführliche Beschreibund, LL.

    Leider hakt's bei mir aber noch immer:

    1) Wird beispielsweise in Zeile 20 ein Eintrag 33 gefunden, so wird die 20 doch auf "i" übertragen; d.h, im Ziel-DB steht dann in Zeile 20 eine 20. Wird der nächste Eintrag in Zeile 40 gefunden, so steht im Ziel-DB an entsprechender Stelle die 40. Warum muss dann der Index von i immer um 1 erhöht werden?

    2) Wie kann der Ziel-Speicher gelöscht werden; muss da die FC erneut aufgerufen werden?

    3) Wird die Schleife eigentlich nur einmal durchlaufen und bedarf dann wieder eines neuen Anstoßes?
    Geändert von anne (29.06.2012 um 11:59 Uhr)
    Grüße
    anne

  2. #22
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.399 Danke für 1.999 Beiträge

    Standard

    Liebe Anne,

    vielleicht liest du dir meine Beschreibung zu dem von mir gegebenen Code noch einmal durch. Sie beinhaltet nämlich deine Fragen 1 und 2.
    Zu Frage 3 : Da du keine Flanke in dem FC hast wird das Ganze immer und immer wieder wiederholt. Soll es nur einmal durchlaufen und dann erstmal nicht mehr oder ggf. nur auf Anforderung dann mußt du dir da noch eine Freigabe mit Flanke drum-herum bauen - also vielleicht so :
    Code:
    if Auswerten an Not Auswerten_OK then
    
    // den bisherigen Code
    
    End_If ;
    Auswerten_OK := Auswerten ;
    
    // Auswerten wäre eine BOOL-IN-Variable
    // Auswerten_OK wäre eine BOOL IN_OUT-Variable
    Gruß
    Larry

  3. #23
    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

    Gut LL,

    schaue mir das nochmals in Ruhe an - momentan funktioniert es leider noch immer nicht... ich bekomme immer nur einen Eintrag 7 in DB1.DBB0 egal wo die 33 im DB12 steht.

    Melde mich also nochmals, wenn ich es besser blicke... hoffe das passiert noch!


    Also erst mal besten Dank!
    Grüße
    anne

  4. #24
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.399 Danke für 1.999 Beiträge

    Standard

    Zitat Zitat von anne Beitrag anzeigen
    ... 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?
    Hallo Anne,
    so langsam blicke ich dahinter.
    Dein DB12 ist als ARRAY[1..50] of INT (!!! INTEGER !!!) deklariert. Wenn du also da die Speicherstellen vollschreiben willst dann solltest du beachten, das du auch DBW's (!!!) schreiben mußt. Solltest du das mit den restlichen Speicherstellen auch so gemacht haben dann verstehe ich, wieso der FC nicht funktioniert.

    Würdest du vielleicht bitte noch einmal dein ganze Baustein-Sammelsurium (im aktuellen Stand) hier veröffentlichen ?

    Gruß
    Larry

  5. #25
    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

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    Hallo Anne,
    so langsam blicke ich dahinter.
    Dein DB12 ist als ARRAY[1..50] of INT (!!! INTEGER !!!) deklariert. Wenn du also da die Speicherstellen vollschreiben willst dann solltest du beachten, das du auch DBW's (!!!) schreiben mußt.

    Gruß
    Larry
    Hi Larry,

    lieben Dank für deine hilfreiche Unterstützung! So, der Baustein funktioniert jetzt erst einmal...

    1) Ja stimmt, du hast Recht - ich hatte keine DBW's geschrieben sondern DBB's. Hm, somit habe ich vermutlich immer nur das linke Byte beschrieben - warum da dann aber 8448 drin steht, wenn ich die 33 einschreibe; keine Ahnung!

    2) Könnte man das Ganze beispielsweise auch so programmieren, dass der Zahleneintrag im DB_Suchergebnisse immer genau in der Zeile vorgenommen wird, in der im DB_Messwerte die Zahl 33 gerade gefunden wurde?
    Geändert von anne (30.06.2012 um 23:17 Uhr)
    Grüße
    anne

  6. #26
    Registriert seit
    23.05.2008
    Beiträge
    131
    Danke
    59
    Erhielt 11 Danke für 10 Beiträge

    Standard

    zu 2) ja, kann man.
    Code:
    // Initialisieren 
    #i := 0; 
    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[#count] := #count;
    // dafür nicht benötigter quellcode
    //      "DB_Suchergebnisse".Speicherort[#i] := #count;
        #i := #i + 1; // i zählt jetzt die anzahl der einträge; habe auch die initialisierung geändert
      END_IF;
    END_FOR;

  7. #27
    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

    Lieben Dank testuser,

    Programm klappt prima. Denke habe das Prinzip dank eurer Hilfe jetzt soweit verstanden - lang genug hat's ja gedauert...


    Vermutlich kann ich mir den Eintrag von #i (Anzahl der Einträge) im DB nicht anzeigen lassen, oder - denn dann wären ja die Bausteinlängen beider DB's unterschiedlich?
    Grüße
    anne

  8. #28
    Registriert seit
    23.05.2008
    Beiträge
    131
    Danke
    59
    Erhielt 11 Danke für 10 Beiträge

    Standard

    warum müssen die beiden DBs gleich lang sein?!?

    meines erachtens sind sie eh schon unterscheidlich lang, DB_Messwerte ist ein array of udt und DB_Sucheregebnisse ist ein array of int. unter umständen könnten die jetzt auch gleich lang sein, aber in deinem ersten beitrag stand was von einem struct mit 12 messwerten.

    ich würde einfach noch ein int im DB_Suchergebnisse anlegen und #i nach dem ende der for-schleife zuweisen.

  9. #29
    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


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von testuser Beitrag anzeigen
    warum müssen die beiden DBs gleich lang sein?!?
    Ähm, also ich meinte eigentlich den Zugriff auf den Bereich.

    Aber stimmt, der hat ja damit nichts zu tun - habe "den Zähler" jetzt mal in den DB mit eingefügt und es klappt prima.

    Danke!
    Grüße
    anne

Ä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
  •