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

Results 1 to 7 of 7

Thread: ANY-Pointer indirekt adressieren

  1. #1
    Anonymous Gast

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    ich habe das Problem, dass ich aus einem Datenbaustein je nach Wert einer Variable immer einen anderen Bereich des einen DB in einen anderen DB kopieren möchte.
    Da der zu kopierende Bereich aus INT, REAL sowei STRING besteht will ich den SFC 20 verwenden.
    Also direkt adressiert sieht das so aus:

    CALL SFC 20
    SRCBLK :=P#DB1.DBX34.0 BYTE 32
    RET_VAL:=MW20
    DSTBLK :=P#DB2.DBX0.0 BYTE 32

    Jetzt bin ich am probieren, wie ich das statische "DBX34.0" durch einen Zeiger ersetzen könnte.
    Normalerweise müsste der ja im Dopelwortformat sein.
    Aber sowas wie z.B.:

    SRCBLK := P#DB1.[MD 40] BYTE 32

    funktioniert natürlich nicht.

    Weiß jemand wie das geht, oder ob überhaupt?

    MfG
    Thomas
    Reply With Quote Reply With Quote Answered: ANY-Pointer indirekt adressieren  

  2. "VAR_IN_OUT
    DB_NR : INT ;
    END_VAR

    VAR_TEMP
    AN : ANY ;

    END_VAR


    BEGIN
    NETWORK
    TITLE =



    NETWORK
    TITLE =ANY-Zeiger fuer Quelle

    L P##AN;
    L B#16#10; //Kennung
    T LB [AR1,P#0.0];
    L B#16#2; // 2 = BYTE 4 = WORD
    T LB [AR1,P#1.0];
    L 16; // Laenge
    T LW [AR1,P#2.0];
    L #DB_NR; // DB_Nr // DB_Nr
    T LW [AR1,P#4.0];
    L P#DBX 0.0;
    L 32; // erstes Datenwort
    SLD 3;
    +D ;
    T LD [AR1,P#6.0];

    ergibt = p#db1.DBX32.0 Byte 16

    Ziel genauso zusammenstellen"


  3. #2
    Anonymous Gast

    Default

    Hallo.

    Würde ich manuell machen. Dafür eine eigene Funktion schreiben und entsprechende Eingabeparameter definieren. Nachfolgend ein Listing, wie es funktionieren müsste. Ist aber nicht getestet, müsste aber zumindest vom Prinzip funktionieren.

    // ------------------------------------------------------------------------
    // Quellparameter
    L 12
    T MW 100 // Startadresse
    L 10
    T MW 102 // DB-Startadresse

    // Zielparameter
    L 10
    T MW 150 // Zieladresse
    L 20
    T MW 152 // DB-Zieladresse

    // Anzahl der zu übertragenden Datenwörter!
    L 16
    T MW 110 // Anzahl Datenwörter
    // ------------------------------------------------------------------------

    // Quelle lesen
    NEU: LAR1 P#0.0
    L MW 100 // Das ist die Startadresse
    SLW 3
    +AR1
    AUF DB [MW 102]
    L DBW [AR1,P#0.0] // Das ist das 1.Wort des Quellbereichs
    T #Quelle

    // Zum Ziel schreiben
    LAR1 P#0.0
    L MW 150 // Das ist die Startadresse
    SLW 3
    +AR1
    AUF DB [MW 152]
    L #Quelle
    T DBW [AR1,P#0.0] // Das ist das 1.Wort des Quellbereichs

    // Lesezeiger erhöhen
    L MW 100
    INC 2
    T MW 100
    // Zielzeiger erhöhen
    L MW 150
    INC 2
    T MW 150

    L MW 110
    DEC 2
    T MW 110
    LOOP NEU
    Reply With Quote Reply With Quote Manuelle Lösung  

  4. #3
    Anonymous Gast

    Default

    Die definierte Variable #Quelle ist eine temporär angelegte Variable vom Typ Word!
    Reply With Quote Reply With Quote Nachtrag  

  5. #4
    Anonymous Gast

    Default

    VAR_IN_OUT
    DB_NR : INT ;
    END_VAR

    VAR_TEMP
    AN : ANY ;

    END_VAR


    BEGIN
    NETWORK
    TITLE =



    NETWORK
    TITLE =ANY-Zeiger fuer Quelle

    L P##AN;
    L B#16#10; //Kennung
    T LB [AR1,P#0.0];
    L B#16#2; // 2 = BYTE 4 = WORD
    T LB [AR1,P#1.0];
    L 16; // Laenge
    T LW [AR1,P#2.0];
    L #DB_NR; // DB_Nr // DB_Nr
    T LW [AR1,P#4.0];
    L P#DBX 0.0;
    L 32; // erstes Datenwort
    SLD 3;
    +D ;
    T LD [AR1,P#6.0];

    ergibt = p#db1.DBX32.0 Byte 16

    Ziel genauso zusammenstellen

  6. #5
    Anonymous Gast

    Default

    Erstmal Danke an Gast.

    Aber dann müssten doch die ersten 3 Zeilen so sein:

    L P##AN
    LAR1 // Adresse des ANY-Pointers in AR1
    L B#16#10
    .
    .
    .

    Ich habe mal in den Siemens FAQ&s durchgeblättert, aber irgendwie keine genaue Beschreibung des Formates für ANY-Pointer gefunden.
    Beispielprogramme sind ja kostenpflichtig (wie peinlich, ich bin Schüler)

    Vielleicht weiß ja jemand wo das zu finden ist. Ich konnte in dem Durcheinander bei denen noch nichts brauchbares finden.

    MfG
    Thomas

  7. #6
    Join Date
    30.08.2003
    Posts
    2,234
    Danke
    31
    Erhielt 258 Danke für 229 Beiträge

    Default

    Hallo Thomas,

    in der Step7-Hilfe ist das unter "Format des Parametertyps ANY". Falls du kein Step7 hast gib deine Mailadresse und ich schick dir ne pdf.

    MfG
    André Räppel

  8. #7
    Anonymous Gast

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Quote Originally Posted by Thomas\/2
    Erstmal Danke an Gast.

    Aber dann müssten doch die ersten 3 Zeilen so sein:

    L P##AN
    LAR1 // Adresse des ANY-Pointers in AR1
    L B#16#10
    .
    .
    .

    Ich habe mal in den Siemens FAQ&s durchgeblättert, aber irgendwie keine genaue Beschreibung des Formates für ANY-Pointer gefunden.
    Beispielprogramme sind ja kostenpflichtig (wie peinlich, ich bin Schüler)

    Vielleicht weiß ja jemand wo das zu finden ist. Ich konnte in dem Durcheinander bei denen noch nichts brauchbares finden.

    MfG
    Thomas
    Hallo Thomas
    der Trick an der Sache sind die Lokaldaten mit IN IN_OUT geht so nicht
    mann braucht zur Laufzeit die Adresse der Lokaldaten und dann kann kann
    man Pointen und ANY-Zeiger so zusammenbauen.
    Somit kann mann Pointer und ANY berechnen.
    Bei IN und LAR1 habe ich die Daten des Eingangszeigers
    die auch zerlegt werden koennen

Similar Threads

  1. Step 7 ANY-Pointer Indirekt Adressieren
    By Heini in forum Simatic
    Replies: 21
    Last Post: 25.09.2013, 15:35
  2. Datenbaustein indirekt adressieren
    By franky22 in forum Simatic
    Replies: 8
    Last Post: 23.03.2012, 20:06
  3. Pointer indirekt zu adressieren
    By Erich04 in forum Simatic
    Replies: 3
    Last Post: 26.05.2011, 07:54
  4. Replies: 12
    Last Post: 20.11.2009, 13:06
  5. DB-Pointer indirekt Adressieren
    By Anonymous in forum Simatic
    Replies: 5
    Last Post: 19.03.2004, 16:59

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •