Magazyn wysokiego składowania zmienia koszt każdej pomyłki. Paleta odłożona w złe gniazdo na wysokości dziesięciu metrów oznacza ponowny przejazd korytarzem i kolejny cykl podnoszenia, więc system ma pomyłkę uniemożliwić, a nie tylko zapisać. Magazynowe systemy informatyczne w takim obiekcie projektuje się warstwowo, a każdej warstwie przypisuje się inną klasę awarii.
Ta strona opisuje architekturę: co robią terminal i aplikacja oraz baza danych i ERP, a także gdzie kończy się odpowiedzialność WMS, a zaczyna sterowanie urządzeniami automatyki. Ogólny podział warstw omawia tekst o informatycznym systemie magazynowym, a model dokumentów i ruchów opisuje strona o magazynowym systemie informatycznym. Pracę operatora przy regałach pokazuje artykuł o aplikacji dla magazynów wysokiego składowania.
Magazynowe systemy informatyczne w wysokim składzie
W magazynie płaskim błąd adresu poprawia się krokiem. W wysokim składzie poprawia go dopiero drugi przejazd wózka, a w wąskim korytarzu blokuje on pracę pozostałych. Z tej różnicy wynikają cztery wymagania wobec architektury:
- Adres z poziomem regału - lokalizacja musi wskazywać belkę, a nie tylko regał, bo dla wózka to dwie różne operacje.
- Potwierdzenie skanem - stan zmienia się po skanie gniazda, a nie po wysłaniu zadania.
- Rezerwacja gniazda - gniazdo docelowe blokuje się w chwili utworzenia zadania, zanim wózek ruszy.
- Ciągłość pracy - chwilowy brak łączności nie może zatrzymać odkładania i pobierania palet.
Zestawienie poniżej przypisuje te wymagania do warstw. Piąty wiersz dotyczy magazynów z automatyką fizyczną i w pozostałych obiektach nie występuje.
| Warstwa | Zadanie w wysokim składzie | Szczególne wymaganie | Typowy objaw awarii |
|---|---|---|---|
| Terminal | skanowanie gniazda i palety, potwierdzanie ruchu | odczyt z wysokości, praca w cieniu radiowym regałów | skan bez odpowiedzi lub potwierdzenie zgubione |
| Aplikacja | walidacja i przydział zadań wózkom | zgodność gniazda z wózkiem i paletą | zadanie trafia do wózka, który nie sięgnie gniazda |
| Baza danych | stan lokalizacji i historia ruchów | jedna paleta w jednym gnieździe | dwa zadania wskazują to samo gniazdo |
| ERP | dokumenty księgowe i handlowe | przyjęcie dokumentu dopiero po zatwierdzeniu | rozbieżność stanu księgowego i lokalizacyjnego |
| Sterowanie automatyką | ruch przenośników i urządzeń składujących | oddzielenie zleceń biznesowych od bezpieczeństwa maszyn | zlecenie wysłane, brak potwierdzenia z urządzenia |
Reguła: stan lokalizacji zmienia się dopiero po potwierdzeniu ruchu, a nie po wysłaniu zadania. Wysłane zadanie tworzy rezerwację, a nie przesunięcie.
Terminal na wózku i etykiety na regale
Terminal montowany na wózku albo noszony przez magazyniera skanuje dwa kody: etykietę gniazda i etykietę palety. Skan lokalizacji potwierdza, że wózek stoi przed właściwym gniazdem, a skan palety, że podniesiono właściwą jednostkę. Dla pozycji dokumentu, czyli palet, system generuje etykiety nośników, które ułatwiają identyfikację jednostek logistycznych na każdym etapie obiegu towaru.

Paletę identyfikuje się jednoznacznie numerem SSCC, czyli 18-cyfrowym kodem jednostki logistycznej. Zasady jego budowy opisuje standard GS1, a informacje o kluczu identyfikacyjnym zawiera strona GS1 Polska o SSCC. Jeśli ten sam numer widnieje na etykiecie i w bazie, a potem w dokumencie ERP, żaden z tych zapisów nie wymaga tłumaczenia.
Łączność bywa słabszym ogniwem niż terminal. Regały metalowe i wąskie korytarze tworzą cienie radiowe, więc zasięg Wi-Fi projektuje się dla każdego korytarza, a nie dla hali jako całości. Zestawienie sprzętu radiowego zawiera strona o terminalach radiowych, a wymagania wobec terminali w hali opisuje tekst o terminalu radiowym w magazynie.
Wymaganie wobec aplikacji terminalowej jest jedno: potwierdzenie ruchu ma dojść do serwera dokładnie raz, nawet przy przerwie w łączności. Terminal zapisuje potwierdzenie lokalnie i ponawia wysyłkę z tym samym identyfikatorem zadania, a serwer rozpoznaje duplikat i go pomija.
Aplikacja i przydział zadań
Warstwa aplikacji zamienia przyjęcie palety w zadanie odkładania. Sprawdza przy tym wymiary palety względem prześwitu gniazda oraz masę względem nośności belki, a osobno klasę wózka względem wysokości poziomu. Wybór samego gniazda, czyli rozmieszczenie według rotacji, opisuje artykuł o slottingu i analizie ABC, a zasady oceny lokalizacji zbiera strona o kryteriach wyboru lokalizacji.
Klasa wózka i zasięg gniazda
Każde gniazdo niesie atrybut klasy wózka, która je obsłuży, a każdy wózek klasę, do której należy. Przydział zadań filtruje kolejkę tym warunkiem, zanim wybierze najstarsze zadanie, dzięki czemu wózek czołowy nie dostaje zadania sięgającego poza jego zasięg. Wartości zasięgu zależą od modelu wózka i konstrukcji regału, więc ustala się je przy konfiguracji obiektu, a nie na stałe w kodzie. Osobna kwestia to priorytet: zadania wydania mogą wyprzedzać odkładanie, gdy kolejka do rampy rośnie, ale jest to parametr procesu i wymaga zatwierdzenia przez kierownika magazynu.
Zadanie przechodzi przez kilka statusów i tylko jeden z nich zmienia stan lokalizacji. Zestawienie pokazuje cykl zadania odkładania oraz to, kto zmienia jego status.
| Status zadania | Znaczenie | Kto zmienia status | Skutek dla stanu lokalizacji |
|---|---|---|---|
| Utworzone | reguły wskazały gniazdo docelowe | aplikacja | gniazdo zarezerwowane, stan bez zmian |
| Przydzielone | zadanie przypisane konkretnemu wózkowi | aplikacja | bez zmian |
| W toku | operator zeskanował paletę | terminal | paleta w drodze, gniazdo nadal zarezerwowane |
| Wykonane | skan gniazda potwierdził odłożenie | terminal | paleta przypisana do gniazda |
| Anulowane | gniazdo okazało się zajęte lub zablokowane | aplikacja lub operator | rezerwacja zwolniona, wyznaczenie nowego gniazda |
Rozdzielenie rezerwacji od zapisu ruchu ma prosty powód: zadania czekają w kolejce, a w tym czasie inny operator nie może dostać tego samego gniazda. Bez rezerwacji dwa wózki jadą do jednego miejsca, a drugi z nich wraca z paletą, którą trzeba odłożyć ponownie. Stan lokalizacji zasila widok zajętości magazynu, w którym kierownik sprawdza w graficznej tabeli, które gniazda są zajęte i gdzie leży wskazany indeks.
Baza danych i stan lokalizacji
Baza jest miejscem, w którym gwarantuje się to, czego aplikacja nie może zapewnić sama. Jeżeli dwa zadania trafią na serwer w tej samej chwili, kolejność rozstrzyga silnik bazy, a nie pamięć procesu. Poniższy szkic tabel pokazuje mechanizm; nazwy są przykładowe i nie odpowiadają schematowi konkretnego produktu.
CREATE TABLE dbo.Locations (
LocationId int IDENTITY(1, 1) PRIMARY KEY,
Aisle tinyint NOT NULL,
Bay tinyint NOT NULL,
RackLevel tinyint NOT NULL,
Status varchar(10) NOT NULL DEFAULT 'Free' -- Free, Reserved, Occupied, Blocked
);
CREATE TABLE dbo.PalletPlacement (
Sscc char(18) NOT NULL PRIMARY KEY,
LocationId int NOT NULL REFERENCES dbo.Locations (LocationId)
);
-- jedna paleta w jednym gnieździe (regał jednogłębokości)
CREATE UNIQUE INDEX UX_PalletPlacement_Location
ON dbo.PalletPlacement (LocationId);
Indeks unikalny odrzuci drugą paletę w tym samym gnieździe nawet wtedy, gdy błąd w aplikacji ominie sprawdzenie. Składnię i ograniczenia opisuje dokumentacja o indeksach unikalnych w SQL Server. W regale dwugłębokim klucz obejmuje także głębokość, więc definicję trzeba dopasować do konstrukcji regału.
Rezerwację gniazda wykonuje jedno polecenie, które sprawdza status i zmienia go w tej samej operacji. Gdy nie zmieni żadnego wiersza, gniazdo nie było wolne i zadanie wraca do wyznaczenia:
UPDATE dbo.Locations
SET Status = 'Reserved'
WHERE LocationId = @LocationId
AND Status = 'Free';
IF @@ROWCOUNT = 0
THROW 50001, 'Gniazdo nie jest wolne.', 1;
Reguła: warunek Status = „Free” w klauzuli WHERE działa jak zamek: dwie równoległe sesje nie zarezerwują tego samego wiersza, bo druga zobaczy już zmieniony status. Historia zmian zostaje w dzienniku ruchów, więc dla każdego gniazda można odtworzyć, kto i kiedy je zajął.
Automatyka i warstwa sterowania
W magazynach wysokiego składowania system WMS współpracuje również z automatyką fizyczną, taką jak przenośniki i sortery oraz automatyczne systemy składowania i wyszukiwania towaru (AS/RS). Integracja z takimi urządzeniami ogranicza udział pracy ręcznej i zwiększa przepustowość bez rozbudowy powierzchni. Jeden operator nadzoruje wtedy więcej urządzeń, a WMS koordynuje kolejność zadań kierowanych do poszczególnych stref.
W typowej architekturze pomiędzy WMS a maszynami stoi warstwa sterowania magazynem (WCS), a nad samymi urządzeniami sterownik PLC. W mniejszych instalacjach rola WCS bywa wbudowana w oprogramowanie dostawcy urządzeń. Każda warstwa decyduje o czym innym, co pokazuje poniższy podział.
| Warstwa | Decyduje o | Nie decyduje o | Typowy komunikat |
|---|---|---|---|
| WMS | jaki towar oraz skąd i dokąd, z jakim priorytetem | trajektorii i prędkości urządzenia | zlecenie transportu palety |
| WCS | kolejności i trasie urządzeń, unikaniu kolizji | stanie księgowym towaru | rozkaz ruchu dla urządzenia |
| Sterownik PLC | ruchu mechanicznym, czujnikach, blokadach bezpieczeństwa | tym, co znajduje się na palecie | sygnały wejść i wyjść |
Reguła: WMS wysyła zlecenie, czyli co i dokąd, a nie polecenie ruchu urządzenia. Bezpieczeństwo maszyn należy do sterownika, nigdy do aplikacji biznesowej.
Zlecenie do warstwy sterowania wysyła się z identyfikatorem, który pozwala ponowić wysyłkę bez podwójnego wykonania. Przykład w C# pokazuje ideę na hipotetycznym interfejsie REST; rzeczywiste interfejsy sterowników bywają inne, także oparte na protokołach przemysłowych:
using System.Net.Http.Json;
public sealed record TransportOrder(
Guid OrderId, string Sscc, string FromLocation, string ToLocation);
public static async Task<bool> SendAsync(
HttpClient http, TransportOrder order, CancellationToken ct)
{
using var req = new HttpRequestMessage(HttpMethod.Post, "/api/transport-orders")
{
Content = JsonContent.Create(order)
};
req.Headers.Add("Idempotency-Key", order.OrderId.ToString());
using var resp = await http.SendAsync(req, ct);
return resp.IsSuccessStatusCode;
}
Wysłanie zlecenia nie zmienia stanu lokalizacji. Zmienia go dopiero potwierdzenie z warstwy sterowania, czyli sygnał czujnika przy gnieździe albo skan przy wejściu do układu. Szersze omówienie współpracy WMS z robotami i innymi urządzeniami zawiera strona o automatyzacji w magazynie, a decyzję o wdrożeniu w takim obiekcie opisuje artykuł, czy wdrożyć WMS w magazynie wysokiego składowania.
ERP i granica odpowiedzialności
W firmach świadczących usługi logistyczne systemy WMS stanowią zwykle technologię wspierającą nadrzędny system ERP. Oprogramowanie magazynowe, zainstalowane w magazynie albo w chmurze prywatnej, współpracuje z ERP przez wymianę dokumentów. Dla operatorów logistycznych jest to podstawa pracy, bo obsługują wielu nadawców i odbiorców jednocześnie.
W wysokim składzie WMS zapisuje znacznie więcej zdarzeń, niż ERP powinno zobaczyć. Ruch palety między gniazdami w obrębie tego samego magazynu zmienia lokalizację, ale nie zmienia stanu księgowego. Do ERP trafiają dopiero zdarzenia, które zmieniają stan magazynu lub jego wartość.
| Zdarzenie w magazynie | Zapis w WMS | Dokument w ERP |
|---|---|---|
| Przesunięcie palety między gniazdami | ruch lokalizacyjny w dzienniku | zwykle brak dokumentu |
| Przyjęcie od dostawcy | PZ z paletami i lokalizacjami | PZ zatwierdzone |
| Wydanie do odbiorcy | WZ z listą palet | WZ zatwierdzone |
| Przesunięcie do innego magazynu | MM z paletami | MM w obu magazynach |
| Różnica po spisie | pozycja korygująca | dokument korygujący stan |
Wymiana obejmuje potwierdzenia dokumentów, a nie strumień ruchów, więc łącze do ERP nie musi nadążać za tempem wózków. Opis kanałów wymiany i powtórzeń bez duplikatów zawiera artykuł o integracji WMS z ERP.
Awarie i tryb awaryjny
Każda warstwa ma inny tryb awarii, więc każda potrzebuje własnego zachowania awaryjnego. Zasada jest jedna: awaria nie może prowadzić do cichej zmiany stanu, a niepewną paletę oznacza się i wyłącza z obrotu, zamiast zgadywać jej położenie. Cztery najczęstsze sytuacje i oczekiwana reakcja wyglądają następująco:
- Terminal bez łączności - potwierdzenia trafiają do bufora na urządzeniu i wysyłają się po odzyskaniu sieci, z tym samym identyfikatorem zadania.
- Urządzenie w błędzie - zlecenie zostaje w statusie oczekującym, a rezerwacja gniazda pozostaje do decyzji operatora.
- Baza niedostępna - terminale nie przyjmują nowych zadań, a wykonane ruchy czekają na zapis, bo bez bazy nie da się zagwarantować unikalności gniazda.
- ERP niedostępne - dokumenty zatwierdzone w WMS czekają w kolejce wysyłki, a praca hali toczy się bez zmian.

Najtrudniejszą sytuacją jest rozbieżność między stanem fizycznym a zapisem: gniazdo puste, gdy system spodziewa się palety, albo zajęte, gdy system uznaje je za wolne. Procedura jest prosta: najpierw gniazdo blokuje się w systemie, a operator weryfikuje jego zawartość skanem. Dopiero po tym kierownik zmiany zatwierdza korektę z zapisem przyczyny, a gniazdo wraca do obrotu. Wpis w historii ruchów pozwala później znaleźć źródło pomyłki.
Sprawdzenie tych zachowań należy do testów odbiorczych, a nie do dokumentacji: wyłącza się sieć terminala i zatrzymuje urządzenie, a następnie odłącza ERP, po czym obserwuje stan kolejki i rezerwacji. Producent prezentuje system na stronie programu magazynowego WMS.



