Dvě ECU najednou
Projekt Qenex_TcpClient_XCP_2NucleoBoards_DAQ_STIM.qproj najdete ve složce
Examples vedle QInsight.exe.
QInsight není omezený na jedno zařízení: v tomto příkladu měří, kalibruje a stimuluje dvě reálné ECU současně — dvě desky NUCLEO-H723ZG připojené přes switch k PC. Každá deska má vlastní driver a vlastní instanci protokolu XCP on TCP, signály obou jednotek jsou zobrazeny společně v jednom workspace: grafy je záměrně kombinují, tabulky vedou každou jednotku zvlášť.

Každá jednotka běží zcela nezávisle na vlastní IP adrese
(192.168.2.20 a 192.168.2.21) — generuje tři sinusovky a přijímá
zápisy parametrů. QInsight se ke každé připojuje samostatnou XCP session,
takže výpadek, kalibrace ani stimulace jedné jednotky druhou nijak
neovlivní.
Jak příklad funguje
- Každá deska počítá tři sinusovky.
sine1je rozdělená na raw (interní model) a value (publikovaný signál) — na ní se předvádí STIM bypass.sine2asine3jsou běžná měření. - Měřené signály přicházejí DAQ eventem po 10 ms, kalibrační parametry (amplitudy, periody) se čtou pollingem po 500 ms a dají se kdykoli zapsat.
- Periodický skript streamuje přes STIM do
sine1_stimobou desek pomalou sinusovku — pro každou jednotku s jiným rozkmitem a frekvencí, aby byly v grafech na první pohled rozlišitelné. - Přepínačem
sine1_bypasssi u každé jednotky nezávisle vyberete, jestlisine1_valuevlastní interní model desky, nebo master přes STIM.
Podstata vícejednotkového projektu je v konfiguraci: každá jednotka = vlastní driver + vlastní instance protokolu, zbytek (eventy, konverze, prezentace) se sdílí.
Projekt krok za krokem
Projekt a drivery
Projekt se jmenuje XCP on TCP - 2x Nucleo demo signals (STIM bypass).


V sekci Drivers & Protocols jsou dva TCP Client drivery — STM1 Nucleo TCP a STM2 Nucleo TCP. Nastavení mají identické až na IP
adresu: STM1 míří na 192.168.2.20, STM2 na 192.168.2.21. Pod každým
driverem běží vlastní instance protokolu XCP on TCP — dvě nezávislé
XCP session, každá se svou deskou.




Eventy
Tři eventy definované jednou a sdílené oběma protokoly — každá XCP session si z nich vytvoří vlastní běhový kontext:
| Event | Typ | K čemu |
|---|---|---|
Daq_demo10ms | DAQ, 10 ms | deska sama streamuje měřené signály |
Stim_demo10ms | STIM, 10 ms | master streamuje stimulaci do desky |
Poll500ms | polling, 500 ms | čtení kalibračních parametrů |






Konverze
Dvě lineární konverze: PassThrough (1:1) pro většinu signálů
a StimPercent (eng = raw × 5 + 50) pro stimulaci — hodnota se zadává
v procentech rozsahu ±10, takže 75 % znamená raw 5,0. QInsight
konverzi při zápisu invertuje a po STIM streamuje raw hodnotu.




Prezentace
Šest prezentací podle rolí signálů — a protože jsou obě desky stejné, každou prezentaci sdílí příslušná dvojice proměnných STM1/STM2:
| Prezentace | Rozsah | K čemu |
|---|---|---|
Sine value | −10…10 | výstupy sinusovek |
Amplitude | 0…10 | kalibrační parametr amplitudy |
Period | 0,05…60 s | kalibrační parametr periody |
HAL tick | ms | milisekundový čítač desky |
Bypass | 0/1 | přepínač bypassu |
Stim level | 0…100 % | stimulace (konverze StimPercent) |












Proměnné
Projekt má 26 proměnných — stejná třináctka dvakrát. Jména nesou
prefix jednotky (stm1_/stm2_), namespace je dělí na /Stm1 a /Stm2
a každá polovina je napojená na svůj protokol — obě sady se liší jen
tím, ke které jednotce patří. Role v každé třináctce:
sine1_value+sine1_raw— publikovaný signál a interní model (DAQ); dvojice, na které je vidět bypass.sine2_value,sine3_value— běžná DAQ měření.sine1–3_amplitude,sine1–3_period— zapisovatelné kalibrační parametry, čtené pollingem.uwTick(HAL tick) — milisekundový čítač; důkaz, že po XCP je dostupná libovolná globální proměnná z ELF.sine1_stim— zápisová proměnná streamovaná po STIM.sine1_bypass— přepínač: 0 = signál vlastní deska, 1 = master.


Skripty
Stimulaci obsluhuje dvojice skriptů: init.py (Startup) připraví
parametry, script.py (Periodic, 20 ms) obsluhuje obě jednotky najednou —
každou jinou amplitudou a frekvencí, aby byly křivky v grafech
rozlišitelné:
import math
t = 0
a = 50
b = 75
f1 = 1/8
f2 = 1/3
t += 0.02
stm1_sine1_stim.EngValue = 50 + a * math.sin(2 * math.pi * f1 * t)
stm2_sine1_stim.EngValue = 50 + b * math.sin(2 * math.pi * f2 * t)
STM1 dostává pomalou vlnu (perioda 8 s), STM2 rychlejší a s větším
rozkmitem (perioda 3 s). Zápis jde v procentech přes konverzi
StimPercent — skript s raw hodnotami vůbec nepracuje.


Výsledek
Workspace záměrně kombinuje signály obou desek v jednom grafu: levý graf
kreslí STM1 sine1 (value + raw, STIM bypass) spolu se STM2 sine2/3,
pravý zrcadlově STM2 sine1 spolu se STM1 sine2/3. Pod grafy jsou dvě
Watch Table — jedna pro každou jednotku, obě s kompletní sadou: hodnoty,
kalibrační parametry se zápisem, stimulace a bypass.


Zapněte STM1 Sine 1 bypass a červená čárkovaná křivka v levém grafu
přestane sledovat interní model — převezme ji pomalá vlna ze skriptu,
zatímco sine1_raw pokračuje dál. STM2 přitom běží nezávisle vlastním tempem.
Stejně nezávislá je kalibrace: změna STM2 Sine 2 amplitude se projeví
jen na druhé desce.
Co si z příkladu odnést
- Více jednotek = více dvojic driver + protokol. Konfigurace se jinak nemění; eventy, konverze i prezentace se definují jednou a sdílejí.
- Jednotky běží nezávisle — každá na své adrese, se svou session;
výpadek nebo zásah do jedné se druhé nedotkne. Prefixy jmen
a namespacy (
/Stm1,/Stm2) udržují projekt přehledný. - Grafy nejsou vázané na zdroj — do jednoho grafu lze přidat signály z různých zařízení a porovnáváte je na společné časové ose.
- Kalibrace a STIM zůstávají oddělené pro každou jednotku — každá session má vlastní zápisy, vlastní bypass a vlastní stimulaci; jeden skript může řídit všechny najednou.
Dále
- XCP on TCP — nastavení protokolu a driveru v referenci.
- Polling, DAQ a STIM u XCP — jak se tři způsoby přenosu liší a kdy který použít.
- Bitové pole a skript — další kompletní příklad nad konfigurací projektu.

