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

Seite 2 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 11 bis 20 von 37

Thema: Indirekte Adressierung mit AWL

  1. #11
    Registriert seit
    02.06.2014
    Beiträge
    46
    Danke
    21
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von joe_bvb Beitrag anzeigen
    Die Lösung habe nicht ganz verstanden (Wie mache ich die Schleife in AWL). Ich bin total neu in der SPS
    AUF "DB_AUFGABE_1" //Global Datenbaustein DB100
    L P#0.0
    T MD 10
    L 0
    T MW 30
    hier: T DBW [MD 10]
    L MW 30
    L 2
    +I
    L MD 10
    L P#2.0
    +D
    T MD 10
    L MW 30
    L 2
    +I
    T MW 30
    LOOP hier

    Das ist der Ansatz, den ich gemacht habe aber hat nicht funktioniert
    Geändert von joe_bvb (04.06.2014 um 12:50 Uhr)

  2. #12
    Registriert seit
    02.06.2014
    Beiträge
    46
    Danke
    21
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von PN/DP Beitrag anzeigen
    Guckst Du in der AWL-Hilfe unter "indirekte Adressierung". Ich empfehle die "Speicherindirekte Adressierung".

    Lösung ohne rekursiv:
    Mache eine Schleife von 0 bis 999. Der Schleifenindex * 2 ist der Wert, der in das DBW geschrieben werden soll. Der Schleifenindex * 16 ist die DBW-Adresse ( T DBW [#DW_Address] )

    Wer denkt sich solche unverständlichen und vielleicht sogar unmöglichen ("rekursiv") Aufgaben aus???

    Harald
    AUF "DB_AUFGABE_1" //Global Datenbaustein DB100
    L P#0.0
    T MD 10
    L 0
    T MW 30
    hier: T DBW [MD 10]
    L MW 30
    L 2
    +I
    L MD 10
    L P#2.0
    +D
    T MD 10
    L MW 30
    L 2
    +I
    T MW 30
    LOOP hier

    Das ist der Ansatz, den ich gemacht habe aber hat nicht funktioniert
    Geändert von joe_bvb (04.06.2014 um 12:50 Uhr)

  3. #13
    Registriert seit
    08.04.2008
    Ort
    Köln
    Beiträge
    844
    Danke
    39
    Erhielt 244 Danke für 199 Beiträge

    Standard

    Hallo Joe,

    du vermischt die Adressierung über Pointer (L P#0.0) mit der Speicherindirekten Adressierung (T DBW [MD 10]).
    Versuchs mal mit L 0 bzw. L 2 statt L P#0.0/L P#2.0.
    Und dann lies noch mal die Beiträge durch, auf die Volker in #7 verlinkt hat.

    Grüße
    Gebs

  4. Folgender Benutzer sagt Danke zu Gebs für den nützlichen Beitrag:

    joe_bvb (04.06.2014)

  5. #14
    Registriert seit
    02.06.2014
    Beiträge
    46
    Danke
    21
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von Gebs Beitrag anzeigen
    Hallo Joe,

    du vermischt die Adressierung über Pointer (L P#0.0) mit der Speicherindirekten Adressierung (T DBW [MD 10]).
    Versuchs mal mit L 0 bzw. L 2 statt L P#0.0/L P#2.0.
    Und dann lies noch mal die Beiträge durch, auf die Volker in #7 verlinkt hat.

    Grüße
    Gebs
    Ich habe es versucht. Das ging nicht

  6. #15
    Registriert seit
    08.04.2008
    Ort
    Köln
    Beiträge
    844
    Danke
    39
    Erhielt 244 Danke für 199 Beiträge

    Standard

    Hallo Joe,

    ich hab' leider nur auf die Adressierung geguckt.
    Deine Schleife ist auch noch nicht ganz in Ordnung:
    Wenn Du LOOP benutzt, brauchst Du natürlich noch einen Schleifenzähler.
    Du kannst aber auch statt des LOOPs einen bedingten Sprung verwenden.
    Dazu musst Du Das MW 30 mit dem höchst möglichen Wert vergleichen.

    Grüße
    Gebs

  7. #16
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.297
    Danke
    932
    Erhielt 3.321 Danke für 2.683 Beiträge

    Standard

    Joe macht das schon total richtig. Auch bei Speicherindirekter Adressierung wird mit Pointer P#.. gearbeitet. Und die Beiträge von Volker verkomplizieren das ganze nur unnötig...

    @joe_bvb
    Dein Fehler ist die Verwendung von LOOP. LOOP ist für herunterzählende (decrementierende) Schleifen gemacht, Deine Schleife arbeitet aber hochzählend (incrementierend). Entweder Du nimmst statt LOOP einen Vergleich, ob MW30 >= 1000 (oder 2000?) ist und wenn nicht einen Sprung zurück zum Schleifenanfang, oder Du nimmst noch eine zusätzliche Zählvariable nur für das LOOP, welche mit 1000 anfängt und durch den LOOP-Befehl heruntergezählt wird.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  8. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    joe_bvb (04.06.2014)

  9. #17
    Registriert seit
    08.04.2008
    Ort
    Köln
    Beiträge
    844
    Danke
    39
    Erhielt 244 Danke für 199 Beiträge

    Standard

    Zitat Zitat von PN/DP Beitrag anzeigen
    Joe macht das schon total richtig. Auch bei Speicherindirekter Adressierung wird mit Pointer P#.. gearbeitet.
    Stimmt!
    Ich bin noch nicht ganz wach! (Bin gerade erst aufgestanden! Habe endlich Urlaub)
    Ich sollte erst dann Beiträge schreiben, wenn ich den 1. Liter Kaffee getrunken habe!

    Grüße
    Gebs
    Geändert von Gebs (04.06.2014 um 13:11 Uhr)

  10. #18
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.297
    Danke
    932
    Erhielt 3.321 Danke für 2.683 Beiträge

    Standard

    Zitat Zitat von joe_bvb Beitrag anzeigen
    AUF "DB_AUFGABE_1" //Global Datenbaustein DB100
    L P#0.0
    T MD 10
    L 0
    T MW 30

    hier: T DBW [MD 10]
    // L MW 30
    // L 2
    // +I


    L MD 10 //Adresspointer um P#2.0 eine Wordadresse weiterstellen
    L P#2.0
    +D
    T MD 10

    L MW 30 //Wertzähler um 2 erhöhen
    L 2
    +I
    T MW 30
    L 2000
    <I
    TAK //MW30 zurück in AKKU1
    SPB hier

    // LOOP hier
    .

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  11. #19
    Registriert seit
    02.06.2014
    Beiträge
    46
    Danke
    21
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von PN/DP Beitrag anzeigen
    .

    Harald
    Ich habe die Aufgabe jetzt so verbessert:


    Anf: AUF "DB_AUFGABE_1" //Global Datenbaustein DB100
    L 0
    T MD 10
    L 0
    T MW 30
    hier: T DBW [MD 10]
    L MW 30
    L 2
    +I
    L MD 10
    L P#2.0
    +D
    T MD 10
    L MW 30
    L 2
    +I
    T MW 30
    L MW 30
    L 1000
    >=I
    SPB Anf
    SPA hier

  12. #20
    Registriert seit
    08.04.2008
    Ort
    Köln
    Beiträge
    844
    Danke
    39
    Erhielt 244 Danke für 199 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von joe_bvb Beitrag anzeigen
    Ich habe die Aufgabe jetzt so verbessert:


    Anf: AUF "DB_AUFGABE_1" //Global Datenbaustein DB100
    L 0
    T MD 10
    L 0
    T MW 30
    hier: T DBW [MD 10]
    // L MW 30 Das hier kann weg.
    // L 2
    // +I

    L MD 10
    L P#2.0
    +D
    T MD 10
    L MW 30
    L 2
    +I
    T MW 30
    L MW 30
    L 1000
    >=I
    SPB Anf
    SPA hier
    Es sieht fast gut aus.
    Wenn Du bei MW 30 >= 1000 auf Anf springst, wirst Du den Baustein nie verlassen! => Zykluszeitüberschreitung
    Entweder springst Du an dieser Stelle hinter "SPA hier", oder
    Du vergleichst MW 30 auf <= 1000 und springst bedingt zu "hier". Der Sprung zu Anf entfällt dann.
    Und Du musst natürlich den Wert, den Du bei "hier" in Deinen DB schreiben willst vor dem Sprung in den Akku 1 laden.

    (Harald hat ja schon einen funktionierenden Code geschrieben.)

    Grüße
    Gebs
    Geändert von Gebs (04.06.2014 um 13:43 Uhr)

Ähnliche Themen

  1. Indirekte Adressierung in AWL
    Von Bensen83 im Forum Simatic
    Antworten: 16
    Letzter Beitrag: 31.01.2015, 15:58
  2. Step 7 Anfängerfrage indirekte Adressierung Array (AWL)
    Von Vorname Nachname im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 29.01.2014, 21:32
  3. indirekte Adressierung AWL
    Von Tigerente1974 im Forum Programmierstrategien
    Antworten: 2
    Letzter Beitrag: 14.08.2011, 01:40
  4. Indirekte Adressierung FB mit Pointern
    Von kliebisch.m im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 28.10.2010, 12:06
  5. Indirekte Adressierung mit S5!!
    Von Anonymous im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 20.10.2004, 15:15

Lesezeichen

Berechtigungen

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