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

Ergebnis 1 bis 3 von 3

Thema: Zeiger auf Adresse in geöffneten DB

  1. #1
    Registriert seit
    05.06.2013
    Beiträge
    21
    Danke
    0
    Erhielt 4 Danke für 3 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo, Ein DB wird mit dem Befehl "AUF" geöffnet in einem FC. Im nächsten Netzwerk steht folgendes.

    LAR1 P##TW_DB_zeiger // Adresse von Zeiger "TW_DB_zeiger" laden
    L B#16#10 // Kennung 10 laden für ANY-Pointer
    T LB [AR1,P#0.0] // und an Lokalstack Offset 0 transferieren
    L B#16#2 // Kennung 2 für Datentyp BYTE laden
    T LB [AR1,P#1.0] // und an Lokaldatenstack Offset 1 transferieren
    L 1246 // Anzahl Bytes im DB als Wiederholungsfaktor laden
    T LW [AR1,P#2.0] // und an Lokaldatenstack Offset 2 transferieren
    L #zeig_DB_TW // DB-Nummer laden
    T LW [AR1,P#4.0] // und an Lokaldatenstack Offset 4 transferieren
    L 2#1000010000000000 // Datenbereichstyp DB-Register übergeben
    T LW [AR1,P#6.0] // und an Lokaldatenstack Offset 6 transferieren
    L P#0.0 // Anfang laden
    T LW [AR1,P#8.0] // und an Lokaldatenstack Offset 6 transferieren
    CALL "BLKMOV"
    SRCBLK :=#TW_DB_zeiger
    RET_VAL:=#fehler
    DSTBLK :=P#DB400.DBX0.0 BYTE 1246

    Ich habe verstanden der Hilfzeiger #TW_DB_zeiger zeigt zuerst auf eine Adresse des geöffneten DB, nämlich auf das 16 Byte oder Bit. Mit der Adressenaufteilung in einem DB habe ich mich noch nicht näher beschäftigt. Denn die Zeile mit "T LB[AR1, P#0.0] bewirkt eine Zeigerzuweisung auf das 16 Byte des geöffneten DB. Danach der Hilfszeiger zeigt auf das Byte 32 und P#2.0 auf Byte 1246 usw. Ich denke ich habe einige Verständnissschwierigkeiten, denn warum wird diese mehreren Zeigerzuweisungen vorgenommen, ohne weitere Ausführungen.
    Genauso mir ist auch nicht verständlich die "BLKMOV" Ausführung.
    Die Adresse wohin die Daten kopiert werden ist exakt zugewiesen "DSTBLK":=P#DB400.DBX0.0 nämlich ab dieser Adresse die nächsten 1246 Bytes werden beschrieben mit dem kopierten Daten aus der Adressenzuweisung von "SRCBLK". Aber diese Adressenzuweisung des Hilfsmerker reicht nach meinem momentanen Wissensstand nicht aus.

    Bei mir funktioniert die Returntaste nicht. Muss irgendeine Einstellung aktiviert werden, damit die Returntaste einen Zeilenumbruch ermöglicht.


    Danke für Eure Hilfe.
    Zitieren Zitieren Zeiger auf Adresse in geöffneten DB  

  2. #2
    Registriert seit
    29.03.2004
    Beiträge
    5.742
    Danke
    143
    Erhielt 1.688 Danke für 1.226 Beiträge

    Standard

    In deinem Programmstück wird lediglich eine Variable vom Datentyp ANY dynamisch zusammengebaut, bzw. das einizg dynamische ist die DB-Nummer.

    Die Variable #TW_DB_zeiger wird aller Wahrscheinlichkeit nach eine Temp-Variable von Datentyp Any sein.
    Mit LAR1 P##TW_DB_zeiger wird dann die Adresse dieser Variable in das Adressregister AR1 geladen. Mit den folgenden Befehlen kann dann auf AR1 + Offset auf diese Werte zugegriffen werden.
    Wenn #TW_DB_zeiger z.B. an Temp-Adresse 10 liegt, wird mit LB [AR1,P#1.0] auf AR1 + Offset 1.0, also auf Adresse LB 11 zugegriffen.

    Schau dir mal in der Hilfe des Simatic Managers den Aufbau des Datentyps Any an, da steht was die einzelnen Bytes bedeuten.

  3. #3
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.207
    Danke
    927
    Erhielt 3.293 Danke für 2.662 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    In TEMP gibt es eine ANY-Variable "TW_DB_zeiger"
    In dieser wird ein ANY-Pointer DB[#zeig_DB_TW].DBX0.0 BYTE 1246 erzeugt

    Dein Baustein bekommt also die (variable) Nummer eines DB übergeben und kopiert dann per BLKMOV die ersten 1246 Bytes (DBB0...DBB1245) aus diesem DB in den DB400 (DBB0...DBB1245)

    Der "AUF"-Befehl im Netzwerk vorher hat mit diesem Code nichts zu tun.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

Ähnliche Themen

  1. Antworten: 15
    Letzter Beitrag: 09.09.2011, 10:56
  2. Zeiger/Pointer auf eine Struktur
    Von logo78 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 29.03.2009, 17:09
  3. Adresse des geöffneten DBs ermitteln
    Von Woto im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 29.09.2008, 12:09
  4. speicherdirekte Adressierung (Zeiger) auf DB
    Von Incubant im Forum Simatic
    Antworten: 13
    Letzter Beitrag: 21.12.2007, 21:37
  5. Antworten: 13
    Letzter Beitrag: 31.07.2007, 09:55

Lesezeichen

Berechtigungen

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