TIA Portal Instruktioner

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

MOVE

Vad 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

SER

Vad 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

SWAP

Vad 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_BLK

Vad 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

FILL

Vad 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 instruktionExempel
Kopiera en enkel variabelMOVEBörvärde -> Ärvärde
Kopiera ett minnesområdeMOVE_BLKFIFO-buffert
Initiera en arrayFILL_BLKFel-återställning
Förbereda ett TCP-meddelandeSerializeStruktur -> Byteström
Dela upp ett ord i bitarSCATTERDiagnosord -> struktur
Dynamisk åtkomstVARIANTUniversellt 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.

Automatisera dina dataöverföringar

Beskriv ditt behov av datamanipulation så genererar T-IA Connect optimerade MOVE- och Serialize-block för din applikation.