Operacje Przenoszenia
Transfer i Zarządzanie Danymi
Transfer danych to układ krwionośny Twojego programu PLC. Efektywnie zarządzaj kopiami zmiennych, serializacją struktur i manipulacjami blokami pamięci.
Czym są operacje przenoszenia w TIA Portal?
Operacje przenoszenia pozwalają na kopiowanie danych z jednego miejsca w pamięci do drugiego. Obejmują one zarówno proste kopiowanie zmiennej (MOVE), jak i złożone manipulacje całymi strukturami na potrzeby komunikacji (Serialize/Deserialize) czy zarządzanie ciągłymi obszarami danych (MOVE_BLK).
TIA Portal oferuje nowoczesne instrukcje dostępu symbolicznego, dynamiczne zarządzanie poprzez typy Variant oraz zoptymalizowane funkcje dla bloków Array DB, zachowując jednocześnie instrukcje Legacy dla kompatybilności ze starszymi systemami S7-300.
Transfer Podstawowy
Fundamentalne instrukcje kopiowania i formatowania
MOVE — Kopiuj wartość
MOVECo robi
Kopiuje zawartość wejścia IN do wyjścia OUT. Jeśli typy danych się różnią, może nastąpić niejawna konwersja, o ile jest ona bezpieczna.
Kiedy używać
Inicjalizacja zmiennych, kopiowanie nastaw HMI lub transfer wyników obliczeń.
Porady Pro
Możesz dodać wiele wyjść (OUT1, OUT2...), aby skopiować wartość do kilku miejsc jednocześnie.
W SCL używaj po prostu przypisania: destination := source;
Działa z prawie wszystkimi typami danych (Bool, Int, Real, Struct, String).
Serialize / Deserialize
SERCo robią
Serialize konwertuje złożoną strukturę na sekwencyjny strumień bajtów (Array of Byte). Deserialize robi odwrotnie.
Kiedy używać
Przygotowanie danych do wysyłki przez protokoły komunikacyjne (TCP/IP, UDP) lub kompaktowe przechowywanie.
Porady Pro
Używaj parametru POS do śledzenia indeksu wypełnienia w buforze docelowym.
Niezbędne przy wymianie danych z systemami zewnętrznymi, które nie rozumieją struktur UDT Siemens.
Upewnij się, że rozmiar bufora jest wystarczający, aby uniknąć błędów czasu wykonania.
SWAP — Zamień bajty
SWAPCo robi
Odwraca kolejność bajtów (Endianness) w operandzie IN.
Kiedy używać
Komunikacja z urządzeniami używającymi formatu 'Little-Endian', podczas gdy PLC używa 'Big-Endian'.
Porady Pro
Zazwyczaj używane na typach Word lub DWord.
Pomocne przy przetwarzaniu danych z niektórych czujników Modbus.
Może być użyte do uporządkowania kodów ASCII odebranych w odwrotnej kolejności.
Przenoszenie Bloków
Manipulacja masowymi i ciągłymi obszarami pamięci
MOVE_BLK / UMOVE_BLK
MOVE_BLKCo robi
Kopiuje określoną liczbę elementów z tablicy źródłowej do docelowej. UMOVE_BLK to wersja nieprzerywalna (atomowa).
Kiedy używać
Zarządzanie buforami, archiwizacja danych historycznych lub kopiowanie receptur produkcyjnych.
Porady Pro
Indeks początkowy (COUNT) definiuje liczbę elementów do skopiowania.
UMOVE_BLK gwarantuje, że dane nie zostaną zmodyfikowane przez blok OB alarmu podczas kopiowania.
Typy danych źródłowych i docelowych muszą być identyczne.
MOVE_BLK_VARIANT
Co robi
Zaawansowana wersja MOVE_BLK obsługująca typy danych Variant dla elastycznego adresowania.
Kiedy używać
Tworzenie uniwersalnych bloków bibliotecznych pracujących na tablicach o różnych rozmiarach lub typach.
Porady Pro
Pozwala na kopiowanie między tablicami, których typy są określane w czasie wykonywania.
Użyj CountOfElements, aby zautomatyzować parametr COUNT.
Bardzo potężne w S7-1500 do programowania generycznego.
Wypełnianie Obszaru
Szybka inicjalizacja zakresów pamięci
FILL_BLK / UFILL_BLK
FILLCo robi
Wypełnia obszar pamięci (Array) pojedynczą wartością określoną na wejściu IN.
Kiedy używać
Resetowanie tablicy pomiarów do zera lub inicjalizacja bufora wartością domyślną.
Porady Pro
UFILL_BLK jest preferowane dla obszarów krytycznych współdzielonych z przerwaniami.
Znacznie wydajniejsze niż pętla FOR przy inicjalizacji dużej tablicy.
COUNT określa liczbę elementów do wypełnienia, zaczynając od wskazanego wskaźnika.
Scatter / Gather
Rozkładanie i składanie bitów
SCATTER / GATHER
Co robią
SCATTER rozkłada słowo (Word, DWord...) na pojedyncze bity do struktury lub tablicy. GATHER robi odwrotnie.
Kiedy używać
Wyodrębnianie bitów statusu ze słowa diagnostycznego lub składanie słowa sterującego z bitów kontrolnych.
Porady Pro
Korzystnie zastępuje mnóstwo dostępów do pojedynczych bitów (np. %X0).
Dostępne na S7-1200 i S7-1500.
Gwarantuje czystszy i łatwiejszy w utrzymaniu kod.
Dostęp do bloków Array DB
Odczyt i zapis w blokach danych typu tablicowego
ReadFromArrayDB / WriteToArrayDB
Co robią
Pozwalają na odczyt lub zapis konkretnego elementu w bloku danych skonfigurowanym jako 'Array DB'.
Kiedy używać
Zarządzanie dużymi listami danych, gdzie indeksowanie musi być dynamiczne i szybkie.
Porady Pro
Wersje 'L' (np. ReadFromArrayDBL) dają dostęp do pamięci ładowania (Load Memory) dla rzadziej używanych danych.
Użycie Array DB jest często wydajniejsze niż klasyczny dostęp indeksowany.
Sprawdź, czy indeks mieści się w granicach, aby uniknąć błędu dostępu.
Manipulacja Variant
Narzędzia do programowania dynamicznego
VariantGet / VariantPut
Co robią
VariantGet wypisuje wartość ze zmiennej Variant do zmiennej typowanej. VariantPut zapisuje typowaną wartość do zmiennej Variant.
Kiedy używać
Przetwarzanie danych, których dokładny typ jest znany dopiero w momencie wywołania bloku.
Porady Pro
Użyj EQ_Type, aby sprawdzić typ przed pobraniem wartości.
Fundamentalne przy tworzeniu generycznych funkcji komunikacyjnych.
CountOfElements zwraca liczbę elementów, jeśli Variant wskazuje na tablicę.
Granice Tablic
Dynamiczne określanie limitów
LOWER_BOUND / UPPER_BOUND
Co robi
Zwraca dolną (LOWER) lub górną (UPPER) granicę tablicy przekazanej jako parametr Variant.
Kiedy używać
Iterowanie po tablicy o nieznanym rozmiarze (np. Array[*] of MyUDT).
Porady Pro
Niezbędne do pisania solidnych pętli FOR: FOR i := LOWER_BOUND(...) TO UPPER_BOUND(...) DO
Działa zarówno na tablicach jedno-, jak i wielowymiarowych.
Parametr DIM określa pożądany wymiar (domyślnie 1).
Instrukcje Legacy
Kompatybilność ze starszymi systemami S7-300/400
Instrukcje takie jak BLKMOV, FILL oraz FieldRead/FieldWrite są zachowane dla kompatybilności. W nowych projektach S7-1200/1500 zaleca się używanie MOVE_BLK, FILL_BLK oraz bezpośredniego dostępu symbolicznego.
Porównanie metod kopiowania
Wybór właściwej instrukcji transferu
| Potrzebujesz... | Zalecana instrukcja | Przykład |
|---|---|---|
| Skopiować prostą zmienną | MOVE | Nastawa -> Wartość aktualna |
| Skopiować obszar pamięci | MOVE_BLK | Bufor FIFO |
| Zainicjować tablicę | FILL_BLK | Reset błędów |
| Przygotować wiadomość TCP | Serialize | Struktura -> Strumień bajtów |
| Rozbić słowo na bity | SCATTER | Diagnostyka słowo -> struktura |
| Dostęp dynamiczny | VARIANT | Uniwersalny blok biblioteczny |
Często Zadawane Pytania
Jaka jest różnica między MOVE a MOVE_BLK?
MOVE służy do kopiowania pojedynczej wartości lub całej struktury naraz. MOVE_BLK jest zoptymalizowany pod kątem kopiowania części tablicy (określonej liczby kolejnych elementów).
Dlaczego używać UMOVE_BLK zamiast MOVE_BLK?
Litera 'U' oznacza Uninterruptible (nieprzerywalny). Ta instrukcja gwarantuje, że operacja kopiowania nie zostanie przerwana przez cykl alarmowy (bloki OB o wyższym priorytecie), co zapewnia pełną spójność kopiowanych danych.
Kiedy stosować Serialize i Deserialize?
Instrukcje te są kluczowe, gdy musisz przesyłać dane strukturalne przez 'surowe' protokoły, takie jak TSEND/TRCV, lub do urządzeń zewnętrznych. Zarządzają one wyrównaniem bajtów w ustandaryzowany sposób.
Czy MOVE_BLK działa z adresami bezwzględnymi (P#DB1.DBX0.0...)?
Tak, ale TIA Portal zachęca do stosowania dostępu symbolicznego. Dla złożonego adresowania bezwzględnego wciąż używa się BLKMOV (Legacy), choć MOVE_BLK_VARIANT jest zalecanym nowoczesnym rozwiązaniem.