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

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

Thema: Maximumabfrage

  1. #1
    Registriert seit
    17.08.2004
    Beiträge
    81
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,


    Ich habe folgendes Problem:
    Ich habe eine Reihe von Eingabefelder für Zahlen (DB4.DBW2, DB4.DBW6, DB4.DBW10,....DB4.DBW86 )
    Ich möchte jetzt aus dieser Reihenfolge die höchst eingegebene Zahl ermitteln.
    Ich weis, wie man das in C++ mit einer for - Schleife löst, hab aber keine Ahnung wie ich das mit S7 und indirekter Adressierung lössen könnte.

    Vielleicht könnte mir jemand einen Hinweis geben.

    Beste Grüsse
    Chivas
    Zitieren Zitieren Maximumabfrage  

  2. #2
    Registriert seit
    20.01.2005
    Beiträge
    179
    Danke
    37
    Erhielt 13 Danke für 10 Beiträge

    Standard

    Hallo,
    such mal unter Bubblesort im Archiv, der Zottel hat da mal ein geniales Beispiel gemacht.
    http://www.sps-forum.de/phpBB2/viewt...ght=bubblesort

    schöne Ostern
    Michael

  3. #3
    Registriert seit
    07.03.2004
    Beiträge
    4.369
    Danke
    946
    Erhielt 1.158 Danke für 831 Beiträge

    Standard

    benutze doch ST (SCL) da gibt es auch FOR-Schleifen
    If you open your Mind too much, your Brain will fall out.

  4. #4
    chivas ist offline Benutzer
    Themenstarter
    Registriert seit
    17.08.2004
    Beiträge
    81
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Guten Morgen,

    vielen Dank für Euere Antworten und Denkanstösse.

    Ich habe es einmal so versucht mit der indirekten Adressierung:

    Code:
           L 0
           T DB1.MAXZAHL
    
            L 2
            T DB1.Abfragezähler
    
    schl: L DB4.DBW[DB1.Abfragezähler]
            L DB1.MAXZAHL
            >
            SPBN ADDR  
     
            L DB4.DBW[DB1.Abfragezähler]
            T DB1.MAXZAHL
    
    addr: L DB1.Abfragezähler
             L 4
             +I
             T DB1.Abfragezähler
             ==I
             SPBN schl
    Da ich noch nie mit indirekter Adressierung zu tun hatte, würde ich mich freuen, wenn mir jemand sagen würde, ob diese Lösung funktionieren würde.

    mfg chivas

  5. #5
    Registriert seit
    23.11.2004
    Beiträge
    347
    Danke
    2
    Erhielt 28 Danke für 28 Beiträge

    Standard

    Hallo Chivas,

    der Pointer ist 32-bit groß und die Bits 0-3 repräsentieren die Bitadresse.
    Es müsste also statt L 0, L 2 oder L 4 lauten:
    L P#0.0, L P#2.0 oder L P#4.0;
    oder nach den Ladebefehlen einen SLD 3-Befehl einfügen.
    Bei der Arbeit mit Byte-befehlen muss die Bitadresse immer "0" sein.

    Ich hoffe, ich habe mich verständlich ausgedrückt.

    Gruß
    raika

  6. #6
    Registriert seit
    20.10.2004
    Beiträge
    650
    Danke
    5
    Erhielt 26 Danke für 26 Beiträge

    Standard

    hallöchen

    hier dein verbesserte programm das es etwas verständlicher ist

    die zeiger gleich als pointer angeben dann kannst du die 3 bits vergessen und er macht das von sich aus
    Angehängte Grafiken Angehängte Grafiken

  7. #7
    chivas ist offline Benutzer
    Themenstarter
    Registriert seit
    17.08.2004
    Beiträge
    81
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Vielen Dank für Euere Antworten!

    Ihr habt mir beide weitergeholfen.
    Eine Frage hätte ich noch zu dem Pointer, der mit die Abfrage macht, alle Datenwörter abgefragt. Mein letztes Datenwort ist DBD86. Wenn ich mit L P#86.0 abfrage hört er schon viel zu früh auf mit den Abfragen.

    mfg chivas

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

    Im Beispiel von KPeter werden Datenwörter ausgelesen (in Datenwort-Schritten, alle 2 Byte)

    Du hattest folgendes geschrieben:
    Ich habe eine Reihe von Eingabefelder für Zahlen (DB4.DBW2, DB4.DBW6, DB4.DBW10,....DB4.DBW86 )
    Das L P#2.0 also durch L P#4.0 ersetzen.

    Wenn ich mit L P#86.0 abfrage hört er schon viel zu früh auf mit den Abfragen
    Überprüfe das nocheinmal, er hört auf, wenn der Zeiger P#86.0 erreicht hat. Da du momentan in DW-Schritten abfragst, sollte das eigentlich um das Doppelte zu oft sein und nicht zu wenig.
    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

  9. #9
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard

    Zitat Zitat von chivas
    Vielen Dank für Euere Antworten!

    Ihr habt mir beide weitergeholfen.
    Eine Frage hätte ich noch zu dem Pointer, der mit die Abfrage macht, alle Datenwörter abgefragt. Mein letztes Datenwort ist DBD86. Wenn ich mit L P#86.0 abfrage hört er schon viel zu früh auf mit den Abfragen.

    mfg chivas
    1. Um wieviel früher? Wenn es um 1 zu früh stoppt (bei DBD82), brauchst du > statt >=.
    2. Du kannst dir einen Schleifendurchlauf sparen, indem du MAXZAHL auf den 1.Wert statt auf 0 setzt und mit dem 2. Element beginnst.
    3. Wenn du immer eine feste Anzahl Werte hast, kannst du natürlich auch die Schleife sparen und Code für 42 Vergleiche schreiben. Das ist zwar lang, aber schneller

  10. #10
    chivas ist offline Benutzer
    Themenstarter
    Registriert seit
    17.08.2004
    Beiträge
    81
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Im Beispiel von kpeter habe ich gemerkt, dass die Reihenfolge anders ist als wie ich es brauche. Dies habe ich bereits geändert.

    Die Schleife wurde um 1 früher beendet. Der Grund war, weil ich am Schluss den Zähler um 4 erhöht habe und danach den Endwert abgefragt habe - deshalb hat er den letzten Vorgang nicht mehr abgearbeitet.

    @Zottel:

    Da ich mich jetzt ein kleinwenig auskenne mit der indirekten Adressierung bin ich wohl schneller damit als mit der ganzen Tipperei

    Danke an ALLE!

    eine Frage noch: Als was definiere ich den Pointer in einem DB?
    Wenn ich Ihn als Pointer anlegen will, lässt es Step 7 nicht zu

    mfg chivas

Lesezeichen

Berechtigungen

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