Co to jest diagram czasowy?
A Diagram czasowy to specjalizowany diagram zachowania diagram UML zaprojektowany do wizualizacji dokładnego czasu trwania stanów oraz dokładnych warunków, w których te stany zmieniają się wzdłuż liniowego czasu. Jako istotna część specyfikacji języka Unified Modeling Language (UML), ten konkretny typ diagramu UML skupia się przede wszystkim na twardych ograniczeniach czasowych, cyklach zegara i sygnałach falowych. Śledzi przebiegi falowe lub linie skokowe, aby dokładnie pokazać, jak długo obiekt pozostaje w określonym stanie, zanim zewnętrzny sygnał spowoduje zmianę jego stanu.
Diagramy czasowe są szeroko wykorzystywane przez inżynierów systemów wbudowanych, programistów protokołów sieciowych oraz architektów sprzętu do modelowania warunków wyścigu, śledzenia zmian cyklu życia wątków lub mapowania przejść rejestrów sprzętowych. Dzięki VPasCode, nie musisz ręcznie obliczać szerokości pikseli ani mapować współrzędnych osi czasu. Nasz silnik renderujący automatycznie obsługuje całą siatkę czasową na podstawie Twoich skryptów w formacie zwykłego tekstu.
Podstawowy przewodnik składniowy: elementy i konstrukcje
Aby stworzyć dokładny, zgodny z normami diagram czasowy UML w PlantUML, musisz opanować typy uczestników, definicje stanów, przedziały czasu oraz ograniczenia synchronizacji.
1. Deklarowanie uczestników (solidny vs. zwięzły)
Możesz modelować przebiegi czasowe za pomocą dwóch różnych stylów wizualnych, w zależności od tego, jak dużo szczegółów wymaga Twój system. Musisz je deklarować za pomocą jawnych słów kluczowych:
- Solidne przebiegi czasowe: Wyświetla stany jako oddzielne, ułożone jedna nad drugą rzędy. Idealne dla ogólnych procesów oprogramowania.
solidny "Wątek aplikacji" jako Thread - Zwięzłe przebiegi czasowe: Wyświetla stany wzdłuż pojedynczej płaskiej linii, używając przekreślonych bloków do oznaczenia zmian. Idealne do kompaktowych map sygnałów sprzętowych.
zwięzły "Rejestr CPU" jako Reg
2. Definiowanie przejść stanów i kroków czasu
W przeciwieństwie do innych diagramów, zmieniasz stany, deklarując punkt czasowy za pomocą symbolu @ symbolu, odwołując się do uczestnika i używając słowa kluczowego is słowo kluczowe. Nazwy stanów zawierające spacje lub znaki specjalne muszą być otoczone cudzysłowami:
@0
Thread jest nieaktywny
@10
Thread jest "Przetwarzanie danych"
3. Generowanie sygnałów zegarowych
Aby symulować binarne zegary sprzętowe, użyj słowa kluczowego clock słowo kluczowe. Musisz określić okres cyklu, opcjonalny współczynnik wypełnienia oraz wewnętrzną nazwę:
clock "Zegar systemowy" jako CLK z okresem 2
4. Dodawanie ograniczeń dokładności i harmonogramów czasowych
Aby zarejestrować ścisłe terminy wykonania (na przykład zapewnienie, że przejście systemu nastąpi w określonym oknie czasowym), użyj składni <-> aby połączyć dwa współrzędne czasowe etykietą opisową:
@10 <-> @40 : {Mniej niż 30ms}
Najlepsze praktyki dla czytelnych układów czasowych
- Utrzymuj jednolite jednostki czasu: PlantUML traktuje liczby całkowite na osi czasu jako ogólne kroki sekwencyjne. Wybierz jednolitą jednostkę czasu dla projektu (np. taktów, mikrosekund lub sekund) i zachowaj ją spójnie.
- Używaj etykiet dla złożonych przejść: Możesz dołączyć komunikaty tekstowe bezpośrednio do zmian stanów, dodając dwukropek od razu po przypisaniu stanu (np.
@10nReg odczytuje : "Wyzwij przerwanie"). - Układaj deklaracje strategicznie: PlantUML ustawia linie życia pionowo dokładnie w kolejności deklaracji w skrypcie. Zawsze umieszczaj główne zegary na samej górze, aby ułatwić wyrównanie.
Przykłady diagramów czasowych PlantUML w świecie rzeczywistym
Przykład 1: Stan cache i rejestrów mikrokontrolera (zwięzły i przebiegi zegarowe)
To uruchomiony szablon demonstruje klasyczny harmonogram inżynierii sprzętu wbudowanego, w którym działa standardowy zegar systemowy równolegle z zwięzłym rejestrem przechowującym stany sprzętu.
@startuml
clock "Zegar systemowy (CLK)" jako clk z okresem 2
zwięzły "Rejestr szyny danych" jako Reg
@0
Reg jest pusty
@2
Reg odczytuje : "Pobierz"
@6
Reg zapisuje
@10
Reg jest zablokowany
@14
Reg jest pusty
@enduml 
Analiza składni: Słowo kluczowe clock tworzy automatycznie falę prostokątną o wysokim/niskim poziomie. Rejestr Reg linia obsługuje wiele przypisań stanów sekwencyjnie wzdłuż siatki absolutnego czasu. Ciągi tekstowe dodane z dwukropkiem (jak : "Pobierz") renderują się jako czyste wypowiedzi bezpośrednio nad linią graniczną przejścia.
Przykład 2: Asynchroniczne odświeżanie tokenu konsumenta sieci Web (Zaawansowane ograniczenia wielowątkowe)
To zaawansowany, pełnokrwisty szablon architektury oprogramowania wykorzystuje solidny format układu, aby śledzić przepływ pracy aplikacji internetowej wielowątkowej, mapując dokładne terminy czasowe między klientem internetowym a pracownikiem autoryzacji.
@startuml
robust "Klient przeglądarki internetowej" jako Web
robust "Pracownik tokenu autoryzacji" jako Auth
@0
Web jest bezczynny
Auth jest w stanie snu
@5
Web oczekuje tokenu
Auth jest w trakcie weryfikacji
@15
Auth generuje
@15 <-> @25 : {Okno generacji}
@25
Auth jest w stanie snu
Web renderuje stronę
@40
Web jest bezczynny
@enduml 
Analiza składni: Poprzez użycie robust deklaracji, stany są czytelnie wymienione na osi Y dla każdego osobnego wiersza życia. Ograniczenie oceny czasu (@15 <-> @25 : {Okno generacji}) rysuje standardową strzałkę wymiarową z obu stron na szczycie siatki czasu, wskazując ściśle określony limit operacyjny.