Verplaatsingsoperaties
Gegevensoverdracht & Beheer
Gegevensoverdracht is de bloedsomloop van uw PLC-programma. Beheer efficiënt variabele kopieën, structuur-serialisatie en geheugenblok-manipulaties.
Wat zijn verplaatsingsoperaties in TIA Portal?
Verplaatsingsoperaties maken het mogelijk om gegevens van de ene geheugenlocatie naar de andere te kopiëren. Ze variëren van eenvoudige variabele kopieën (MOVE) tot complexe manipulatie van volledige structuren voor communicatie (Serialize/Deserialize) of het beheren van aaneengesloten gegevensgebieden (MOVE_BLK).
TIA Portal biedt moderne instructies voor symbolische toegang, dynamisch beheer via Variant-types en geoptimaliseerde functies voor Array DB's, terwijl Legacy-instructies behouden blijven voor compatibiliteit met oudere S7-300 systemen.
Basistransfer
Fundamentele kopieer- en formatteringsinstructies
MOVE — Waarde kopiëren
MOVEWat het doet
Kopieert de inhoud van ingang IN naar uitgang OUT. Als het datatype verschilt, kan er een impliciete conversie plaatsvinden als deze veilig is.
Wanneer te gebruiken
Variabelen initialiseren, HMI-instelpunten kopiëren of berekeningsresultaten overdragen.
Pro Tips
U kunt meerdere uitgangen (OUT1, OUT2...) toevoegen om een waarde naar meerdere bestemmingen tegelijk te kopiëren.
Gebruik in SCL gewoon de toewijzing: destination := source;
Werkt met bijna alle datatypes (Bool, Int, Real, Struct, String).
Serialize / Deserialize
SERWat ze doen
Serialize converteert een complexe structuur naar een sequentiële bytestroom (Array of Byte). Deserialize doet het omgekeerde.
Wanneer te gebruiken
Gegevens voorbereiden voor verzending via communicatieprotocollen (TCP/IP, UDP) of compacte opslag.
Pro Tips
Gebruik de POS-parameter om de vulindex in de bestemmingsbuffer te volgen.
Essentieel voor uitwisselingen met systemen van derden die Siemens UDT's niet begrijpen.
Zorg ervoor dat de buffergrootte voldoende is om runtime-fouten te voorkomen.
SWAP — Verwisselen
SWAPWat het doet
Keert de bytevolgorde (Endianness) in de IN-operande om.
Wanneer te gebruiken
Communicatie met apparaten die het 'Little-Endian' formaat gebruiken terwijl de PLC 'Big-Endian' gebruikt.
Pro Tips
Meestal gebruikt op Word- of DWord-types.
Handig voor het verwerken van gegevens van bepaalde Modbus-sensoren.
Kan worden gebruikt om achterstevoren ontvangen ASCII-codes te reorganiseren.
Blokverplaatsing
Manipulatie van massieve en aaneengesloten geheugengebieden
MOVE_BLK / UMOVE_BLK
MOVE_BLKWat het doet
Kopieert een gedefinieerd aantal elementen van een bron-Array naar een bestemmings-Array. UMOVE_BLK is de niet-onderbreekbare (atomaire) versie.
Wanneer te gebruiken
Bufferbeheer, archivering van historische gegevens of het dupliceren van recepten.
Pro Tips
De startindex (COUNT) definieert het aantal te kopiëren elementen.
UMOVE_BLK garandeert dat gegevens tijdens het kopiëren niet worden gewijzigd door een alarm-OB.
Bron- en bestemmingsdatatypes moeten identiek zijn.
MOVE_BLK_VARIANT
Wat het doet
Geavanceerde versie van MOVE_BLK die Variant-datatypes ondersteunt voor flexibele adressering.
Wanneer te gebruiken
Ontwikkeling van herbruikbare bibliotheekblokken die werken op arrays van verschillende groottes of types.
Pro Tips
Maakt het mogelijk om te kopiëren tussen arrays waarvan de types tijdens runtime worden bepaald.
Gebruik CountOfElements om de COUNT-parameter te automatiseren.
Zeer krachtig in S7-1500 voor generiek programmeren.
Gebied Vullen
Snelle initialisatie van geheugenbereiken
FILL_BLK / UFILL_BLK
FILLWat het doet
Vult een geheugengebied (Array) met een enkele waarde opgegeven bij ingang IN.
Wanneer te gebruiken
Een meetwaardetabel op nul zetten, of een buffer initialiseren met een standaardwaarde.
Pro Tips
UFILL_BLK heeft de voorkeur voor kritieke gebieden die worden gedeeld met interrupts.
Veel performanter dan een FOR-lus voor het initialiseren van een grote array.
COUNT geeft het aantal elementen aan dat moet worden gevuld vanaf de opgegeven pointer.
Scatter / Gather
Bit-ontleding en -samenstelling
SCATTER / GATHER
Wat ze doen
SCATTER ontleedt een woord (Word, DWord...) in individuele bits naar een structuur of array. GATHER doet het omgekeerde.
Wanneer te gebruiken
Extractie van statusbits uit een diagnosewoord of samenstelling van een commandowoord uit controlebits.
Pro Tips
Vervangt op voordelige wijze een groot aantal bit-toegangen (bijv. %X0).
Beschikbaar op S7-1200 en S7-1500.
Garandeert schonere en gemakkelijker te onderhouden code.
Array DB Toegang
Lezen en schrijven in datablokken van het type array
ReadFromArrayDB / WriteToArrayDB
Wat ze doen
Maken het mogelijk om een specifiek element te lezen of te schrijven in een datablok geconfigureerd als 'Array DB'.
Wanneer te gebruiken
Beheer van grote datalijsten waarbij indexering dynamisch en snel moet zijn.
Pro Tips
De 'L'-versies (bijv. ReadFromArrayDBL) hebben toegang tot het laadgeheugen (Load Memory) voor minder frequente gegevens.
Het gebruik van Array DB is vaak performanter dan klassieke geïndexeerde toegang.
Controleer of de index binnen de grenzen valt om toegangs-fouten te voorkomen.
Variant Manipulatie
Tools voor dynamisch programmeren
VariantGet / VariantPut
Wat ze doen
VariantGet extraheert de waarde van een Variant-variabele naar een getypeerde variabele. VariantPut schrijft een getypeerde waarde naar een Variant-variabele.
Wanneer te gebruiken
Verwerking van gegevens waarvan het exacte type pas bekend is op het moment van de blokaanroep.
Pro Tips
Gebruik EQ_Type om het type te controleren voordat u de waarde extraheert.
Fundamenteel voor het maken van generieke communicatiefuncties.
CountOfElements geeft het aantal elementen terug als de Variant naar een Array wijst.
Array Grenzen
Dynamische limietbepaling
LOWER_BOUND / UPPER_BOUND
Wat het doet
Geeft de ondergrens (LOWER) of bovengrens (UPPER) terug van een array doorgegeven als Variant-parameter.
Wanneer te gebruiken
Lopen over een array van onbekende grootte (bijv. Array[*] of MyUDT).
Pro Tips
Onmisbaar voor het schrijven van robuuste FOR-lussen: FOR i := LOWER_BOUND(...) TO UPPER_BOUND(...) DO
Werkt zowel op eendimensionale als multidimensionale arrays.
De DIM-parameter geeft de gewenste dimensie aan (standaard 1).
Legacy Instructies
Compatibiliteit met oudere S7-300/400 systemen
Instructies zoals BLKMOV, FILL en FieldRead/FieldWrite blijven behouden voor compatibiliteit. Geef voor nieuwe S7-1200/1500 projecten de voorkeur aan MOVE_BLK, FILL_BLK en directe symbolische toegang.
Vergelijking van kopieermethoden
De juiste transferinstructie kiezen
| U moet... | Aanbevolen instructie | Voorbeeld |
|---|---|---|
| Eenvoudige variabele kopiëren | MOVE | Instelwaarde -> Actueel |
| Geheugengebied kopiëren | MOVE_BLK | FIFO-buffer |
| Array initialiseren | FILL_BLK | Fault reset |
| TCP-bericht voorbereiden | Serialize | Structuur -> Byte-stroom |
| Woord in bits splitsen | SCATTER | Diagnose woord -> structuur |
| Dynamische toegang | VARIANT | Universeel bibliotheekblok |
Veelgestelde Vragen
Wat is het verschil tussen MOVE en MOVE_BLK?
MOVE is bedoeld om een enkele waarde of een volledige structuur in één keer te kopiëren. MOVE_BLK is geoptimaliseerd voor het kopiëren van een deel van een array (een bepaald aantal opeenvolgende elementen).
Waarom UMOVE_BLK gebruiken in plaats van MOVE_BLK?
De 'U' staat voor Uninterruptible (niet-onderbreekbaar). Deze instructie garandeert dat de kopieerbewerking niet wordt onderbroken door een alarmcyclus (prioriteits-OB's), wat de totale consistentie van de gekopieerde gegevens waarborgt.
Wanneer Serialize en Deserialize gebruiken?
Deze instructies zijn essentieel wanneer u gestructureerde gegevens moet verzenden via 'ruwe' protocollen zoals TSEND/TRCV of naar apparatuur van derden. Ze regelen de byte-uitlijning op een gestandaardiseerde manier.
Werkt MOVE_BLK met absolute adressen (P#DB1.DBX0.0...)?
Ja, maar TIA Portal moedigt het gebruik van symbolische toegang aan. Voor complexe absolute adressering wordt BLKMOV (Legacy) nog steeds gebruikt, hoewel MOVE_BLK_VARIANT de aanbevolen moderne oplossing is.