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ů:

TvarOsyDataPříklad
PoležádnéN hodnotblok 16 korekčních konstant
KřivkaX1×N hodnotcharakteristika čidla (8 bodů)
MapaX + YN×M hodnotmapa 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é

  1. Otevřete Home → Project Configuration → Variables.
  2. V rozbalovacím seznamu vedle tlačítka + zvolte Matrix a klikněte na +.
  3. V detailu proměnné vyplňte kromě obvyklých vlastností (Name, Label…) tři pole specifická pro matici: Default Data Type, Endianness a Layout.

Matrix proměnná Drivability v Project ConfigurationMatrix proměnná Drivability v Project Configuration

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):

TypVelikost prvku
byte, sbyte1 B
ushort, short2 B
uint, int, float4 B
ulong, long, double8 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
xCountpočet breakpointů osy X (sloupce); zadáním klíče osa X vzniká
xTypedatový typ prvků osy X (jinak Default Data Type)
xPresjméno prezentace pro osu X
xLabelpopisek osy X — Matrix control ho zobrazí nad tabulkou
yCountpočet breakpointů osy Y (řádky); vyžaduje osu X
yType, yPres, yLabeltotéž pro osu Y (popisek se kreslí svisle vlevo)
dataCountpočet datových hodnot — jen u pole bez os
dataTypedatový typ datových prvků (jinak Default Data Type)
dataPresjméno prezentace pro data

Pravidla:

  • Pole (bez os) musí mít dataCount. S osami se dataCount neuvádí — počet dat je odvozený: křivka xCount, mapa xCount × yCount.
  • Osa Y vyžaduje osu X (yCount bez xCount je chyba).
  • xType/xPres/xLabel bez xCount je chyba (obdobně pro Y).
  • Prezentace (xPres, yPres, dataPres) odkazují jménem na prezentace projektu — musí existovat. Datovou sekci popisuje Label samotné proměnné, samostatný dataLabel neexistuje.
  • 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í:

SekceHodnotBajty (offset)
osa X30–5
osa Y26–9
data (2 řádky × 3 sloupce)610–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í i inputRegister) — bitové tabulky coil/discreteInput validace 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).
  • wordOrder se u matice neuplatní — pořadí bajtů určuje Endianness proměnné. Registr Modbusu jsou 2 bajty, vyšší bajt první.

Tip: s buňkami ushort a Endianness = Big odpovídá jedna buňka přesně jednomu registru a hodnoty v QInsight sedí 1:1 s registry v zařízení. Pozor na pasti: buňky byte = dvě buňky v jednom registru, ushort + Little = prohozené bajty (z 5 se stane 1280).

Dále

Matici zobrazíte a editujete controlem Matrix.