Skip to content

Heartbeat Checker: obserwator ADS/TwinCAT 3 dla Raspberry Pi - #1

Draft
Rezurmas wants to merge 1 commit into
mainfrom
claude/rola-heartbeat-plc-observer-fj5o2f
Draft

Heartbeat Checker: obserwator ADS/TwinCAT 3 dla Raspberry Pi#1
Rezurmas wants to merge 1 commit into
mainfrom
claude/rola-heartbeat-plc-observer-fj5o2f

Conversation

@Rezurmas

Copy link
Copy Markdown
Owner

Summary

  • Dodaje plc-heartbeat-checker/ - Python 3, osobny program na Raspberry Pi obserwujący heartbeat MAIN.iPrintClk istniejącego programu PLC (TwinCAT 3 / Beckhoff ADS) bez modyfikowania strony PLC.
  • Transport: notyfikacja ADS on-change (ADSTRANS_SERVERONCHA, ścieżka główna) oraz polling ze stałym krokiem (fallback), z jawnie raportowaną niepewnością pomiarową (±krok/2 dla pollingu).
  • Maszyna stanów rozróżnia RUNNING_OK / RUNNING_DEGRADED / SEQUENCE_FINISHED (zaplanowany koniec 50 półokresów - NIE alarm) / NOT_STARTED / STALLED (realna awaria zadania PLC) / LINK_LOST (problem komunikacji, nie heartbeatu) / MEASUREMENT_UNRELIABLE (aliasing przy zbyt wolnym pollingu).
  • Wbudowany symulator PLC (SimTransport) wiernie odtwarza kontrakt programu MAIN (samoretriggerujący TON, 50 półokresów = 49 widocznych zboczy + zamrożenie na 0, dowolna faza startowa timera) - pozwala uruchamiać i testować całość bez podłączonego sterownika.
  • Statystyki: min/max/średnia/p95 odchyłki, jitter w oknie kroczącym, dryf kumulatywny; log konsolowy w czasie rzeczywistym + zapis CSV.

Architektura

Czyste rozdzielenie warstw (transport ↔ detekcja zboczy ↔ statystyki ↔ maszyna stanów ↔ raportowanie), spinane przez HeartbeatChecker. SimTransport i AdsTransport implementują ten sam interfejs Transport, więc reszta kodu nie wie, skąd pochodzą dane. pyads jest importowany leniwie wyłącznie wewnątrz AdsTransport, więc tryb symulacji i testy działają bez zainstalowanej biblioteki.

Test plan

  • python3 -m unittest discover -s tests -v - 28 testów, wszystkie zielone, bez podłączonego sterownika.
  • Testy end-to-end pokrywają wprost kryteria akceptacji: pełna sekwencja kończy się SEQUENCE_FINISHED bez alarmu; wstrzyknięte opóźnienie daje RUNNING_DEGRADED; symulowane zerwanie łącza daje LINK_LOST (nie STALLED); krok pollingu większy niż półokres daje MEASUREMENT_UNRELIABLE; transport raportuje własną niepewność pomiaru w obu trybach.
  • Ręczny smoke test CLI w trybie --sim (log konsolowy + zapis CSV, czyste zamknięcie na SIGINT).
  • Test na prawdziwym sterowniku TwinCAT 3 przez ADS - wymaga fizycznego sprzętu, nieprzeprowadzony w tej sesji.

Generated by Claude Code

Osobny program w Pythonie na Raspberry Pi obserwujący heartbeat generowany
przez istniejący program PLC (bez modyfikacji strony PLC): notyfikacja ADS
on-change jako ścieżka główna, polling jako fallback z jawnie liczoną
niepewnością pomiaru, oraz maszyna stanów odróżniająca zaplanowany koniec
sekwencji, awarię zadania PLC i utratę łączności ADS od zwykłego jittera.
Dołączony symulator PLC pozwala uruchamiać i testować całość bez
podłączonego sterownika.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WD54LJbYZeH2qHCpKdAYwk
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants