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

Ergebnis 1 bis 7 von 7

Thema: ANY Pointer als In Parameter...

  1. #1
    haraldign Gast

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo, Ich möchte in einem FB einen Any Pointer als In Parameter verwenden, und die daten daraus dann mit blockmove (also die daten auf die der anypointer zeigt) in einen block im fb kopieren... Wie kann Ich das bewerkstelligen?? Wenn Ich den eingangs anypointer an blockmove hänge, dann bleibt er immer rot!
    Zitieren Zitieren Gelöst: ANY Pointer als In Parameter...  

  2. "sehe ich das richtig, dass wenn ich einen any als in habe und diesen mit blkmov verwenden möchte ich diesen mit

    LAR1 P##DATEN_ANY

    L D [AR1,P#0.0]
    T LD 0
    L D [AR1,P#4.0]
    T LD 4
    L D [AR1,P#8.0]
    T LW 8

    in einen any in den lokaldaten umkopieren muss???"


  3. #2
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    Suche mal in der Step7-Hilfe unter 'Any-Pointer' und dann 'Beispiel zum Datentyp Any'.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  4. #3
    haraldign Gast

    Standard

    sehe ich das richtig, dass wenn ich einen any als in habe und diesen mit blkmov verwenden möchte ich diesen mit

    LAR1 P##DATEN_ANY

    L D [AR1,P#0.0]
    T LD 0
    L D [AR1,P#4.0]
    T LD 4
    L D [AR1,P#8.0]
    T LW 8

    in einen any in den lokaldaten umkopieren muss???
    Zitieren Zitieren umkopieren...  

  5. #4
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    Nein nicht in ein Array, in einen anderen Pointer.
    Vielleicht hat jemand noch einen besseren Vorschlag.
    Hast du es mal mit dem Parametertyp 'Pointer' probiert, der ist eigentlich zur Übergabe von Pointern an andere Funktions-Inputs gedacht, ein Versuch ist es wert.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  6. #5
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  7. #6
    Registriert seit
    16.02.2006
    Beiträge
    7
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hi;
    was Du vorhast geht nicht bei Siemens. Siemens kann maximal 32bit handeln, dh. Siemens setzt einen Zeiger auf deinen IN-Operanden vom Typ ANY. Dann möchtest Du den ANY Zeiger dem BlockMove weitergeben, wieder ein Zeiger auf eine Anfangsadresse. Zeiger auf Zeiger, dass kann Onkel Siemens nicht.

    Dein Ansatz ist richtig, Zeiger lokal ablegen und dann mit diesem den BlockMove beschalten.

    Wenn Du ein Beispiel brauchst, melde Dich.

    Gruss Nils
    Zitieren Zitieren Zeiger auf Zeiger geht nicht  

  8. #7
    Registriert seit
    11.04.2014
    Ort
    Leipzig
    Beiträge
    5
    Danke
    8
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Wenn Zeiger als IN-Parameter als ANY deklariert ist, so zeigt die Variable nicht auf die als Parmeter angebene Adresse, sondern nur auf die Adresse in den vorherigen Lokaldaten (also während des Funktionsaufrufes). Einfach LAR1 P##Zeiger zu schreiben, geht aber leider nicht, auch kann man Zeiger nicht direkt an SFC20 parametrieren. Auf folgende Weise lässt sich das Problem lösen.

    FUNCTION FC 1 : VOID
    TITLE =
    VERSION : 0.1

    VAR_INPUT
    Zeiger : ANY ;
    END_VAR
    VAR_TEMP
    temp_Zeiger : ANY ;
    temp_int : INT ;
    END_VAR

    BEGIN
    NETWORK
    TITLE =
    L P##Zeiger;
    LAR1 ;
    L P##temp_Zeiger;
    LAR2 ;
    L W [AR1,P#0.0];
    T W [AR2,P#0.0];
    L D [AR1,P#2.0];
    T D [AR2,P#2.0];
    L D [AR1,P#6.0];
    T D [AR2,P#6.0];

    CALL SFC 20 (
    SRCBLK := #temp_Zeiger,
    RET_VAL := #temp_int,
    DSTBLK := MD 0);

    END_FUNCTION


    Man lädt sich also den Zeiger auf die alten Lokaldaten in AR1 und den Zeiger auf die aktuellen Lokaldaten in AR2 und kopiert den den Inhalt der ANY-Pointer (10 Byte). Klappt auch mit normalen Pointern (6 Byte). Da im Adresseregister immer nur die Blockanfangsadresse steht, kann man auf diese Weise gut bereichsübergreifend arbeiten, also z.B. mal bitweise U [AR1,P#1.0] und mal wortweise L W [AR1,P#0.0] verwenden.

Ähnliche Themen

  1. S5 - FB - IN/OUT-Parameter
    Von Hawkster im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 26.10.2012, 18:53
  2. UDT als IN-Parameter am FB
    Von OB21 im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 15.08.2010, 17:14
  3. SCL FB Parameter ANY Pointer
    Von _pi_ im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 30.04.2008, 12:38
  4. Parameter vom Typ ANY
    Von blume_mercan im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 17.01.2008, 15:37
  5. CAN Parameter
    Von Anonymous im Forum Feldbusse
    Antworten: 1
    Letzter Beitrag: 09.08.2005, 08:49

Lesezeichen

Berechtigungen

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