Proměnná Matrix (pole, křivka, mapa)
Vedle skalární proměnné umí QInsight i proměnnou typu Matrix — souvislý blok bajtů, který se interpretuje jako tabulka hodnot s volitelnými osami. Typické použití jsou kalibrační data řídicích jednotek: bloky hodnot, charakteristiky a mapy (v terminologii ASAP2 typy VAL_BLK, CURVE a MAP).
Podle toho, které osy jsou definované, má proměnná jeden ze tří tvarů:
| Tvar | Osy | Data | Příklad |
|---|---|---|---|
| Pole | žádné | N hodnot | blok 16 korekčních konstant |
| Křivka | X | 1×N hodnot | charakteristika čidla (8 bodů) |
| Mapa | X + Y | N×M hodnot | mapa předstihu otáčky × teplota |
Osy nesou breakpointy (hodnoty, ve kterých je mapa definovaná), datová sekce vlastní hodnoty. Celá matice — osy i data — se se zařízením přenáší jako jeden blok a zobrazuje se controlem Matrix.
Založení proměnné
- Otevřete Home → Project Configuration → Variables.
- V rozbalovacím seznamu vedle tlačítka + zvolte Matrix a klikněte na +.
- V detailu proměnné vyplňte kromě obvyklých vlastností (Name, Label…) tři pole specifická pro matici: Default Data Type, Endianness a Layout.


Default Data Type a Endianness
- Default Data Type — datový typ prvku, který se použije pro všechny
sekce, jež si v Layoutu neurčí vlastní typ. Výchozí je
byte. - Endianness — pořadí bajtů vícebajtových prvků (
Little/Big). Platí pro celý blok, tedy pro osy i data.
Podporované typy prvků (typ string u matice použít nelze):
| Typ | Velikost prvku |
|---|---|
byte, sbyte | 1 B |
ushort, short | 2 B |
uint, int, float | 4 B |
ulong, long, double | 8 B |
Layout — definice sekcí
Pole Layout popisuje sekce matice stejným zápisem klíč="hodnota";…,
jaký znáte z polí Settings a Comm params. Sekce se definují v počtech
hodnot (ne bajtů) — bajtové offsety a celková velikost se dopočítají
automaticky z počtů a typů prvků.
| Klíč | Význam |
|---|---|
xCount | počet breakpointů osy X (sloupce); zadáním klíče osa X vzniká |
xType | datový typ prvků osy X (jinak Default Data Type) |
xPres | jméno prezentace pro osu X |
xLabel | popisek osy X — Matrix control ho zobrazí nad tabulkou |
yCount | počet breakpointů osy Y (řádky); vyžaduje osu X |
yType, yPres, yLabel | totéž pro osu Y (popisek se kreslí svisle vlevo) |
dataCount | počet datových hodnot — jen u pole bez os |
dataType | datový typ datových prvků (jinak Default Data Type) |
dataPres | jméno prezentace pro data |
Pravidla:
- Pole (bez os) musí mít
dataCount. S osami sedataCountneuvádí — počet dat je odvozený: křivkaxCount, mapaxCount × yCount. - Osa Y vyžaduje osu X (
yCountbezxCountje chyba). xType/xPres/xLabelbezxCountje chyba (obdobně pro Y).- Prezentace (
xPres,yPres,dataPres) odkazují jménem na prezentace projektu — musí existovat. Datovou sekci popisuje Label samotné proměnné, samostatnýdataLabelneexistuje. - Chybný Layout se ukáže okamžitě — pole se orámuje červeně a chyba se zobrazí jako tooltip.
Příklady
Pole — 16 hodnot typu float (64 B):
dataCount="16";dataType="float"
Křivka — 8 breakpointů otáček a 8 hodnot momentu:
xCount="8";xPres="Speed";xLabel="Speed [RPM]";dataPres="Torque"
Mapa — 3 sloupce (otáčky) × 2 řádky (teplota), s popisky obou os:
xCount="3";xPres="Speed";xLabel="Speed [RPM]";yCount="2";yPres="Temp";yLabel="Temp. [K]";dataPres="Torque"
Uspořádání bloku v paměti
Blok má vždy pořadí: osa X → osa Y → data; data mapy jsou uložená
po řádcích (index = y × xCount + x). Pro mapu 3×2 z příkladu výše
s Default Data Type = ushort a bez vlastních typů sekcí:
| Sekce | Hodnot | Bajty (offset) |
|---|---|---|
| osa X | 3 | 0–5 |
| osa Y | 2 | 6–9 |
| data (2 řádky × 3 sloupce) | 6 | 10–21 |
Celkem 11 hodnot = 22 B. Změníte-li typ některé sekce (xType, yType,
dataType), offsety se automaticky přepočítají.
Prezentace a konverze per sekce
Každá sekce má vlastní prezentaci — osy mívají jiné jednotky a škálování než data (otáčky × teplota × moment). Platí totéž co u skalární proměnné:
- Lineární konverze přepočítá raw hodnotu z bloku na engineering
hodnotu (
eng = raw × Multiplier + Offset); Print Format a Unit prezentace určují formát zobrazení. - Enum konverze zobrazí místo čísla název stavu.
- Sekce bez prezentace zobrazuje přímo raw hodnotu.
Při editaci ve write módu zadáváte vždy engineering hodnotu — do zařízení se zapíše raw hodnota získaná inverzní konverzí (zaokrouhlená a zkontrolovaná na rozsah datového typu).
Omezení velikosti
Celková velikost matice je omezená na 246 B (osy + data dohromady). Limit plyne z Modbusu: matice se přenáší jedním požadavkem bez dělení do více rámců a funkce Write Multiple Registers (FC16) přenese nejvýše 123 registrů = 246 B. Větší layout odmítne validace v Project Configuration.
Přiřazení k protokolu (Modbus Master)
Matici přiřadíte k protokolu stejně jako skalární proměnnou (šipkou do Communicated). U Modbus Masteru zadejte v Comm params např.:
registerType="holdingRegister";address="100";direction="readWrite";eventRef="poll500ms"
Zvláštnosti oproti skalární proměnné:
- Matice smí být jen v registrové tabulce (
holdingRegister, pro čtení iinputRegister) — bitové tabulkycoil/discreteInputvalidace odmítne. - Blok zabírá souvislý rozsah registrů od
address; počet registrů = velikost v bajtech / 2 (zaokrouhleno nahoru). Mapa z příkladu (22 B) obsadí registry 100–110. - Celá matice se čte jedním požadavkem FC03/FC04; při zápisu se posílají jen registry změněných buněk (FC06/FC16).
wordOrderse u matice neuplatní — pořadí bajtů určuje Endianness proměnné. Registr Modbusu jsou 2 bajty, vyšší bajt první.
Tip: s buňkami
ushortaEndianness = Bigodpovídá jedna buňka přesně jednomu registru a hodnoty v QInsight sedí 1:1 s registry v zařízení. Pozor na pasti: buňkybyte= dvě buňky v jednom registru,ushort+Little= prohozené bajty (z 5 se stane 1280).
Dále
Matici zobrazíte a editujete controlem Matrix.

