Skip to content

[Task] Implementacja mechanizmu synchronizacji (Snapshot/Delta) #31

Description

@PEXEL2002

Opis zadania i szczegółowe wymagania

Należy zaimplementować dwa tryby synchronizacji danych z VariableTable wewnątrz MemoryMap, aby frontend mógł prawidłowo wyświetlać stany symulacji. W tym zadaniu musi zawierać się:

  • Implementacja funkcji "Pełny Snapshot": metoda pozwalająca na pobranie i przepisanie wszystkich aktualnych stanów z MemoryMap do VariableTable (konieczna do wywołania m.in. przy starcie symulacji).
  • Implementacja "Delta Tracking": wykorzystanie klasy DeltaTracker do śledzenia i gromadzenia tylko tych zmian, które zaszły w ostatnim wywołaniu cycle().
  • Zabezpieczenie dostępu do danych (Thread Safety): ponieważ silnik symulacji w C++ może działać w innym wątku niż komunikacja sieciowa oparta na Saucer, operacje odczytu i zapisu w MemoryMap muszą być odpowiednio chronione (np. za pomocą std::mutex).

Dodatkowy kontekst i źrodła pomocnicze

Zarządzanie wątkami w tym miejscu jest krytyczne dla stabilności całego symulatora. Kiedy główna pętla PLC z dużą prędkością aktualizuje stany pamięci, asynchroniczny wątek komunikacyjny może próbować wyciągnąć z niej dane (Delta lub Snapshot) w celu wysłania na frontend. Brak synchronizacji doprowadzi do data race i awarii programu. Dobrą praktyką jest zastosowanie std::lock_guard dla prostych sekcji krytycznych lub std::shared_mutex (jeśli odczytów jest znacznie więcej niż modyfikacji). Należy pamiętać, że tracker po przekazaniu paczki "Delta" musi zostać zresetowany na potrzeby kolejnego cyklu.

Definicja wykonania zadania

  • Zaimplementowano funkcję „snapshot”, przesyłającą kompletny stan pamięci.
  • Zaimplementowano mechanizm Delta Tracking, który poprawnie filtruje zmienne nieulegające zmianie w danym cyklu.
  • Zapewniono bezpieczeństwo wątkowe (Thread Safety) przy jednoczesnym odczycie i zapisie zmiennych.
  • Tracker Delt poprawnie czyści zebrane zmiany po ich wysłaniu.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    Fields

    No fields configured for Task.

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions