Przejdź do treści

Architektura

Rozwiązanie dzieli się na warstwy: rdzeń niezależny od interfejsu graficznego, moduły urządzeń, narzędzia serwisowe z biblioteką przyrządów oraz powłokę aplikacji.

flowchart TB
    subgraph APP["CanSensorHub.App — powłoka WPF"]
        MW[MainWindow: pasek połączenia, zakładki, monitor magistrali]
    end
    subgraph MOD["Moduły urządzeń"]
        M1[Modules.Mpswp]
        M2[Modules.Mpcc]
    end
    subgraph TOOLS["Narzędzia serwisowe — wyłączalne (WithTools)"]
        T1[Tools.MpccAfeCal]
        MET[Metrology: VISA, przyrządy, statystyka, raporty]
    end
    subgraph CORE["CanSensorHub.Core — bez WPF"]
        CAN[Can: transporty, CanBusService]
        PROT[Protocol: identyfikator, STREAM, tożsamość urządzenia]
        BL[Bootloader: CRC, obraz, flasher]
        LOG[Logging: LiveValueStore, logger CSV]
    end
    MW --> M1 & M2
    M1 & M2 --> CAN & PROT & BL
    MW --> CAN & LOG
    MW -. wykrywanie w czasie działania .-> T1
    T1 --> MET
    T1 --> M2 & CAN & PROT

CanSensorHub.Core

Biblioteka klas bez zależności od WPF. Zawiera wszystko, co jest wspólne dla każdego węzła magistrali.

Przestrzeń Zawartość
Can CanFrame, transporty SlcanTransport i SimulatedTransport, CanBusService
Protocol CanId, Messages, Params, DeviceIdentity
Modules kontrakt modułu i rejestr typów modułów
Tools kontrakt narzędzia serwisowego i wykrywanie narzędzi
Logging LiveValueStore, WideCsvLogger
Bootloader Crc32, Crc16CcittFalse, FirmwareImage, BlCanLink, BootloaderFlasher

Dlaczego rdzeń nie zna WPF

Interfejs IDeviceModuleInstance udostępnia widok modułu jako object, a nie UIElement. Dzięki temu projekt rdzenia nie musi odwoływać się do WPF, a rzutowanie wykonują projekty, które i tak od WPF zależą. Rozdział umożliwia testowanie warstwy protokołu bez uruchamiania interfejsu.

Połączenie z magistralą

W danej chwili aktywne jest jedno połączenie, współdzielone przez wszystkie dodane urządzenia. Tryby:

Tryb Zastosowanie
Adapter WeAct (slcan) praca ze sprzętem, port COM, domyślnie 500 kbit/s
Symulator praca bez sprzętu — fałszywe węzły w procesie aplikacji

Dodanie urządzenia w trybie symulatora automatycznie uruchamia jego odpowiednik na magistrali wirtualnej. Magistrala wirtualna ma też wspólne wejście analogowe, na którym symulowane przyrządy narzędzi wymuszają napięcie mierzone przez symulowane węzły. Symulowany węzeł korzysta z tego samego kodeka co węzeł rzeczywisty, więc rozbieżność między nimi nie jest możliwa — poza zakresem celowo niezasymulowanym.

Moduł urządzenia

Moduł jest osobnym projektem odwołującym się do rdzenia. Dostarcza:

Element Rola
tablice protokołu kanały, czujniki, opcode'y, zdarzenia, rejestr parametrów
XxxDeviceClient typowana warstwa żądań i odpowiedzi dla jednego węzła
XxxDeviceViewModel implementacja IDeviceModuleInstance — widok i nagłówek zakładki
XxxModuleDescriptor implementacja IDeviceModuleDescriptor — wpis w katalogu modułów
XxxSimulator opcjonalnie: fałszywy węzeł do pracy bez sprzętu

Każdy moduł udostępnia komplet podzakładek: pulpit z kartami wartości i nagrywaniem CSV, wykresy na żywo, parametry, czujniki, status, czas RTC, log zdarzeń oraz bootloader. Moduł MPCC ma dodatkowo zakładkę sterowania wyjściami, moduł MPSWP — autokalibrację anteny detektora wyładowań.

Narzędzia serwisowe

Czynności okazjonalne, wymagające stanowiska pomiarowego — przede wszystkim kalibracje — są realizowane przez narzędzia otwierane z menu „Narzędzia” okna głównego, a nie przez zakładki modułów (ADR 0001).

Element Rola
IHubTool kontrakt narzędzia: nazwa, moduł docelowy, Open(HubToolContext)
HubToolContext wspólne połączenie CAN, bieżąca lista dodanych urządzeń, okno właściciela
[assembly: HubTool(...)] deklaracja narzędzia w zestawie CanSensorHub.Tools.*
CanSensorHub.Metrology VISA, sterowniki przyrządów, przyrządy symulowane, statystyka, dopasowanie, raport CSV

Powłoka nie odwołuje się do typów narzędzi. Zestawy narzędzi trafiają do katalogu aplikacji przez referencje projektowe warunkowane właściwością WithTools, a przy starcie są wykrywane po nazwie pliku i atrybucie zestawu. Każde narzędzie obsługuje jeden typ urządzenia i jedną wielkość (ADR 0002).

Narzędzie Opis
Tools.MpccAfeCal kalibracja wejść napięciowych MPCC

Monitor magistrali

Log wszystkich ramek nadanych i odebranych, niezależny od modułów: dekoduje wyłącznie wspólną otoczkę FUNC/NODE/OBJ/ARG. Ruch węzła, dla którego nie dodano modułu, jest zatem nadal widoczny i czytelny w zakresie warstwy wspólnej.

Trwałość ustawień

Tryb połączenia, port, przepływność i lista dodanych urządzeń zapisywane są w %AppData%\CanSensorHub\settings.json i przywracane przy starcie, po ponownym nawiązaniu połączenia.