Keresés

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

  • rsf

    senior tag

    válasz tibi-d #6216 üzenetére

    Az ANY Adattipussal kell tisztában lenni.
    Pl:

    CALL SFC 21
    BVAL :=P#DB100.DBX0.0 BYTE 28
    RET_VAL:=#RetVal_SFC21
    BLK :=P#DB200.DBX358.0 BYTE 28

    Ez DB100.DBX0.0-tól másol 28Byte-ot DB200.DBX358.0-tól kezdődő területre.
    Ha az adat string akkor az másolás után is az marad!
    Persze a forrás és a cél területnek egyezőnek kell lennie.
    Üdv.

    [ Szerkesztve ]

    “Az a baj a világgal, hogy a buták mindenben holtbiztosak, az okosak meg tele vannak kételyekkel.“

  • Szirty

    őstag

    válasz tibi-d #6216 üzenetére

    Szevasz tibi-d!

    Én az SFC20 (BLKMOV)-ot javaslom.

    Könnyebbséget jelent ebben az esetben hogy stringből stringbe kell másolni, hogy szimbolikusan is megadhatod a címeket.
    Feltéve persze ha stringnek deklaráltad a DB-ben azt a két stringet.
    Írok egy példát:

    Így néz ki a DB, amiben a két 20 karakter hosszú string van:

    Itt mindenféle egyéb, jelen kérdés szempontjából lényegtelen dolog is van, de azt akartam hogy ne kizárólag csak a két string legyen a DB blokkban.

    Így néz ki a másolás:

    Persze megadhatod a közvetlen címet is, ami itt a forrás (SRCBLK) tekintetében DB1.DBX26.0 BYTE 22 lenne, a cél (DSTBLK) meg DB1.DBX60.0 BYTE 22.
    A lényeg, hogy ha így adod meg, akkor tudnod kell, hogy a string 2 byttal hosszabb mint amennyi karaktert tud tárolni, m ert az első byte magadja a string hosszát, a második byte pedig hogy hány értékes karakter van benne.

    Itt látható a két string tatalma az SFC20 végrehajtása után.

    rsf megoldása is jó, a másolás FILL hívással is működik, de ott megadható a forrásnál kisebb vagy nagyobb méretű célterület ami itt (ennél a feladatnál) kavarodást okozhat.

    [ Szerkesztve ]

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