Yard management system - etapy wizyty na placu

Yard management system prowadzi pojazd przez plac jako jedną wizytę o pięciu etapach. Każdy etap ma zdarzenie wyzwalające i użytkownika, który je potwierdza. Dane z etapu trafiają do rekordu wizyty. Taki podział odróżnia system od zeszytu ochrony, w którym zapisuje się tylko przyjazd i wyjazd, a wszystko pomiędzy zostaje w pamięci dyspozytora.

EtapZdarzenieKto potwierdzaCo zapisuje system
Przyjazdpojazd dojeżdża do bramykamera ANPR albo ochronaczas wjazdu i numer rejestracyjny
Rejestracjadopasowanie do awizacjiochronapowiązanie z oknem czasowym i podpis kierowcy
Przydziałwskazanie rampy i miejsca postojowegodyspozytorplanowana rampa oraz planowane stanowisko
Obsługapodstawienie pod rampęmagazynpoczątek i koniec rozładunku albo załadunku
Wyjazdopuszczenie terenuochronaczas wyjazdu i zamknięcie wizyty

Etapy przydziału i obsługi przebiegają odmiennie zależnie od modelu pracy. Przy bezpośrednim rozładunku kierowca czeka w pojeździe i sam wjeżdża na rampę. W modelu wymiany naczep ciągnik odstawia naczepę, a jej dalszy los należy do obsługi placu. Zakres całej klasy rozwiązań opisuje artykuł o systemie YMS, a miejsce YMS w łańcuchu dostaw omawia tekst o roli YMS.

Przed etapem przyjazdu istnieje jeszcze planowanie. Dostawca zakłada awizację i wybiera najpierw obiekt oraz magazyn, a potem okno na rampie, więc pojazd zjawia się przy bramie z już przypisanym terminem. Ten etap, w ujęciu produktowym, przedstawia artykuł o yard management w Studio VSS.net.

Reguła: etap zapisuje się przy zdarzeniu fizycznym, a nie przy zamiarze. Planowana rampa jest planem, a podstawienie pod rampę zdarzeniem.

Przyjazd i rejestracja pojazdu

Odczyt tablicy przez ANPR

Kamera ANPR odczytuje numer rejestracyjny na wjeździe i porównuje go z listą awizowanych wizyt na dany dzień. Zgodny odczyt zapisuje czas wjazdu bez udziału ochrony. Odczyt ma ograniczenia: potwierdza tożsamość pojazdu i moment przejazdu przez bramę, ale nie wskazuje stanowiska na placu.

Ilustracja: ciągnik siodłowy jadący na wprost kamery, z tyłu dwa kolejne pojazdy, ujęcie przedniej tablicy rejestracyjnej
Ilustracja do etapu przyjazdu: kamera przy bramie widzi przednią tablicę pojazdu i przekazuje numer do porównania z awizacjami.

Odczyt z kamery bywa niepewny. Zabrudzona tablica albo zła jakość obrazu dają numer z pominiętym znakiem. Przy integracji z kamerą warto przewidzieć porównanie z listą awizacji z tolerancją jednego znaku oraz ręczne potwierdzenie przez ochronę dla niepewnych dopasowań.

Reguła: odczyt ANPR potwierdza wjazd pojazdu, ale nie jego stanowisko. Lokalizację ustala dopiero dyspozycja albo czujnik na miejscu postojowym.

Odprawa na bramie

Ochrona ma na bramie listę transportów oczekujących na wjazd. Widzi podgląd zgłoszenia i wydrukuje przepustkę. Podpis kierowcy składa się palcem albo rysikiem na ekranie i zastępuje papierowe potwierdzenie przyjazdu.

Wjazd nieawizowany i odprawa ręczna

Pojazd bez awizacji nie jest odsyłany automatycznie. Ochrona wpisuje w formularzu dane pojazdu i kierowcy oraz cel wizyty, generuje jednorazową przepustkę w formacie PDF i zapisuje podpis kontrahenta. Wpis trafia do historii jako transport nieawizowany, więc raport pokazuje, jaki odsetek ruchu omija kalendarz.

Bramę można też połączyć z terminalem samoobsługowym. Kierowca rejestruje wtedy przyjazd sam, a system porównuje numer z listą awizacji. Dane pojazdów i kierowców pochodzą z kartotek opisanych w artykule o kartotekach w systemie VSS.net, więc ich jakość decyduje o tym, ile odczytów dopasuje się bez udziału człowieka.

Spóźnienie względem okna

Spóźnienie mieści się w buforze na końcu okna albo go przekracza. Niewielkie opóźnienie nie wymaga żadnej akcji. Większe zwalnia okno dla innych dostaw, a pojazd czeka na wolne miejsce na placu albo dostaje nowe okno w kalendarzu. Oba progi warto opisać w regulaminie dla przewoźników, bo tylko wtedy odmowa wjazdu na umówioną godzinę nie jest zaskoczeniem. Decyzję w przypadkach spornych podejmuje logistyka, a nie kierowca przy szlabanie.

Przydział bramy i miejsca postojowego

Po rejestracji pracownik bramy wskazuje osobno planowane miejsce parkingowe i osobno planowaną rampę. Rozdzielenie pól jest celowe. Miejsce postojowe należy do placu, rampa do budynku, a pomyłka między słownikami nie jest możliwa, bo pola korzystają z różnych list. Stan mapy placu zmienia się po pierwszym z tych zdarzeń, co opisuje artykuł o wizualizacji zajętości miejsc parkingowych.

Ilustracja: kobieta w kamizelce ostrzegawczej z tabletem w ręku przy rzędzie ciągników siodłowych stojących na placu
Ilustracja do etapu przydziału: dyspozytor na placu sprawdza na tablecie, które stanowiska są wolne.

O tym, czy rampa przyjmie pojazd, decyduje pojemność bramy. Administrator przypisuje do bramy dostępne rampy i ustala maksymalny czas oczekiwania pojazdu. Określa też reguły automatycznego przypisania miejsca postojowego w zależności od typu transportu. Zasady definiowania bram i obszarów załadunkowych opisuje serwis producenta: jak definiować bramy i obszary załadunkowe w Studio VSS.net. Koordynację z rampami omawia tekst o zarządzaniu dokami w magazynie.

Reguły przypisania miejsca zależą od typu transportu. Administrator ustawia je dla bramy, a system podpowiada stanowisko zgodnie z polityką obiektu. Poniższa tabela pokazuje przykładową politykę o wartościach poglądowych.

Typ wizytyMiejsce postojoweRampa
Dostawa paletowastrefa oczekiwania przy bramie wjazdowejrampa rozładunkowa
Załadunek wysyłkistrefa oczekiwania przy hali wysyłekrampa załadunkowa
Naczepa odstawionastrefa długiego postojuprzydział przy wywołaniu
Transport nieawizowanystrefa buforowa przy bramiepo decyzji logistyki

Kolejka pojazdów do rampy

Gdy rampa się zwolni, dyspozytor wywołuje następny pojazd. Jeżeli robi to dwóch dyspozytorów naraz, ta sama wizyta nie może dostać dwóch przydziałów. W T-SQL rozwiązuje to połączenie podpowiedzi UPDLOCK i READPAST. Przykład wybiera pierwszą wizytę oczekującą na podstawienie i zmienia jej status w jednej instrukcji. Nazwy tabeli i kolumn są poglądowe.

-- Przykład (nazwy poglądowe): wywołanie następnej wizyty na rampę
WITH nxt AS (
    SELECT TOP (1) VisitId, DockId, Status
    FROM   dbo.YardVisit WITH (UPDLOCK, READPAST, ROWLOCK)
    WHERE  Status = 'PARKED'
      AND  WindowStart <= SYSDATETIME()
    ORDER BY WindowStart, VisitId
)
UPDATE nxt
SET    Status = 'CALLED'
OUTPUT inserted.VisitId, inserted.DockId;

UPDLOCK zakłada blokadę aktualizacji na wybranym wierszu, a READPAST pomija wiersze zablokowane przez inną sesję. Drugi dyspozytor dostaje więc kolejną wizytę zamiast czekać na pierwszą. Bez READPAST sesje ustawiałyby się w kolejce na tej samej blokadzie. Opis podpowiedzi zawiera dokumentacja table hints w Microsoft Learn. Indeks na parze kolumn Status i WindowStart pozwala znaleźć wiersz bez skanowania tabeli.

Obsługa na rampie i ciągnik placowy

W modelu wymiany naczep pracę placu wykonuje ciągnik placowy, czyli pojazd używany wyłącznie na terenie zakładu. Przestawia naczepy między miejscami postojowymi a rampami, więc kierowca dalekobieżny nie czeka przy rozładunku. Ciągnik jest przy tym zasobem jak rampa: ma status i historię przydziałów.

W VSS.net przestawienia pojazdów między strefami zakładu obsługuje pozycja Transport wewnętrzny w module Yard Management. Kartoteka opisuje każdy ciągnik czterema grupami danych, podobnie jak wózki i maszyny, co przedstawia artykuł o transporcie wewnętrznym w module VSS.net.

  • Identyfikacja - nazwa pojazdu i numer rejestracyjny.
  • Numery ewidencyjne - numer SAP i numer ewidencyjny.
  • Kod kreskowy - oznaczenie do skanowania przy wydaniu kluczyków.
  • Status - dostępność pojazdu i przypisanie do magazynu albo oddziału.
Ilustracja: dwa ciągniki siodłowe z naczepami czekające jeden za drugim na placu przed magazynem o zmroku
Ilustracja do etapu obsługi: pojazdy czekają w kolejce, którą system układa według okien czasowych.

Na mapie placu zestaw kompletny ma inną ikonę niż naczepa odstawiona. Rozróżnienie ma skutek operacyjny. Zestaw z kierowcą czeka na wywołanie do rampy, a naczepę bez kierowcy przestawia ciągnik placowy w chwili, gdy rampa się zwolni. Zlecenie przestawienia ma źródło i cel oraz wskazuje ciągnik, który je wykonuje. Stan mapy placu zmienia się dopiero wtedy, gdy operator potwierdzi przestawienie, a nie w chwili utworzenia zlecenia. Ma też skutek rozliczeniowy: czas postoju naczepy odstawionej bywa elementem umowy z przewoźnikiem, a system zapisuje go automatycznie od chwili odstawienia.

Wyjazd i zamknięcie wizyty

Wyjazd zamyka wizytę. Ochrona zapisuje czas opuszczenia terenu, a system wylicza czas postoju i porównuje go z oknem czasowym. W sekcji Awizacje pozycja Wyjazd służy do zamknięcia wizyty, a historia przechowuje zakończone pobyty razem z użytkownikiem, który je zamknął. W obiektach z ograniczeniami tonażowymi do obiegu dołącza waga samochodowa, a wynik ważenia trafia do rekordu wizyty. Widok wyjazdu w module awizacji opisuje artykuł o awizacjach w VSS.net.

Przy dostawie ważenie na wjeździe daje masę brutto, a ważenie na wyjeździe masę pustego pojazdu, czyli tarę. Różnica obu wartości jest masą ładunku. Wynik zapisuje się w rekordzie wizyty razem ze znacznikiem czasu ważenia.

WskaźnikSposób liczeniaCo ujawnia
Opóźnienie względem oknaczas wjazdu minus początek oknadyscyplinę przewoźnika
Czas do rampypodstawienie minus wjazdbrak wolnych stanowisk lub późne wywołanie
Czas obsługikoniec rozładunku minus początekzbyt krótkie okna
Postój łącznywyjazd minus wjazdpodstawę rozliczeń postojowego

Wskaźniki pozwalają rozstrzygnąć, czy przyczyną kolejki jest plac, czy rampa. Długi czas do rampy przy krótkim czasie obsługi wskazuje na brak wolnych stanowisk albo zbyt późne wywołanie pojazdu. Długi czas obsługi przy krótkim czasie do rampy oznacza, że okna są za krótkie albo rozładunek trwa dłużej, niż zakłada wyliczenie. Zasady doboru długości okien omawia artykuł o oknach czasowych.

Wizyty bez znacznika wyjazdu narastają, gdy ochrona pominie zapis przy opuszczaniu terenu. Pojazd, który stoi na mapie od trzech dób, jest niemal na pewno błędem danych. Zapytanie z warunkiem GateOutAt IS NULL i progiem czasu wskazuje takie rekordy do wyjaśnienia. Zamyka się je zdarzeniem korygującym z osobnym źródłem, aby nie zafałszować statystyk postoju.

Model danych wizyty w SQL Server

Wizytę wygodnie odwzorować jako nagłówek i dziennik zdarzeń. Nagłówek przechowuje dane stałe, a dziennik dopisuje każdą zmianę i nigdy jej nie nadpisuje. Z dziennika da się odtworzyć stan wizyty w dowolnym momencie oraz policzyć czasy między etapami. Schemat jest przykładem, a nazwy nie odpowiadają bazie produktu.

CREATE TABLE dbo.YardEvent (
    EventId   bigint IDENTITY(1,1) PRIMARY KEY,
    VisitId   bigint       NOT NULL,
    EventType tinyint      NOT NULL, -- 1 zgłoszenie, 2 wjazd, 3 podstawienie, 4 koniec obsługi, 5 wyjazd
    EventAt   datetime2(0) NOT NULL,
    Source    tinyint      NOT NULL  -- 1 brama, 2 ANPR, 3 operator
);

CREATE NONCLUSTERED INDEX IX_YardEvent_Visit
    ON dbo.YardEvent (VisitId, EventAt)
    INCLUDE (EventType);

Indeks nieklastrowy na parze (VisitId, EventAt) obsługuje dwa typowe zapytania: historię jednej wizyty i ostatnie zdarzenie. Kolumna EventType w klauzuli INCLUDE pozwala odczytać typ zdarzenia bez sięgania do tabeli. Bieżący stan wizyty to typ ostatniego zdarzenia.

SELECT v.VisitId, e.EventType AS CurrentState
FROM   dbo.YardVisit AS v
CROSS APPLY (
    SELECT TOP (1) x.EventType
    FROM   dbo.YardEvent AS x
    WHERE  x.VisitId = v.VisitId
    ORDER BY x.EventAt DESC, x.EventId DESC
) AS e;

Operator CROSS APPLY z TOP (1) wyszukuje ostatnie zdarzenie osobno dla każdej wizyty, a indeks czyni to wyszukiwanie tanim. Sortowanie po EventAt i EventId rozstrzyga sytuację, w której dwa zdarzenia mają ten sam czas z dokładnością do sekundy.

Ochrona przed duplikatami odczytów

Kamera potrafi zgłosić ten sam przejazd kilkakrotnie w ciągu sekundy. Unikalny indeks na parze (VisitId, EventType) odrzuca powtórzenie tego samego etapu, a aplikacja traktuje błąd 2601 jako informację, że etap został już zapisany. Dziennik zostaje wtedy zgodny z rzeczywistością nawet przy niestabilnym łączu z kamerą.

Indeks filtrowany na otwartych wizytach

Dziennik rośnie z każdą wizytą, a zapytania o bieżący plac dotyczą wyłącznie wizyt otwartych. Indeks filtrowany na otwartych wizytach utrzymuje je szybkimi niezależnie od wielkości archiwum. Ten sam indeks w wersji unikalnej wymusza regułę, że jeden numer rejestracyjny ma najwyżej jedną otwartą wizytę. Składnię omawia dokumentacja indeksów filtrowanych w Microsoft Learn.

CREATE UNIQUE NONCLUSTERED INDEX UX_YardVisit_Plate_Open
    ON dbo.YardVisit (PlateNumber)
    WHERE GateOutAt IS NULL;

Zarządzanie placem bez systemu i po wdrożeniu

Plac da się prowadzić bez oprogramowania, jeśli ruch jest niewielki. Mapa placu z wyznaczonymi strefami, arkusz z pojazdami oraz łączność radiowa pozwalają utrzymać porządek, choć wymagają dyscypliny i regularnego uzupełniania. Numery miejsc i rejestracja w punkcie wjazdowym ograniczają chaos. Wraz ze wzrostem liczby wizyt te metody przestają wystarczać, bo nikt nie policzy czasu postoju z odręcznych zapisów.

CzynnośćBez systemuW systemie YMS
Rejestracja wjazduwpis w zeszycie ochronyodczyt ANPR albo odprawa z podpisem na ekranie
Wskazanie miejscaradio i tablica przy placuprzydział z listy stanowisk oraz mapa placu
Wywołanie na rampętelefon dyspozytorazmiana statusu wizyty
Czas postojuręczne odejmowanie godzinznaczniki czasu zapisane przy zdarzeniach
Analiza opóźnieńspotkanie zespołu po zdarzeniuraport ze wskaźników wizyt

Regularne spotkania zespołu zostają potrzebne, ale zmienia się ich materiał. Zamiast wspomnień o kolejce zespół otrzymuje zestawienie czasów do rampy i czasów obsługi z podziałem na dostawców. Przewoźnik, który stale przyjeżdża po oknie, jest wtedy widoczny w danych, a nie tylko w opinii dyspozytora.