Helló kis.balage!
"PLC ciklusonként kellene 120 doubleword-öt 1 doubleword-el arréb mozgatnom (FIFO). Tudtok erre valami elegáns megoldást vagy marad a 120-szor LOAD-TRANSFER?"
Az is egy megoldás, de munkaigényes beírni
Két másik módszer:
1. cikust kell szervezni, ami szépen elketyeg 120-ig. A dolog hátránya, hogy ismerni kell az STL programozást és tisztában kell lenni az indirekt címzésekkel.
Egy ehhez hasonló megoldás van ebben az írásban is.
2. 119 duplaszót átmásolsz egy blockmove utasítással egy 119 dw elemű pufferbe, majd egy duplaszóval arrébbra visszamásolod. Előnye, hogy ehhez nem kell STL, hátránya, hogy kell egy 476byte-os puffer (már ha ez hátrány a konkrét esetben).
Persze nem írtad, hogy merről merre akarod "léptetni" a tárolót, a fenti példa az egész puffert egyel magasabb címre másolja (1 dworddel, azaz 4 byte-tal).
A példában a léptetendő adatterület a DB1.DBD0-nál kezdődik. Nem próbáltam ki, hogy nem vétettem-e hibát benne, a példával az elvet próbáltam szemléltetni...
Ja igen: A pufferrel való vacakolás azért kell, mert amennyire emlékszem, a BLKMOV (SFC20) nem engedi meg hogy a másolt cél és forrás terület átfedésben legyen egymással. Persze biztos megírta már valaki azt a blkmove-t amelyiknél ez nem gond, de kapásból nem tudok olyat most.
[ Szerkesztve ]