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

Ergebnis 1 bis 8 von 8

Thema: AWL Verständnisprobem

  1. #1
    Registriert seit
    12.08.2007
    Ort
    Berlin
    Beiträge
    68
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    ich habe ein kleines Verständnisproblem mit Any Pointer Laden, folgendes Code:

    L P##DB_STA_1 // Lade Pointer auf 1. HMI-DB INPUT: ANY
    LAR1 // Lade Adressregister 1
    L D [AR1,P#6.0] // Lade DB-Nr aus Pointer
    T #BA01_Pointer.DB_No Temp: INT



    Der Code Funktioniert auch, aber warum läd es 6.0 statt 4.0?
    Oder habe ich den Aufbau des Any Pointers nicht verstanden,
    Bitte um Aufklärung.

    Und die 2. Frage:
    Wenn ich ein Any Pointer (80 Bits) in AKKU1 (32 Bits) Lade, was steht dann in AKKU1 drin?
    Zitieren Zitieren AWL Verständnisprobem  

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

    Standard

    Any siehe Anhang.
    Ich hätte die DB Nummer auch in Byte 4 und 5 erwartet aber halt als Word.
    Das DWord in Byte 6 bis 9 ist der eigentliche Pointer.
    Angehängte Grafiken Angehängte Grafiken
    If you open your Mind too much, your Brain will fall out.

  3. #3
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.163
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Zitat Zitat von Bitte_ein_Bit Beitrag anzeigen
    Der Code Funktioniert auch, aber warum läd es 6.0 statt 4.0?
    Der Code ist definitiv nicht korrekt und dürfte gar nicht funktionieren.
    Kann es sein, daß #DB_STA_1 ein Input eines als Multiinstanz aufgerufenen FB ist und der gute original-Programmierer nicht wußte (oder absichtlich ignorierte), wie man den Multiinstanz-Offset aus AR2 korrekt addiert?


    Zitat Zitat von Bitte_ein_Bit Beitrag anzeigen
    Und die 2. Frage:
    Wenn ich ein Any Pointer (80 Bits) in AKKU1 (32 Bits) Lade, was steht dann in AKKU1 drin?
    Einen ANY-Pointer kann man nicht in AKKUs laden, zumindest nicht komplett. Weil die Akkus 32 Bits groß sind, kann man nur maximal 32 Bit große Daten (z.B. Speicherbereiche) laden. Man kann auch 32 Bit große Teilstücke der ANY-Struktur in den AKKU laden und irgendwie verarbeiten - das ist aber nie der komplette ANY.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  4. #4
    Registriert seit
    12.08.2007
    Ort
    Berlin
    Beiträge
    68
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Doch der Code ist Korrekt, die Input Variable DB_ST0_1 ist als ANY deklariert, als Aktual Parameter steht dort z.B. DB601.
    Langsam habe ich es verstanden, er hätte auch L W [AR1,P#8.0] schreiben können, siehe Any-Format bei Parametertypen!

    Bei Parametertypen speichert STEP 7 den Datentyp und die Adresse der Parameter. Der Wiederholfaktor ist immer 1. Byte 4, 5 und 7 sind immer 0. Byte 8 und 9 geben die Nummer der Zeit, des Zählers oder des Bausteins an.

    Aber warum ich in einen AKKU 10 Bytes Laden kann, und später weiter verarbeiten kann....
    dass muss mir jemand bitte mal aufmalen....

  5. #5
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.163
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    OK, der (unschöne) Trick steckt darin, daß ein DWORD von den Bytes 6 bis 9 geladen wird aber nur das niederwertige WORD (was von Byte 8 und 9 stammt) weggespeichert wird.

    Wird wenigstens irgendwo geprüft, ob der Datentyp in Byte 1 = B#16#19 ist, sprich: ob tatsächlich ein BLOCK_DB übergeben wurde?


    Zitat Zitat von Bitte_ein_Bit Beitrag anzeigen
    Aber warum ich in einen AKKU 10 Bytes Laden kann, und später weiter verarbeiten kann....
    dass muss mir jemand bitte mal aufmalen....
    Nochmal: man kann nicht 10 Bytes gleichzeitig in einen Akku laden.
    Oder willst Du uns mal zeigen, wie das bei Dir trotzdem geht?

    Harald
    Geändert von PN/DP (21.03.2016 um 16:25 Uhr) Grund: Nachtrag Prüfung auf BLOCK_DB
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  6. #6
    Registriert seit
    12.08.2007
    Ort
    Berlin
    Beiträge
    68
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Was lade ich denn mit dem Code?
    L P##DB_STA_1
    bzw. was macht Siemens mit den restlichen 6 Bytes? Wenn man nur 4 Bytes laden darf/kann...

  7. #7
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.163
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    "L P##DB_STA_1" lädt die Adresse an der die Variable #DB_STA_1 beginnt.
    Code:
    L P##DB_STA_1     //lädt die Adresse der Variable #DB_STA_1
    LAR1              //lädt die Adresse in AR1
    L D [AR1, P#0.0]  //lädt die Bytes 0..3 ab der Adresse
    L W [AR1, P#4.0]  //lädt die Bytes 4..5 ab der Adresse
    L D [AR1, P#6.0]  //lädt die Bytes 6..9 ab der Adresse
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  8. #8
    Registriert seit
    12.08.2007
    Ort
    Berlin
    Beiträge
    68
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Danke Harald!!!

Ähnliche Themen

  1. Antworten: 16
    Letzter Beitrag: 23.05.2017, 16:03
  2. Step 7 Awl
    Von Eddie.$ im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 06.10.2015, 17:59
  3. Antworten: 33
    Letzter Beitrag: 31.05.2012, 19:15
  4. Der S5-AWL Befehl ":AWL"
    Von chrisPCS im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 11.11.2010, 10:33
  5. Awl
    Von Waldi_März im Forum Simatic
    Antworten: 13
    Letzter Beitrag: 17.11.2008, 11:43

Lesezeichen

Berechtigungen

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