Od pierwszego połączenia
do własnego profilu
Instrukcja WasmPluginBuilder: instalacja, konfiguracja, mapowanie kontrolek i praca z MSFS 2020 oraz MSFS 2024.
Stan funkcji: 5 października 202601 · Jak działa Builder
Builder łączy fizyczne kontrolki kokpitu Skalarki ze zmiennymi i komendami samolotu. Przypisania zapisujesz w profilu. Moduł WASM instalowany w MSFS wykonuje odczyty i komendy, a aplikacja wysyła wartości do sprzętu przez Skalarki Connect/Profiler.
Input to sygnał ze sprzętu do samolotu. Output to informacja z samolotu dla LED, wyświetlacza albo mechanizmu. Preset jest zapisanym opisem i wyrażeniem, które pomaga szybko skonfigurować przypisanie.
02 · Co trzeba zainstalować
Przygotuj komputer z Windows 10/11 x64, MSFS oraz działającym sprzętem Skalarki. Poniższa kolejność pozwala zainstalować narzędzia kompilacji przed SDK symulatora.
- Skalarki Connect / Profiler zgodny ze sprzętem. Skonfiguruj panele i potwierdź, że program odbiera ich przyciski oraz pokrętła. Aktualny projekt był integrowany z SDK Connect 7. Używaj dostarczonego kompletu bibliotek Buildera; nie mieszaj DLL z różnych wydań.
- .NET 8 Desktop Runtime, Windows x64. Dla wersji aplikacji wymagającej zewnętrznego runtime pobierz wariant Desktop Runtime ze strony Microsoft .NET 8. Sam ASP.NET Runtime nie zastępuje środowiska WPF. Pakiet samowystarczalny może już zawierać runtime.
- Visual Studio 2022 z narzędziami C++. W Visual Studio Installer zaznacz Desktop development with C++ / Programowanie aplikacji klasycznych w języku C++, wraz z narzędziami MSVC i Windows SDK. Builder używa MSBuild oraz toolsetu dostarczonego przez SDK MSFS. Nie trzeba osobno instalować CMake do aktualnej ścieżki budowania WASM.
- SDK odpowiedniej wersji MSFS. Włącz Developer Mode w symulatorze i skorzystaj z menu Help / SDK. Zainstaluj SDK, w tym integrację toolsetu WASM z Visual Studio. Dla obu symulatorów zainstaluj oba SDK. Oficjalny opis SDK 2024 wyjaśnia pobieranie i integrację narzędzi.
- WasmPluginBuilder. Zainstaluj lub rozpakuj cały pakiet, razem z bibliotekami, Resources i SampleProfiles. Uruchom
WasmPluginBuilder.exe, a przy pierwszym starcie podaj swój klucz licencji. Aktywacja i okresowa weryfikacja licencji wymagają połączenia z usługą licencyjną.
| Symulator | Typowa lokalizacja SDK | Toolset |
|---|---|---|
| MSFS 2020 | C:\MSFS SDK | MSFS |
| MSFS 2024 | C:\MSFS 2024 SDK | MSFS2024 |
To przykładowe ścieżki. SDK może być zainstalowane na innym dysku. Folder SDK zawiera m.in. WASM i SimConnect SDK.
Uruchamianie projektu ze źródeł — dodatkowe wymagania
Do kompilacji aplikacji potrzebne jest .NET SDK obsługujące projekt .NET 8, a w katalogu libs odpowiednie biblioteki Skalarki i SimConnect. Dla zwykłego użytkownika przygotowanego pakietu nie jest konieczne samodzielne kompilowanie aplikacji C#.
03 · Pierwsze uruchomienie — krok po kroku
- Uruchom Connect / Profiler i sprawdź komunikację ze sprzętem.
- Uruchom Builder. W Settings ustaw adres oraz port Profiler 1. Na tym samym komputerze typowo używa się
127.0.0.1i portu53000; port musi odpowiadać konfiguracji Connect. - Kliknij Apply & Reconnect. Sprawdź stan połączenia profilera w pasku statusu.
- W Profiles otwórz właściwy przykład samolotu i zapisz jego własną kopię — procedura jest w rozdziale 06.
- W górnym pasku wybierz MSFS VERSION: 2020 albo 2024. Ustal Device ID i zachowaj go przy późniejszych zmianach live.
- W Build & Install sprawdź MSFS SDK Path i MSFS Community Folder. Gdy autodetekcja nie znajdzie ścieżki, wskaż ją przez Browse….
- Przy pierwszej instalacji zamknij MSFS. Kliknij Build WASM, poczekaj na sukces, następnie Install to MSFS.
- Uruchom MSFS i załaduj samolot odpowiadający profilowi. Builder i Connect / Profiler muszą pozostać uruchomione.
- Kliknij Apply live. Poczekaj na
Live configuration applied by WASM.Sprawdź najpierw pojedynczy przycisk oraz jeden output.
04 · Opcje i ustawienia
Górny pasek profilu
| Pole / przycisk | Do czego służy |
|---|---|
| PROFILE NAME | Nazwa Twojego zestawu przypisań. Wpływa też na nazwę paczki tworzonej przy instalacji. |
| DEVICE ID | Identyfikator komunikacji Builder ↔ WASM. Musi odpowiadać zainstalowanemu modułowi. Zmiana wymaga Build i Install. |
| AIRCRAFT NAME | Informacja o samolocie w profilu; nie zmienia automatycznie samolotu w MSFS. |
| MSFS VERSION | Wybór SDK/toolsetu oraz autodetekcji Community dla 2020 lub 2024. |
| SC PREFIX | Pole zgodności starszych profili związane z nazwą klienta SimConnect. Obecny protokół live identyfikuje kanały głównie przez Device ID. |
| Open / New | Wczytanie JSON albo utworzenie profilu. New pozwala wybrać, czy zachować obecne przypisania. |
| Save / Apply live | Zapis pliku oraz osobno zastosowanie aktualnej konfiguracji w MSFS. |
Settings
- Profiler 1: główne połączenie. IP wskazuje komputer z Connect / Profiler; port wskazuje jego usługę.
- Profiler 2: opcjonalny drugi komputer. Włącz Enable, podaj IP i port. Zdarzenia obu połączeń są łączone. Przydziel panele tak, żeby nie dublowały się między profilerami.
- Apply & Reconnect: zapisuje ustawienia połączeń i uruchamia ponowne połączenie. To inny przycisk niż Apply live.
- Dark Mode: zmienia wygląd aplikacji.
- Toolchain Settings: pozostaw ścieżki puste dla autodetekcji. Pole podpisane Clang++ path jest w obecnej wersji wykorzystywane do wskazania
MSBuild.exe; pole CMake nie jest używane przez bieżący build WASM. - MSFS SDK path / Re-detect Toolchain: wskazanie katalogu SDK i ponowne wykrycie narzędzi. Przed wykryciem wybierz właściwe MSFS VERSION.
Build & Install
Build WASM kompiluje moduł. Cancel anuluje budowanie. Install to MSFS kopiuje wynik do Community. Build Log pokazuje błędy kompilacji oraz diagnostykę live; Clear czyści widok logu.
WasmBuilder_* w wybranym Community przy instalacji nowej paczki. Nie traktuj ich jako archiwum profili — własne profile przechowuj w JSON.05 · Sekcja Presets
Preset to para Description i Expression. Opis pomaga znaleźć funkcję, a Expression zawiera właściwe wyrażenie odczytu albo komendę RPN. Presety są częścią profilu i pojawiają się w podpowiedziach pól edycji inputów/outputów.
- Otwórz Presets, wpisz fragment nazwy lub wyrażenia w Search.
- Wybierz gotowy preset albo kliknij Add New.
- Uzupełnij Description, np. „BARO kapitan — hPa”, i Expression, np.
(L:N_FCU_EFIS1_BARO_HPA). Zatwierdź edycję komórki, przechodząc do innej. - W dialogu przypisania zacznij wpisywać opis lub wyrażenie i wybierz podpowiedź. Sprawdź, czy w polu znalazło się właściwe wyrażenie.
- Zapisz profil przez Save. Po zmianie przypisania kliknij Apply live.
| Przycisk | Działanie |
|---|---|
| Delete Selected | Usuwa zaznaczone presety z biblioteki profilu. |
| Load Defaults | Zastępuje bieżącą listę presetów domyślną bazą. Przed zmianą zachowaj własną kopię profilu lub eksport. |
| Import CSV | Dopisuje presety z pliku. Pierwszy wiersz jest nagłówkiem; następne są dzielone na opis i wyrażenie przy pierwszym przecinku. |
| Export CSV | Eksportuje bibliotekę presetów, nie cały profil inputów i outputów. |
Description,Expression
BARO kapitan hPa,(L:N_FCU_EFIS1_BARO_HPA)
Przykładowy zapis przełącznika,1 (>L:MY_SWITCH)Import CSV jest prosty: nie umieszczaj przecinków w opisach ani wielowierszowych wyrażeń. Domyślne pliki tekstowe mogą używać formatu Description#Expression; to nie jest format CSV.
06 · Profile, przykłady i własne kopie
Profil JSON zawiera inputy, outputy, presety i ustawienia identyfikacyjne. Folder własnych profili to domyślnie %USERPROFILE%\Documents\WasmPluginBuilder; faktyczny katalog pokazuje zakładka Profiles.
Praca na przykładowym profilu
- W Profiles wybierz wpis z symbolem 🔒 i oznaczeniem [sample], następnie Open.
- Kliknij Save. Dla przykładu z folderu SampleProfiles aplikacja wymusi zapis kopii do nowego pliku.
- Wybierz katalog własnych profili i nazwę, np.
Fenix_moj_kokpit.json. - Edytuj i zapisuj tę kopię. Oryginału w SampleProfiles nie nadpisuj ani nie usuwaj.
Przykłady służą jako baza. Można zmieniać ich wczytaną konfigurację w pamięci, ale trwałe modyfikacje zapisuj jako własny profil. Zablokowany przykład nie może być usunięty przyciskiem Delete.
Zapis, nowy profil i lista
- Save dla istniejącego pliku: Yes nadpisuje wskazany JSON, No otwiera zapis pod nową nazwą, Cancel anuluje.
- New: wybierz, czy kopiować bieżące ustawienia/przypisania, czy zacząć od pustej listy. Sprawdź nazwę i docelowy plik.
- Refresh: odświeża listę plików. Zmiana folderu w Profiles zmienia katalog przeglądania własnych profili.
- Delete: usuwa własny plik po potwierdzeniu. Nie służy do usuwania jednego przypisania.
- Profile Details: pomaga porównać samolot i zawartość profilu. Faktyczne przypisania sprawdź też na listach Inputs/Outputs.
Ostatnia sesja i profil domyślny
Aktualna wersja przywraca ostatnią sesję, również niezapisane zmiany. Kopia sesji jest zapisywana co 2 sekundy i przy zamknięciu, osobno od Twojego JSON. Default Profile → Set selected wskazuje profil startowy używany, gdy nie ma poprawnej zapisanej sesji. Clear usuwa wybór profilu domyślnego; nie kasuje kopii ostatniej sesji.
07 · Jak dodawać inputy
- Przejdź do Inputs i wybierz typ kontrolki.
- Uzupełnij Label — czytelną nazwę.
- Kliknij Learn i użyj właściwego fizycznego przycisku, przełącznika, pokrętła lub osi. Nasłuch trwa do około 10 sekund. Connect / Profiler musi być połączony.
- Sprawdź Hardware Name. Learn wybiera identyfikator sprzętu, nie zmienną samolotu.
- Wpisz wyrażenia/zmienną docelową albo wybierz preset. Zapisz dialog.
- Kliknij Apply live, przetestuj kontrolkę i zapisz profil przez Save.
PushButton — przycisk chwilowy
On Press wykonuje komendę przy naciśnięciu, On Release przy zwolnieniu. Puste pole ignoruje tę krawędź. Double activation wykonuje komendę naciśnięcia dwa razy; używaj tylko, gdy dana funkcja samolotu tego wymaga.
On Press: 1 (>L:MY_BUTTON)
On Release: 0 (>L:MY_BUTTON)To przykład składni. Dla funkcji przełączającej stan zwykle nie wpisuj tego samego „toggle” na press i release, bo jeden fizyczny klik może przełączyć stan dwa razy.
Latching — przełącznik dwustanowy
On Expression dla pozycji włączonej, Off Expression dla wyłączonej. Najlepiej ustawiaj stan jednoznacznie: 1 (>L:MY_SWITCH) i 0 (>L:MY_SWITCH).
Multi-Pos — przełącznik wielopozycyjny
Wybierz liczbę pozycji. Każda pozycja ma własne Hardware Name i Expression; identyfikatory możesz nauczyć osobno. Przykład: pierwsza pozycja 0 (>L:MY_SELECTOR), druga 1 (>L:MY_SELECTOR), trzecia 2 (>L:MY_SELECTOR). Sprawdź, czy zdarzenia danej kontrolki dotyczą wejścia w pozycję czy także jej opuszczenia.
Encoder — pokrętło przyrostowe
Clockwise obsługuje obrót w prawo, Counter-clockwise w lewo. Dla zmiennej liczbowej przykład to (L:MY_VALUE) 1 + (>L:MY_VALUE) oraz (L:MY_VALUE) 1 - (>L:MY_VALUE). Dobierz krok i ograniczenia do samolotu.
Axis — oś analogowa
Wskaż Target SimVar i Unit, a następnie transformację. Dla zmiennej lokalnej użyj jawnego L:NAZWA. W obecnym torze live przekazywana jest surowa wartość SDK — mimo podpowiedzi 0–1 w dialogu. Zakres może wynosić np. 0–255 albo 0–65535. Ustal zakres sprzętu przed dobraniem Input Min/Max.
| Transformacja | Działanie |
|---|---|
| Passthrough | Przekazuje wartość bez skalowania. |
| LinearScale | Mapuje Input Min/Max na Output Min/Max. Przykład: 0–65535 → 0–1. Nie ogranicza automatycznie wartości poza zakresem. |
| Invert | Oblicza 1 − wartość. Stosuj do wartości o zakresie 0–1. |
| Threshold | Dla wartości ≥ próg zwraca Output if ≥, w przeciwnym razie Output if below. |
| RangeMap | Mapowanie przedziałów dostępne w modelu profilu; obecny edytor nie udostępnia pełnej edycji listy przedziałów. |
08 · Jak dodawać outputy
- W Outputs wybierz typ: LED, Display, LCD, Servo, Stepper lub Dimmer.
- Ustaw Label i właściwy adres sprzętu. Dla LED/Display korzystaj z wyboru Section → Panel → LED/Display Name. Sam wpis
DISPLAY_nie wskazuje prawidłowego wyświetlacza. - W Source Preset wybierz lub wpisz wyrażenie odczytu.
- Ustaw transformację lub mnożnik. Zapisz dialog, kliknij Apply live i sprawdź wynik.
- Zapisz plik profilu.
(L:N_FCU_EFIS1_BARO_HPA), a nie (>L:N_FCU_EFIS1_BARO_HPA). Znak > oznacza zapis i należy do komend inputów.LED
Wybierz fizyczną diodę. Przyciski testowe ON/OFF sprawdzają sam tor sprzętowy bez zależności od wartości samolotu. Typowa transformacja to Threshold z progiem 0.5, wyjściem powyżej 1 i poniżej 0. Po transformacji wartość różna od zera włącza LED.
Display — wyświetlacz liczbowy
Wybierz wyświetlacz i źródło. Multiplier mnoży odczyt przed wysłaniem do sprzętu: np. 123450 × 0.001 = 123.45. Dla odczytu 1019, który ma pokazać 1019, ustaw 1. Test Show Test (8888…) i przycisk czyszczenia sprawdzają wybrany fizyczny wyświetlacz.
Display obsługuje także alternatywne źródło i kreski — następny rozdział. Liczba cyfr, kropka i sposób prezentacji zależą również od wyświetlacza oraz SDK.
LCD
W obecnym runtime LCD przekazuje wartość liczbową do sprzętu. Pole Format string jest zapisywane w profilu, ale własny tekst/prefix i pełne formatowanie printf nie są jeszcze realizowane przez tor live. Nie używaj go jako gwarancji wyświetlenia np. „IAS: 250”. Dla liczbowych wyświetlaczy z warunkami wybierz Display.
Servo
Wskaż mechanizm oraz źródło, następnie dopasuj zakres transformacją LinearScale do zakresu urządzenia. Nie zakładaj, że każda wskazówka używa tej samej skali.
Stepper
Źródło i transformacja określają pozycję krokową. Model profilu zawiera też MaxSteps — maksymalną liczbę kroków przekazywaną do SDK; bieżący dialog nie udostępnia osobnego pola do jej edycji. Dopasuj konfigurację do konkretnego urządzenia.
Dimmer
Źródło steruje jasnością/PWM. LinearScale może np. przeliczyć 0–1 na 0–255. Oczekiwany zakres sprawdź dla konkretnego outputu SDK.
Filtry na listach Inputs i Outputs wyszukują fragment Hardware Name, Label oraz odpowiednio Target/Event lub Source SimVar. Filtr tylko ogranicza widok; nie usuwa przypisań.
09 · Warunkowa logika wyświetlaczy
W edycji Display możesz wybrać inne źródło liczby oraz niezależnie zastąpić liczbę kreskami. Wyłączona opcja nie wpływa na wyświetlacz.
Use alternate source when — inne źródło wartości
- W Source Preset ustaw główne źródło, np.
(L:N_FCU_EFIS1_BARO_HPA). - Zaznacz Use alternate source when.
- W Condition source wpisz zmienną warunku, np.
(L:S_FCU_EFIS1_BARO_MODE). - Wybierz porównanie i wpisz Compare with, np. Equal oraz 0.
- W Alternate source wpisz
(L:N_FCU_EFIS1_BARO_INCH). - Zapisz i kliknij Apply live. Przy MODE = 0 użyte zostanie INCH; w pozostałych przypadkach HPA.
| Porównanie | Znaczenie |
|---|---|
| Equal / NotEqual | Równe / różne od podanej wartości. |
| Greater / GreaterOrEqual | Większe / większe lub równe. |
| Less / LessOrEqual | Mniejsze / mniejsze lub równe. |
Porównanie dotyczy wartości zmiennej warunku, nie wartości głównego wyświetlacza. Equal oznacza dokładną równość — dla płynnej wartości lepszy może być próg. Ten sam Multiplier dotyczy obu źródeł; dodatkowe przeliczenie jednego źródła umieść w jego wyrażeniu RPN.
Show dashes when — kreski zamiast liczby
- Zaznacz Show dashes when (takes priority).
- Wpisz zmienną warunku, porównanie i wartość, np.
(L:MY_MANAGED_MODE), Equal, 1. - W Dashes wpisz tekst pasujący do liczby cyfr, np.
---albo----. - Zapisz i kliknij Apply live.
Warunek kresek ma pierwszeństwo. Po jego wyłączeniu wraca liczba, także gdy odczyt liczbowy nie zmienił się. Dashes przyjmuje od 1 do 16 znaków „-”; liczba rzeczywistych cyfr zależy od sprzętu.
L:. Dla zwykłych SimVar wpisz jawnie np. (A:INDICATED ALTITUDE, feet). Najbardziej jednoznaczna forma zmiennych Fenixa to (L:NAZWA). Znaczenie MODE = 0/1 i nazwy LVar sprawdź w swoim samolocie; przykład nie gwarantuje identycznej numeracji w każdym wydaniu.10 · Codzienna praca i zmiany live
- Uruchom Connect / Profiler, Builder i MSFS z odpowiednim samolotem.
- Sprawdź przywrócony profil, Device ID oraz wersję symulatora.
- Edytuj przypisania. Zapis dialogu aktualizuje profil w aplikacji.
- Kliknij Apply live i poczekaj na potwierdzenie WASM.
- Sprawdź działanie, następnie kliknij Save, aby utrwalić JSON.
| Zmiana | Potrzebna operacja |
|---|---|
| Wyrażenia inputów, źródła outputów, mnożniki, transformacje, warunki i kreski | Apply live; Save dla trwałego pliku. |
| Dodanie/usunięcie przypisania, inny profil z tym samym Device ID | Apply live. |
| Device ID, zmiana wersji symulatora, aktualizacja kodu modułu WASM | Build → Install → ponowne załadowanie modułu przez restart symulatora. |
| Adres/port profilera | Apply & Reconnect w Settings. |
W czasie oczekiwania na potwierdzenie konfiguracji inputy nie są wysyłane do samolotu. Potwierdzenie oznacza przyjęcie konfiguracji przez moduł, a nie sprawdzenie poprawności każdej zmiennej samolotu.
Usunięty output nie jest automatycznie zerowany — sprzęt może zachować ostatnią wartość. Protokół obsługuje 512 slotów odczytu; każdy output zajmuje jeden, a każdy aktywny warunek kresek dodatkowy. Wyrażenie ma limit 1023 bajtów UTF-8.
11 · Rozwiązywanie problemów
| Objaw | Co sprawdzić |
|---|---|
| Learn nie reaguje | Połączenie Profiler 1, IP/port, działanie kontrolki w Connect i właściwy typ inputu. Kliknij Learn ponownie i użyj sprzętu w czasie nasłuchu. |
| Po restarcie działa tylko część kokpitu | Nazwa aktywnego profilu oraz liczba przypisań. Mały profil testowy nie zawiera pełnego zestawu. Otwórz własną kopię pełnego profilu i Apply live. |
| Brak potwierdzenia Apply live | Czy MSFS działa, moduł live jest zainstalowany w jego Community, Device ID się zgadza i symulator został uruchomiony po instalacji. Starszy moduł nie obsługuje nowego protokołu. |
| Wyświetlacz pokazuje niewłaściwą liczbę | Source, prefiks L:/A:, jednostki i Multiplier. Dla HPA użyj odczytu HPA, a nie zmiennej zdarzenia E_… Sprawdź warunki alternatywne. |
| Po dodaniu warunku odczyt stoi | Jawne (L:NAZWA) w obu polach, poprawna nazwa LVar, porównanie i aktualny Builder. Zastosuj konfigurację ponownie. |
| Przycisk przełącza dwa razy | Czy toggle nie jest na obu krawędziach; czy Double activation jest celowo włączone. |
| Build nie znajduje toolsetu | VS 2022 z C++, integracja SDK WASM, poprawna wersja SDK. Użyj Re-detect Toolchain; przeczytaj pierwszy istotny błąd w Build Log. |
| MSFS 2024 nie widzi modułu | MSFS VERSION = 2024, kompilacja MSFS2024 i Community 2024. Folderu 2020 nie używaj jako zamiennika. |
| Test sprzętu działa, samolot nie | Test potwierdza sprzęt; sprawdź zmienną/komendę dla konkretnego samolotu, Apply live i log inputów/outputów. |
Jak czytać log
[Live config] ... inputs=480; outputs=356
[Live input] AP1 FCU: raw=1; RPN=...
[Live output] ... source=(L:N_FCU_EFIS1_BARO_HPA); raw=1019; multiplier=1; dashes=False; sent=1019raw to wynik odczytu źródła, multiplier to mnożnik, sent to wartość/tekst wysłany do sprzętu. no binding oznacza brak dopasowanego inputu, a waiting for configuration acknowledgement oczekiwanie na potwierdzenie. Szczegółowe logi diagnostyczne zależą od wydania Buildera. Output jest logowany głównie przy zmianie wartości lub warunku, więc brak nowej linii przy stałej wartości może być normalny.
12 · Słownik i materiały
| Pojęcie | Znaczenie |
|---|---|
| Binding / przypisanie | Połączenie jednej kontrolki/urządzenia z działaniem lub odczytem samolotu. |
| SimVar / A: | Standardowa zmienna MSFS, np. wysokość. Jednostka wpływa na odczyt. |
| LVar / L: | Zmienna lokalna dodatku/samolotu, np. tryb panelu Fenixa. |
| RPN / Expression | Wyrażenie kalkulatora MSFS: odczyt (L:X), zapis 1 (>L:X), dodawanie (L:X) 1 +. |
| Community | Katalog paczek dodatków wybranego symulatora. |
| SDK / toolset | Narzędzia i biblioteki do zbudowania modułu dla konkretnego MSFS. |
| WASM | Moduł uruchamiany wewnątrz symulatora. |
| SimConnect | Interfejs komunikacji aplikacji z MSFS. |
Oficjalne materiały
- Microsoft — .NET 8 Desktop Runtime
- MSFS 2020 — zawartość SDK
- MSFS 2024 — instalacja i opis SDK
- MSFS 2024 — projekty WASM i toolset
Instrukcja opisuje aktualny kod projektu, w tym nowe funkcje live, logikę wyświetlaczy i przywracanie sesji. Starszy instalator może nie zawierać tych funkcji. Przykładowe nazwy zmiennych wymagają potwierdzenia dla danego samolotu i jego wersji.