Instrukcje TIA Portal

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ść

MOVE

Co 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

SER

Co 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

SWAP

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

Co 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

FILL

Co 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 instrukcjaPrzykład
Skopiować prostą zmiennąMOVENastawa -> Wartość aktualna
Skopiować obszar pamięciMOVE_BLKBufor FIFO
Zainicjować tablicęFILL_BLKReset błędów
Przygotować wiadomość TCPSerializeStruktura -> Strumień bajtów
Rozbić słowo na bitySCATTERDiagnostyka słowo -> struktura
Dostęp dynamicznyVARIANTUniwersalny 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.

Zautomatyzuj transfery danych

Opisz swoje potrzeby w zakresie manipulacji danymi, a T-IA Connect wygeneruje bloki MOVE i Serialize zoptymalizowane pod kątem Twojej aplikacji.