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

Ergebnis 1 bis 7 von 7

Thema: Pointer einem parametrieren FC übergeben

  1. #1
    Registriert seit
    18.05.2004
    Beiträge
    203
    Danke
    2
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich habe in dem FC2 denSFC68 aufgerufen. Als Empfangs und Sendefach muß man einen Zeiger Typ Any angeben. Also z. B. P#db10.dbx0.0 byte 10

    Da ich diesen SFC68 merhmals benötige, und sich die anderen Variablen des SFC 68 nicht ändern, möchte ich gerne dieses FC2 über die Deklaration variabel gestalten und diesen FC2 dann im FC1 mehrmals aufrufen. Aber wenn ich den Pointer als in Variable deklarieren möchte, funktioniert das leider nicht, da die Schrift rot wird. Als Temp kann ich den Pointer schon deklarieren, aber warum nicht als In Variable. Übrigens In/Out geht auch nicht!

    Gruß
    Michael
    Zitieren Zitieren Pointer einem parametrieren FC übergeben  

  2. #2
    Registriert seit
    30.08.2003
    Beiträge
    2.196
    Danke
    30
    Erhielt 258 Danke für 229 Beiträge

    Standard

    Hallo Michael,

    siehe Suchfunktion. sowas gabs schon mal

    MfG
    André Räppel
    Zitieren Zitieren Pointer  

  3. #3
    Registriert seit
    06.10.2004
    Beiträge
    278
    Danke
    17
    Erhielt 34 Danke für 30 Beiträge

    Standard

    FUNCTION FC 1 : INT
    TITLE =
    AUTHOR : Taddy
    VERSION : 1.0


    VAR_INPUT
    Quelle_DB : INT ; //Quelle Datenbaustein
    Das_erste_Byte : INT ; //Das erste Byte
    Anzahl_Bytes : INT ; //Anzahl der Bytes
    Ziel_DB : INT ; //Ziel Datenbaustein
    Zielanfang : INT ; //Ziel Anfangsadresse
    END_VAR
    VAR_TEMP
    Quelle : ANY ; //ANY-Zeiger Quelle
    Ziel : ANY ; //ANY-Zeiger Ziel
    Busy : BOOL ;
    END_VAR
    BEGIN
    NETWORK
    TITLE =
    // Zusammenstellung des Quellzeigers
    L W#16#1002; //Typ BYTE
    T LW 0;
    L #Anzahl_Bytes; //Anzahl Bytes
    T LW 2;
    L #Quelle_DB; //Quell-DB
    T LW 4;
    L #Das_erste_Byte; //Anfang der Quelle
    SLD 3;
    OD DW#16#84000000;
    T LD 6;
    NETWORK
    TITLE =
    // Zusammenstellung des Zielzeigers
    L W#16#1002; //Typ BYTE
    T LW 10;
    L #Anzahl_Bytes; //Anzahl Bytes
    T LW 12;
    L #Ziel_DB; //Ziel-DB
    T LW 14;
    L #Zielanfang; //Anfang der Ziels
    SLD 3;
    OD DW#16#84000000;
    T LD 16;
    NETWORK
    TITLE =

    CALL "X_PUT" (
    REQ := TRUE,
    CONT := TRUE,
    DEST_ID := W#16#0,
    VAR_ADDR := #Ziel,
    SD := #Quelle,
    RET_VAL := #RET_VAL,
    BUSY := #Busy);

    NETWORK
    TITLE =
    //Ende


    END_FUNCTION

    Achtung ! Restliche Parameter vom SFC 68 richtig eintragen !


  4. #4
    S7_Mich ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    18.05.2004
    Beiträge
    203
    Danke
    2
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Super, genau sowas hab ich gebraucht. Dankeschön. Habs mir fast schon gedacht, das man sich einen pointer selber basteln muß. Aber das hätte ich nicht gecheckt. Muß heute Nacht mir mal das Format Pointer zu Gemüte führen.

    Dankschön und Gruß
    Michael

  5. #5
    S7_Mich ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    18.05.2004
    Beiträge
    203
    Danke
    2
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Hallo,

    habe das heute Nacht mal getestet, aber irgendwas stimmt nicht. Hab gerade mal die Hilfefunktion von Step7 zu Hilfe genommen und soweit stimm ich dir voll und ganz zu. Aber warum schreibst du

    // Zusammenstellung des Quellzeigers
    L W#16#1002; //Typ BYTE
    T LW 0;
    Müßte das nicht heißen
    L b#16#02 <-- Typ Byte
    T LW 0


    Du schreibst ja praktisch in den reservierten Bereich für S7 (laut Step7 Hilfe) B#16#10 rein. Für was soll das sein?

    Müßte aber trotzdem funktionieren. Vielleicht war ich nicht mehr ganz wach

    Gruß
    Michael

  6. #6
    S7_Mich ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    18.05.2004
    Beiträge
    203
    Danke
    2
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Sorry, hast recht, habs gerade gesehen. In der Hilfe heißt es 10h für S7. Jetzt schließt sich der Kreis. 10 Hex meinen die damit

    Muß nächste Woche nochmal nachschauen, warum das nicht so läuft.

    Dankeschön
    Michael

  7. #7
    Registriert seit
    06.10.2004
    Beiträge
    278
    Danke
    17
    Erhielt 34 Danke für 30 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    ANY Zeiger parametrieren
    ANY Zeiger besteht aus 10 Byte
    Bytebelegung

    | n+00 | n+01 | n+02 | n+03 | n+04 | n+05 | n+06 | n+07 | n+08 | n+09

    Byte n + 00 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
    Bit 7 <-- 1 = bereichsübergreifender Zeiger

    Byte n + 01 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
    Bit 2,1,0 = Operandbereich - Tabelle A

    Tabele A

    BOOL 01 REAL 08 BLOCK_FB 17
    BYTE 02 <-- hier steht deine zwei DATE 09 BLOCK_FC 18
    CHAR 03 TOD 0A BLOCK_DB 19
    WORD 04 TIME 0B BLOCK_SDB 1A
    INT 05 S5TIME 0C COUNTER 1C
    DWORD 06 DT 0E TIMER 1D
    DINT 07 STRING 13

    Byte
    n + 02 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
    n + 03

    (Wieviel Daten sollen übertragen werden)

    Byte
    n + 04 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
    n + 05

    (DB Nummer, wenn kein DB dann -> Nullen !)


    Byte n + 06 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |

    Bit 7 <-- 1 = bereichsübergreifender Zeiger
    Bit 2,1,0 Operandenbereich - Tabelle B

    Tabele B

    P - Perypherie |0 0 0
    E - Eingänge |0 0 1
    A - Ausgänge |0 1 0
    M - Merker |0 1 1
    DBX Globaldaten |1 0 0
    DIX Instanzdaten |1 0 1

    Byte n + 07 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
    Bit 7,6,5,4,3 nicht belegen, Bit 2,1,0 Byteadresse

    Byte
    n + 08 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
    n + 09
    weiter Byte-Adresse, Bit 2,1,0 = Bitadresse

    Du kannst den SFC 68 durch SFC 20 ersetzen, dann hast du einen Baustein für unkmplizierte DB -> DB Copy

Ähnliche Themen

  1. Pointer an Funktion übergeben
    Von Anaconda55 im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 01.11.2011, 19:54
  2. Adresse an Pointer übergeben
    Von schuld im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 17.11.2010, 12:42
  3. Array ohne Pointer übergeben? (SCL)
    Von tahren im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 15.06.2010, 12:08
  4. Pointer an FB übergeben, aber wie?
    Von Aendes im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 21.03.2008, 11:59
  5. Pointer an FB übergeben
    Von xhasx im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 26.07.2007, 22:40

Lesezeichen

Berechtigungen

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