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

Ergebnis 1 bis 7 von 7

Thema: ANY-Pointer indirekt adressieren

  1. #1
    Anonymous Gast

    Standard


    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
    Zitieren Zitieren Gelöst: 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

    Standard

    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
    Zitieren Zitieren Manuelle Lösung  

  4. #3
    Anonymous Gast

    Standard

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

  5. #4
    Anonymous Gast

    Standard

    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

    Standard

    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
    Registriert seit
    30.08.2003
    Beiträge
    2.197
    Danke
    30
    Erhielt 258 Danke für 229 Beiträge

    Standard

    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
    Zitieren Zitieren ANY  

  8. #7
    Anonymous Gast

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von 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

Ähnliche Themen

  1. PEW; PAW indirekt Adressieren
    Von casius im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 02.10.2017, 09:00
  2. Pointer indirekt zu adressieren
    Von Erich04 im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 26.05.2011, 07:54
  3. SCL indirekt Adressieren
    Von Nafura im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 19.05.2011, 21:42
  4. Antworten: 12
    Letzter Beitrag: 20.11.2009, 13:06
  5. DB-Pointer indirekt Adressieren
    Von Anonymous im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 19.03.2004, 16:59

Lesezeichen

Berechtigungen

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