Flyttningsoperationer
Dataöverföring & Hantering
Dataöverföring är cirkulationssystemet i ditt PLC-program. Hantera variabelkopior, strukturserialisering och minnesblock-manipulationer effektivt.
Vad är flyttningsoperationer i TIA Portal?
Flyttningsoperationer gör det möjligt att kopiera data från en minnesplats till en annan. De sträcker sig från enkla variabelkopior (MOVE) till komplex manipulation av hela strukturer för kommunikation (Serialize/Deserialize) eller hantering av sammanhängande dataområden (MOVE_BLK).
TIA Portal erbjuder moderna instruktioner för symbolisk åtkomst, dynamisk hantering via Variant-typer och optimerade funktioner för Array DB, samtidigt som Legacy-instruktioner behålls för kompatibilitet med äldre S7-300-system.
Grundläggande överföring
Fundamentala kopierings- och formateringsinstruktioner
MOVE — Kopiera värde
MOVEVad den gör
Kopierar innehållet i ingången IN till utgången OUT. Om datatypen skiljer sig kan en implicit konvertering ske om den är säker.
När den ska användas
Initiera variabler, kopiera HMI-börvärden eller överföra beräkningsresultat.
Proffstips
Du kan lägga till flera utgångar (OUT1, OUT2...) för att kopiera ett värde till flera destinationer samtidigt.
I SCL använder du helt enkelt tilldelning: destination := source;
Fungerar med nästan alla datatyper (Bool, Int, Real, Struct, String).
Serialize / Deserialize
SERVad de gör
Serialize omvandlar en komplex struktur till en sekventiell byteström (Array of Byte). Deserialize gör motsatsen.
När de ska användas
Förberedelse av data för sändning via kommunikationsprotokoll (TCP/IP, UDP) eller kompakt lagring.
Proffstips
Använd POS-parametern för att spåra fyllnadsindex i destinationsbufferten.
Oumbärlig för utbyte med tredjepartssystem som inte förstår Siemens UDT:er.
Se till att buffertstorleken är tillräcklig för att undvika körtidsfel.
SWAP — Växla byte
SWAPVad den gör
Vänder på byteordningen (Endianness) i operanden IN.
När den ska användas
Kommunikation med enheter som använder 'Little-Endian'-format medan PLC:n använder 'Big-Endian'.
Proffstips
Används vanligtvis på Word- eller DWord-typer.
Användbar för att bearbeta data från vissa Modbus-givare.
Kan användas för att omorganisera ASCII-koder som tagits emot i fel ordning.
Blockflytt
Manipulation av massiva och sammanhängande minnesområden
MOVE_BLK / UMOVE_BLK
MOVE_BLKVad den gör
Kopierar ett definierat antal element från en käll-Array till en destinations-Array. UMOVE_BLK är den oavbrytbara (atomära) versionen.
När den ska användas
Buffertantering, arkivering av historiska data eller duplicering av tillverkningsrecept.
Proffstips
Startindexet (COUNT) definierar antalet element som ska kopieras.
UMOVE_BLK säkerställer att data inte ändras av ett larm-OB under kopieringen.
Käll- och destinationsdatatyp måste vara identiska.
MOVE_BLK_VARIANT
Vad den gör
Avancerad version av MOVE_BLK som stöder Variant-datatyp för flexibel adressering.
När den ska användas
Utveckling av återanvändbara biblioteksblock som arbetar på arrayer av olika storlekar eller typer.
Proffstips
Möjliggör kopiering mellan arrayer vars typer bestäms vid körtid.
Använd CountOfElements för att automatisera COUNT-parametern.
Mycket kraftfull i S7-1500 för generisk programmering.
Fyll område
Snabb initiering av minnesområden
FILL_BLK / UFILL_BLK
FILLVad den gör
Fyller ett minnesområde (Array) med ett enskilt värde angivet vid ingången IN.
När den ska användas
Återställa en mätvärdesarray till noll, eller initiera en buffert med ett standardvärde.
Proffstips
UFILL_BLK är att föredra för kritiska områden som delas med avbrott.
Mycket mer prestandaeffektivt än en FOR-loop för att initiera en stor array.
COUNT anger antalet element som ska fyllas från den angivna pekaren.
Scatter / Gather
Bit-uppdelning och sammansättning
SCATTER / GATHER
Vad de gör
SCATTER delar upp ett ord (Word, DWord...) i enskilda bitar till en struktur eller array. GATHER gör motsatsen.
När de ska användas
Extrahera statusbitar från ett diagnosord eller sätta samman ett styrord från kontrollbitar.
Proffstips
Ersätter fördelaktigt en mängd bitåtkomster (t.ex. %X0).
Tillgänglig på S7-1200 och S7-1500.
Garanterar renare och mer lättunderhållen kod.
Åtkomst till Array DB
Läsning och skrivning i datablock av array-typ
ReadFromArrayDB / WriteToArrayDB
Vad de gör
Gör det möjligt att läsa eller skriva ett specifikt element i ett datablock konfigurerat som 'Array DB'.
När de ska användas
Hantering av stora datalistor där indexeringen måste vara dynamisk och snabb.
Proffstips
'L'-versionerna (t.ex. ReadFromArrayDBL) har åtkomst till Load Memory för mindre frekventa data.
Användning av Array DB är ofta mer prestandaeffektivt än klassisk indexerad åtkomst.
Kontrollera att indexet är inom gränserna för att undvika åtkomstfel.
Variant-manipulation
Verktyg för dynamisk programmering
VariantGet / VariantPut
Vad de gör
VariantGet extraherar värdet från en Variant-variabel till en typad variabel. VariantPut skriver ett typat värde till en Variant-variabel.
När de ska användas
Bearbetning av data vars exakta typ först är känd vid tidpunkten för bausteinanropet.
Proffstips
Använd EQ_Type för att kontrollera typen innan värdet extraheras.
Grundläggande för att skapa generiska kommunikationsfunktioner.
CountOfElements returnerar antalet element om Variant pekar på en Array.
Array-gränser
Dynamisk bestämning av gränser
LOWER_BOUND / UPPER_BOUND
Vad den gör
Returnerar den nedre (LOWER) eller övre (UPPER) gränsen för en array som skickas som Variant-parameter.
När den ska användas
Loopa över en array av okänd storlek (t.ex. Array[*] of MyUDT).
Proffstips
Oumbärlig för att skriva robusta FOR-loopar: FOR i := LOWER_BOUND(...) TO UPPER_BOUND(...) DO
Fungerar både på en- och flerdimensionella arrayer.
DIM-parametern anger önskad dimension (standard 1).
Legacy-instruktioner
Kompatibilitet med äldre S7-300/400-system
Instruktioner som BLKMOV, FILL och FieldRead/FieldWrite behålls för kompatibilitet. För nya S7-1200/1500-projekt, föredra MOVE_BLK, FILL_BLK och direkt symbolisk åtkomst.
Jämförelse av kopieringsmetoder
Välj rätt överföringsinstruktion
| Du behöver... | Rekommenderad instruktion | Exempel |
|---|---|---|
| Kopiera en enkel variabel | MOVE | Börvärde -> Ärvärde |
| Kopiera ett minnesområde | MOVE_BLK | FIFO-buffert |
| Initiera en array | FILL_BLK | Fel-återställning |
| Förbereda ett TCP-meddelande | Serialize | Struktur -> Byteström |
| Dela upp ett ord i bitar | SCATTER | Diagnosord -> struktur |
| Dynamisk åtkomst | VARIANT | Universellt biblioteksblock |
Vanliga frågor
Vad är skillnaden mellan MOVE och MOVE_BLK?
MOVE är avsedd att kopiera ett enskilt värde eller en hel struktur på en gång. MOVE_BLK är optimerad för att kopiera en del av en array (ett visst antal på varandra följande element).
Varför använda UMOVE_BLK istället för MOVE_BLK?
'U' står för Uninterruptible (oavbrytbar). Denna instruktion garanterar att kopieringsoperationen inte kommer att avbrytas av en larmcykel (prioriterade OB), vilket säkerställer total konsistens för de kopierade data.
När ska man använda Serialize och Deserialize?
Dessa instruktioner är livsviktiga när du behöver skicka strukturerade data via 'råa' protokoll som TSEND/TRCV eller till tredjepartsutrustning. De hanterar byte-justering på ett standardiserat sätt.
Fungerar MOVE_BLK med absoluta adresser (P#DB1.DBX0.0...)?
Ja, men TIA Portal uppmuntrar användning av symbolisk åtkomst. För komplex absolut adressering används BLKMOV (Legacy) fortfarande, även om MOVE_BLK_VARIANT är den rekommenderade moderna lösningen.