Hirdetés

Új hozzászólás Aktív témák

  • Szirty
    őstag

    Szia,
    Igazából nem létszükséglet számomra jelenleg a pointerek használata, csak mint érdekesség foglalkozom velük.
    Vagyis feleslegesen nem akarom rabolni az idődet ezzel, csak ha érdekel és van rá kapacitásod akkor foglalkozz vele.

    Amiről te beszélsz az a ANY Format for Data Types ez ok.

    De van egy olyan is hogy:

    ANY Format for Parameter Types

    For parameter types STEP 7 stores the data type and the address of the parameters. The repetition factor is always 1. Bytes 4, 5, and 7 are always 0. Bytes 8 and 9 indicate the number of the timer, counter, or block.

    Ide nem tudtam kimásolni a helpből az ábrát..

    The following table shows the coding of the data types for the parameter type ANY for parameter types.

    Hexadecimal Code Data Type Description
    b#16#17 BLOCK_FB FB number
    b#16#18 BLOCK_FC FC number
    b#16#19 BLOCK_DB DB number
    b#16#1A BLOCK_SDB SDB number
    b#16#1C COUNTER Counter number
    b#16#1D TIMER Timer number

    Valójában én ezt raktam össze, a b#16#19 mondja meg hogy ez egy DB , a 8 as 9-es byte pedig hogy melyik DB.
    L #DB_num_in : egy integer változó lenne ami megmondja, hogy melyik DB-t akarom.
    Igazából nem látom a működés eredményét, ha az az lenne, hogy egyik DB-ből másol a másikba. :(

    ali DP_Joci!

    "gazából nem látom a működés eredményét, ha az az lenne, hogy egyik DB-ből másol a másikba. :("

    Itt egy példa, ami egy integerben megadott számú adatblokkból egy INT típust egy integerben megadott számú címről bemásol az MW0-ba az ANY használatával.:

    FUNCTION FC 1 : VOID
    TITLE =
    VERSION : 0.1

    VAR_INPUT
    SrcDB : INT ; //Forrás blokk száma
    SrcADDR : INT ; //Kezdőcím a forrásblokkban
    END_VAR
    VAR_TEMP
    SRC : ANY ;
    RV : INT ;
    END_VAR
    BEGIN
    NETWORK
    TITLE =

    L P##SRC;
    LAR1 ;
    L B#16#10; //Mindig 10h
    T LB [AR1,P#0.0];
    L B#16#5; //Típus azonosító 5h=INT
    T LB [AR1,P#1.0];
    L W#16#1; //Ismétlési faktor = 1
    T LW [AR1,P#2.0];
    L #SrcDB; //A forrás DB száma
    T LW [AR1,P#4.0];
    L #SrcADDR;
    SLD 3;
    L DW#16#84000000; //Adatterület azonosítója 84h=Data block
    OD ; //Az adatterület és a cím együtt egy DW-ben
    T LD [AR1,P#6.0];
    CALL SFC 20 (//Blokk másolás
    SRCBLK := #SRC,
    RET_VAL := #RV,
    DSTBLK := P#M 0.0 WORD 1);

    END_FUNCTION

    És a hívás:

    CALL FC 1
    SrcDB :=24
    SrcADDR:=4

    Ez az MW0-ba írja a DB24 DBW4-et

Új hozzászólás Aktív témák