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

Ergebnis 1 bis 5 von 5

Thema: Anfängerfrage indirekte Adressierung Array (AWL)

  1. #1
    Registriert seit
    04.01.2014
    Beiträge
    9
    Danke
    5
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Leute,
    ich habe mal eine Frage zum Zugriff auf ein Array („Meld“), bestehend aus Wörtern (Array [0..49] of Word).
    Dieses Array ist in meinem FB als statische Variable vorhanden. Da sich in diesem Array eine wechselnde Anzahl von Meldungen befinden, möchte ich indirekt adressiert (in AWL!) auf diese zugreifen. Ich habe ein sehr gutes Beispiel hierzu unter folgendem Link gefunden: indirekte Adressierung Array
    In diesem Beispiel befindet sich das Array im Temp-Bereich des FBs und kann somit mit LW (Local-Word) aufgerufen werden.
    Code:
    L LW [AR1,P#0.0]
    Aber wie funktioniert dieser Aufruf bei meinem Array („Meld“)?
    Code:
    L Meld[AR1,P#0.0] // So geht’s nicht!
    Vielen Dank für eure Hilfe!!
    Zitieren Zitieren Anfängerfrage indirekte Adressierung Array (AWL)  

  2. #2
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.181
    Danke
    923
    Erhielt 3.289 Danke für 2.658 Beiträge

    Standard

    Zitat Zitat von Vorname Nachname Beitrag anzeigen
    Code:
    L Meld[AR1,P#0.0] // So geht’s nicht!
    Erstens fehlt eine Größenangabe (B/W/D) für den Ladebefehl oder meinst Du, Deine CPU könnte das komplette Array "Meld" in den AKKU1 laden?

    Zweitens: Indirekte Adressierung in AWL kann nicht mit Symbolen umgehen, sie adressiert immer absolut.
    Um wenigstens halbwegs symbolisch das Array "Meld" zu adressieren, kann man die Anfangsadresse des Arrays "Meld" in das Adressregister laden, z.B.
    Code:
    LAR1 P##Meld         //Anfangsadresse des Arrays "Meld" in AR1 laden
    L    W [AR1,P#0.0]   //erstes Word aus dem Array in den AKKU1 laden (von Adresse Meld+0)
    PS: das Hantieren mit Arrays geht in SCL viel einfacher und sogar symbolisch.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

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

    Vorname Nachname (29.01.2014)

  4. #3
    Registriert seit
    04.01.2014
    Beiträge
    9
    Danke
    5
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Harald,

    danke für deine Antwort. (Ich glaube, ich saß schon zu lange vorm Rechner! )

    Aber ich habe dennoch eine Frage. Könntest du mir vielleicht erklären wie das mit den den folgenden Zeilen funktioniert? Ich weiß nicht wirklich, warum P#2.0 mit dem eigentlichen zugriffsbyte multipliziert werden muss. (Original Code unter: indirekte Adressierung Array )


    Code:
    NETWORK
    TITLE =Pointer bilden
     
          L     P#2.0; //Pointer mit 2 Byte laden
          L     MB    50; //Index
          *D     
          LAR1
    Vielen Dank im Voraus!

  5. #4
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.339
    Danke
    449
    Erhielt 688 Danke für 513 Beiträge

    Standard

    Interessant! Hab ich so auch noch keinen machen sehen, funktioniert aber.

    Vom Prinzip her steckt hinter P#2.0 auch nur eine gewöhnliche Zahl (müsste dez16 sein), wenn man die dann mit 50 (Annahme für MB50) multipliziert
    bekommt man dez800 was P#100.0 entspricht.

    Insofern sind arithmetische Operationen mit Pointern kein Problem, sofern richtig gemacht.
    L P#2.0
    L L#50
    +D
    ....... liefert zum Beispiel nicht das Ergebnis P#52.0

    Üblicher (für mich halt) ist es bei solchen Dingen eher wenn man zunächst mittels Berechnung die gewünschte Byteadresse bestimmt und diese dann
    mittels SLD 3 in eine Pointer wandelt und dann ins AR1 lädt.

    Aber wie gesagt funktioniert so auch problemlos und auch kürzer.

    EDIT: Des weiteren gibt es falls du dich für indirekte Adressierung interessierst 2 hervorragende FAQ-Beiträge Pointer Zeiger FIFO LIFO und dann die Fortsetzung Any-Zeiger für Datentypen.
    Geändert von RONIN (29.01.2014 um 21:07 Uhr)
    If at first you don't succeed, you're not Van Damme!
    ... or maybe using TIA!

  6. Folgender Benutzer sagt Danke zu RONIN für den nützlichen Beitrag:

    Vorname Nachname (29.01.2014)

  7. #5
    Registriert seit
    04.01.2014
    Beiträge
    9
    Danke
    5
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ah, der Groschen ist gefallen!

    besten Dank!

Ähnliche Themen

  1. Indirekte Adressierung in AWL
    Von Bensen83 im Forum Simatic
    Antworten: 16
    Letzter Beitrag: 31.01.2015, 15:58
  2. Step 7 Indirekte Adressierung
    Von firefox711 im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 16.05.2013, 07:55
  3. indirekte Adressierung AWL
    Von Tigerente1974 im Forum Programmierstrategien
    Antworten: 2
    Letzter Beitrag: 14.08.2011, 01:40
  4. Indirekte Adressierung
    Von PapaLeo im Forum Simatic
    Antworten: 19
    Letzter Beitrag: 11.05.2009, 17:52
  5. indirekte Adressierung Array
    Von Anonymous im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 06.01.2006, 10:06

Lesezeichen

Berechtigungen

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