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

Ergebnis 1 bis 8 von 8

Thema: BLK_MOV mit Pointer versorgen

  1. #1
    Registriert seit
    13.09.2005
    Beiträge
    633
    Danke
    8
    Erhielt 8 Danke für 6 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Mein Problem ist folgendes:

    Ein sehr speicheraufwendiger FB, der aus einer Reihe von folgenden Anweisungen besteht:

    CALL "R_STRNG" IN :="data_in".real1
    RET_VAL:="zw".realwert


    CALL "BLKMOV"
    SRCBLK :=P#DB120.DBX45.0 BYTE 21
    RET_VAL:=MW3
    DSTBLK :="data".wert_array1


    CALL "R_STRNG"
    IN :="data_in".real2
    RET_VAL:="zw".realwert


    CALL "BLKMOV"
    SRCBLK :=P#DB120.DBX45.0 BYTE 21
    RET_VAL:=MW3
    DSTBLK :="data".wert_array2

    usw. muss aus Speichergründen geändert werden.

    Die Anweisungen werden ca. 30 mal ausgeführt.

    Dabei werden die Werte als Real eingelesen, in einen String konvertiert, der Stringkopf entfernt und in ein Array of Char gespeichert.

    Wenn ich nun das ganze auf Pointern basierend mache, müsste ich eine Menge Speicher sparen, oder?

    Nur wie kann ich den SFC BLKMOV mit einem Pointer als Ausgabegröße versorgen, um das ganze nicht Byte für Byte verschieben zu müssen?
    Zitieren Zitieren BLK_MOV mit Pointer versorgen  

  2. #2
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 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

  3. #3
    Registriert seit
    13.02.2005
    Beiträge
    28
    Danke
    6
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Schau Dir mal den Baustein an. Ist auch eine Schale für den SFC 20, arbeitet aber symbolisch.

    Bernd

    FUNCTION "FC_MOVE_X" : INT
    TITLE =Erweiteter Bock Move
    //Der FC kopiert den Bereich von Quelle nach Ziel.
    //Quelle und Ziel dürfen NICHT in den L-Daten liegen (SFC 20)!
    //Die Länge der zu kopierenden Bytes wird über den Parameter "LENGTH" übergeben.
    //Über die Parameter "OFFSET_SOURCE" und "OFFSET_DEST" kann Anfang bzw. Ende des
    //zu kopierendeb Bereiches verschoben werden.
    //
    //Änderungen:
    //2004-10-11 BS Baustein erstellt
    //
    { S7_language := '9(1) Englisch (USA) 09.02.2006 14:58:54' }
    VERSION : 0.0


    VAR_INPUT
    SOURCE : POINTER ;
    OFFSET_SOURCE : INT ;
    LENGTH : INT ;
    DEST : POINTER ;
    OFFSET_DEST : INT ;
    END_VAR
    VAR_TEMP
    tSRCBLK : ANY ;
    tDSTBLK : ANY ;
    tDWORD : DWORD ;
    tWORW : DWORD ;
    tByteAddr : DINT ;
    tArea : BYTE ;
    END_VAR
    BEGIN
    NETWORK
    TITLE =SOURCE

    L 0;
    T #RET_VAL;
    NETWORK
    TITLE =ANY Quelle

    L P##SOURCE;
    LAR1 ;
    L D [AR1,P#0.0];
    T #tDWORD;
    L W [AR1,P#4.0];
    T #tWORW;

    L P##tSRCBLK;
    LAR1 ;

    L W#16#1002;
    T W [AR1,P#0.0];

    L #LENGTH;
    T W [AR1,P#2.0];

    L #tDWORD;
    T D [AR1,P#4.0];

    L #tWORW;
    T W [AR1,P#8.0];


    L B [AR1,P#6.0];
    L W#16#87; //Vorgänger L-Daten
    <>I ;
    JC OK_1;
    L -4711; //geht nicht wegen SFC20
    T #RET_VAL;
    JU ENDE;
    OK_1: NOP 0;
    NETWORK
    TITLE =ANY Ziel

    L P##DEST;
    LAR1 ;
    L D [AR1,P#0.0];
    T #tDWORD;
    L W [AR1,P#4.0];
    T #tWORW;

    L P##tDSTBLK;
    LAR1 ;

    L W#16#1002;
    T W [AR1,P#0.0];

    L #LENGTH;
    T W [AR1,P#2.0];

    L #tDWORD;
    T D [AR1,P#4.0];

    L #tWORW;
    T W [AR1,P#8.0];

    L B [AR1,P#6.0];
    L W#16#87; //Vorgänger L-Daten
    <>I ;
    JC OK_2;
    L -4711; //geht nicht wegen SFC20
    T #RET_VAL;
    JU ENDE;
    OK_2: NOP 0;

    NETWORK
    TITLE =OFFSET Quelle

    L #OFFSET_SOURCE;
    L 0;
    ==I ;
    JC NOOS;

    L P##tSRCBLK;
    LAR1 ;

    L B [AR1,P#6.0]; //Bereich speichern
    T #tArea;

    L D [AR1,P#6.0]; //Byte Adresse
    L DW#16#FFFFFF;
    AD ;
    T #tByteAddr;

    L #OFFSET_SOURCE;
    L 8;
    *I ;
    ITD ;
    L #tByteAddr;
    +D ;
    T D [AR1,P#6.0];

    L #tArea; //Bereich
    T B [AR1,P#6.0];

    NOOS: NOP 0;
    NETWORK
    TITLE =OFFSET Ziel

    L #OFFSET_DEST;
    L 0;
    ==I ;
    JC NOOD;

    L P##tDSTBLK;
    LAR1 ;

    L B [AR1,P#6.0]; //Bereich speichern
    T #tArea;

    L D [AR1,P#6.0]; //Byte Adresse
    L DW#16#FFFFFF;
    AD ;
    T #tByteAddr;

    L #OFFSET_DEST;
    L 8;
    *I ;
    ITD ;
    L #tByteAddr;
    +D ;
    T D [AR1,P#6.0];

    L #tArea; //Bereich
    T B [AR1,P#6.0];

    NOOD: NOP 0;
    NETWORK
    TITLE =Block Move



    CALL "BLKMOV" (
    SRCBLK := #tSRCBLK,
    RET_VAL := #RET_VAL,
    DSTBLK := #tDSTBLK);
    NOP 0;


    NETWORK
    TITLE =


    ENDE: L #RET_VAL;
    L 0;
    ==I ;
    SAVE ;
    BE ;

    END_FUNCTION

  4. #4
    CrazyCat ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    13.09.2005
    Beiträge
    633
    Danke
    8
    Erhielt 8 Danke für 6 Beiträge

    Standard

    @Ralle: Dein Link funktioniert nicht

    @bs: Ich habe dein Skript als SCL - Quelle eingebunden. Wie kann ich die Quelle aufrufen, bzw. welche Parameter muss ich verändern um in einen bestimmten DB die Daten ab einer variablen Adresse abzulegen?

    Bin mit SCL nicht wirklich vertraut.

  5. #5
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Zitat Zitat von CrazyCat
    @Ralle: Dein Link funktioniert nicht
    Der Link ist noch aus dem alten Forum, darum wohl jetzt "tot".

    Schau mal hier nach: http://www.esatex.com/SPS-Forum/show...hlight=blkmove

    bs hat eine AWL-Quelle gepostet!
    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. #6
    CrazyCat ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    13.09.2005
    Beiträge
    633
    Danke
    8
    Erhielt 8 Danke für 6 Beiträge

    Standard

    Ich glaube nicht das das eine AWL - Quelle ist.

    Alleine die Strichpunkte am Ende und die VAR_INPUT Optionen deuten für mich auf eine SCL - Quelle hin.

    Das Programm kann außerdem als SCL - Quelle gestartet werden, während ich es in AWL erst noch modifizieren muss.

    Danke für den Link!

  7. #7
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    @CC
    Meine AWL-Quellen haben auch das Semikolon nach jeder Zeile.
    SCL hat eigentlich kein "NETWORK"-Statement.
    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

  8. #8
    CrazyCat ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    13.09.2005
    Beiträge
    633
    Danke
    8
    Erhielt 8 Danke für 6 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Und das akzepziert der Simatic Manager?!?

    Ich muss alle Network - Statements löschen, genauso wie die Strichpunkte sonst ist alles rot und ich kann nicht einmal speichern.

    Jedenfalls hab' ich das Programm jetzt in einer AWL - Liste (etwas modifiziert -> Var Input und Var Temp oben in Variablen Liste eingetragen, Network - Statement und Strichpunkte weg, etc.) und es funktioniert!

    Hast du irgendetwas im Simatic Manager umgestellt, damit du solche Programme einfach einfügen kannst bzw. welche Version benutzt du?

    Wie gesagt, ohne Modifikation kann ich sie nur als SCL - Quelle direkt übernehmen.

Ähnliche Themen

  1. SCL-FB mit Array versorgen
    Von thomasgull im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 04.08.2010, 07:38
  2. FB mit Array versorgen
    Von thomasgull im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 13.09.2009, 11:48
  3. MPI-Adapter mit 24V am OP versorgen ?
    Von GobotheHero im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 16.05.2008, 09:57
  4. 12V Leuchten versorgen
    Von netx1 im Forum Elektronik
    Antworten: 11
    Letzter Beitrag: 03.02.2008, 12:25
  5. Alarm8P mit externem Zeitstempel versorgen
    Von Anonymous im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 26.04.2004, 21:23

Lesezeichen

Berechtigungen

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