[{"data":1,"prerenderedAt":1121},["ShallowReactive",2],{"docs-nav-docs_en":3,"docs-page-\u002Fen\u002Fvisualization\u002Fmatrix-control":367,"docs-surround-\u002Fen\u002Fvisualization\u002Fmatrix-control":1118},[4],{"title":5,"path":6,"stem":7,"children":8},"En","\u002Fen","en",[9,13,41,58,76,103,157,171,190,211,238,283,303],{"title":10,"path":6,"stem":11,"navTitle":12},"QInsight Documentation","en\u002Findex","Overview",{"title":14,"navTitle":15,"path":16,"stem":17,"children":18,"page":40},"Getting Started",null,"\u002Fen\u002Fgetting-started","en\u002F01.getting-started",[19,23,27,31,36],{"title":20,"path":21,"stem":22,"navTitle":20},"What is QENEX Suite","\u002Fen\u002Fgetting-started\u002Fwhat-is-qenex-suite","en\u002F01.getting-started\u002F1.what-is-qenex-suite",{"title":24,"path":25,"stem":26,"navTitle":24},"What is QInsight","\u002Fen\u002Fgetting-started\u002Fwhat-is-qinsight","en\u002F01.getting-started\u002F2.what-is-qinsight",{"title":28,"path":29,"stem":30,"navTitle":28},"Installation","\u002Fen\u002Fgetting-started\u002Finstallation","en\u002F01.getting-started\u002F3.installation",{"title":32,"path":33,"stem":34,"navTitle":35},"The QInsight user interface","\u002Fen\u002Fgetting-started\u002Fthe-qinsight-interface","en\u002F01.getting-started\u002F4.the-qinsight-interface","User interface",{"title":37,"path":38,"stem":39,"navTitle":37},"Licensing","\u002Fen\u002Fgetting-started\u002Flicensing","en\u002F01.getting-started\u002F5.licensing",false,{"title":42,"navTitle":15,"path":43,"stem":44,"children":45,"page":40},"First Project","\u002Fen\u002Ffirst-project","en\u002F02.first-project",[46,50,54],{"title":47,"path":48,"stem":49,"navTitle":47},"Create a project","\u002Fen\u002Ffirst-project\u002Fcreate-a-project","en\u002F02.first-project\u002F1.create-a-project",{"title":51,"path":52,"stem":53,"navTitle":51},"Project structure","\u002Fen\u002Ffirst-project\u002Fproject-structure","en\u002F02.first-project\u002F2.project-structure",{"title":55,"path":56,"stem":57,"navTitle":55},"Project password","\u002Fen\u002Ffirst-project\u002Fproject-password","en\u002F02.first-project\u002F3.project-password",{"title":59,"navTitle":15,"path":60,"stem":61,"children":62,"page":40},"Connecting a Device","\u002Fen\u002Fconnecting-a-device","en\u002F03.connecting-a-device",[63,67,71],{"title":64,"path":65,"stem":66,"navTitle":64},"Add a driver","\u002Fen\u002Fconnecting-a-device\u002Fadd-a-driver","en\u002F03.connecting-a-device\u002F1.add-a-driver",{"title":68,"path":69,"stem":70,"navTitle":68},"Add a protocol","\u002Fen\u002Fconnecting-a-device\u002Fadd-a-protocol","en\u002F03.connecting-a-device\u002F2.add-a-protocol",{"title":72,"path":73,"stem":74,"navTitle":75},"Link a driver and a protocol","\u002Fen\u002Fconnecting-a-device\u002Flink-driver-and-protocol","en\u002F03.connecting-a-device\u002F3.link-driver-and-protocol","Linking",{"title":77,"navTitle":15,"path":78,"stem":79,"children":80,"page":40},"Variables","\u002Fen\u002Fvariables","en\u002F04.variables",[81,85,90,94,99],{"title":82,"path":83,"stem":84,"navTitle":82},"What is a variable","\u002Fen\u002Fvariables\u002Fwhat-is-a-variable","en\u002F04.variables\u002F1.what-is-a-variable",{"title":86,"path":87,"stem":88,"navTitle":89},"Conversion and presentation","\u002Fen\u002Fvariables\u002Fconversion-and-presentation","en\u002F04.variables\u002F2.conversion-and-presentation","Conversion & presentation",{"title":91,"path":92,"stem":93,"navTitle":91},"Add a variable","\u002Fen\u002Fvariables\u002Fadd-a-variable","en\u002F04.variables\u002F3.add-a-variable",{"title":95,"path":96,"stem":97,"navTitle":98},"Matrix variable (array, curve, map)","\u002Fen\u002Fvariables\u002Fmatrix-variable","en\u002F04.variables\u002F4.matrix-variable","Matrix variable",{"title":100,"path":101,"stem":102,"navTitle":100},"Events","\u002Fen\u002Fvariables\u002Fevents","en\u002F04.variables\u002F5.events",{"title":104,"navTitle":15,"path":105,"stem":106,"children":107,"page":40},"Visualization","\u002Fen\u002Fvisualization","en\u002F05.visualization",[108,113,118,122,127,132,137,142,147,152],{"title":109,"path":110,"stem":111,"navTitle":112},"Create a workspace","\u002Fen\u002Fvisualization\u002Fcreate-a-workspace","en\u002F05.visualization\u002F1.create-a-workspace","Workspace",{"title":114,"path":115,"stem":116,"navTitle":117},"Writing values to the device","\u002Fen\u002Fvisualization\u002Fwrite-to-device","en\u002F05.visualization\u002F10.write-to-device","Writing to the device",{"title":119,"path":120,"stem":121,"navTitle":119},"Add a control","\u002Fen\u002Fvisualization\u002Fadd-a-control","en\u002F05.visualization\u002F2.add-a-control",{"title":123,"path":124,"stem":125,"navTitle":126},"Bind a control to a variable","\u002Fen\u002Fvisualization\u002Fbind-a-control","en\u002F05.visualization\u002F3.bind-a-control","Bind a control",{"title":128,"path":129,"stem":130,"navTitle":131},"Graph — signal time course","\u002Fen\u002Fvisualization\u002Fgraph-control","en\u002F05.visualization\u002F4.graph-control","Graph",{"title":133,"path":134,"stem":135,"navTitle":136},"XY Graph — signal versus signal","\u002Fen\u002Fvisualization\u002Fxy-graph-control","en\u002F05.visualization\u002F5.xy-graph-control","XY Graph",{"title":138,"path":139,"stem":140,"navTitle":141},"Gauge — instantaneous value indicator","\u002Fen\u002Fvisualization\u002Fgauge-control","en\u002F05.visualization\u002F6.gauge-control","Gauge",{"title":143,"path":144,"stem":145,"navTitle":146},"Single-Signal — a value with a caption","\u002Fen\u002Fvisualization\u002Fsignal-control","en\u002F05.visualization\u002F7.signal-control","Single-Signal",{"title":148,"path":149,"stem":150,"navTitle":151},"Watch Table — a table of variables","\u002Fen\u002Fvisualization\u002Fwatch-table-control","en\u002F05.visualization\u002F8.watch-table-control","Watch Table",{"title":153,"path":154,"stem":155,"navTitle":156},"Matrix control — maps and calibration","\u002Fen\u002Fvisualization\u002Fmatrix-control","en\u002F05.visualization\u002F9.matrix-control","Matrix control",{"title":158,"navTitle":15,"path":159,"stem":160,"children":161,"page":40},"Running and Monitoring","\u002Fen\u002Frunning","en\u002F06.running",[162,166],{"title":163,"path":164,"stem":165,"navTitle":163},"Start and stop","\u002Fen\u002Frunning\u002Fstart-and-stop","en\u002F06.running\u002F1.start-and-stop",{"title":167,"path":168,"stem":169,"navTitle":170},"Watching live data","\u002Fen\u002Frunning\u002Fwatching-live-data","en\u002F06.running\u002F2.watching-live-data","Live data",{"title":172,"navTitle":15,"path":173,"stem":174,"children":175,"page":40},"Logging and Replay","\u002Fen\u002Flogging-and-replay","en\u002F07.logging-and-replay",[176,180,185],{"title":177,"path":178,"stem":179,"navTitle":177},"Logging data","\u002Fen\u002Flogging-and-replay\u002Flogging-data","en\u002F07.logging-and-replay\u002F1.logging-data",{"title":181,"path":182,"stem":183,"navTitle":184},"Replaying a log","\u002Fen\u002Flogging-and-replay\u002Freplaying-a-log","en\u002F07.logging-and-replay\u002F2.replaying-a-log","Replay",{"title":186,"path":187,"stem":188,"navTitle":189},"Exporting data","\u002Fen\u002Flogging-and-replay\u002Fexporting-data","en\u002F07.logging-and-replay\u002F3.exporting-data","Export",{"title":191,"navTitle":15,"path":192,"stem":193,"children":194,"page":40},"Python Scripts","\u002Fen\u002Fpython-scripts","en\u002F08.python-scripts",[195,199,203,207],{"title":196,"path":197,"stem":198,"navTitle":12},"Scripts overview","\u002Fen\u002Fpython-scripts\u002Fscripts-overview","en\u002F08.python-scripts\u002F1.scripts-overview",{"title":200,"path":201,"stem":202,"navTitle":200},"Accessing variables","\u002Fen\u002Fpython-scripts\u002Faccessing-variables","en\u002F08.python-scripts\u002F2.accessing-variables",{"title":204,"path":205,"stem":206,"navTitle":204},"Example script","\u002Fen\u002Fpython-scripts\u002Fexample-script","en\u002F08.python-scripts\u002F3.example-script",{"title":208,"path":209,"stem":210,"navTitle":208},"CSV post-processing","\u002Fen\u002Fpython-scripts\u002Fcsv-post-processing","en\u002F08.python-scripts\u002F4.csv-post-processing",{"title":212,"navTitle":15,"path":213,"stem":214,"children":215,"page":40},"Custom extensions","\u002Fen\u002Fcustom-extensions","en\u002F09.custom-extensions",[216,220,224,228,233],{"title":217,"path":218,"stem":219,"navTitle":217},"Custom driver","\u002Fen\u002Fcustom-extensions\u002Fcustom-driver","en\u002F09.custom-extensions\u002F1.custom-driver",{"title":221,"path":222,"stem":223,"navTitle":221},"Custom protocol","\u002Fen\u002Fcustom-extensions\u002Fcustom-protocol","en\u002F09.custom-extensions\u002F2.custom-protocol",{"title":225,"path":226,"stem":227,"navTitle":225},"Custom Control","\u002Fen\u002Fcustom-extensions\u002Fcustom-control","en\u002F09.custom-extensions\u002F3.custom-control",{"title":229,"path":230,"stem":231,"navTitle":232},"Complete example — ISS position","\u002Fen\u002Fcustom-extensions\u002Fiss-example","en\u002F09.custom-extensions\u002F4.iss-example","Example ISS",{"title":234,"path":235,"stem":236,"navTitle":237},"Complete example — temperature sensor","\u002Fen\u002Fcustom-extensions\u002Ftemp-sensor-example","en\u002F09.custom-extensions\u002F5.temp-sensor-example","Example temp sensor",{"title":239,"navTitle":15,"path":240,"stem":241,"children":242,"page":40},"QFW SDK","\u002Fen\u002Fdevice-sdk","en\u002F10.device-sdk",[243,248,253,258,263,268,273,278],{"title":244,"path":245,"stem":246,"navTitle":247},"QFW SDK — introduction","\u002Fen\u002Fdevice-sdk\u002Fintroduction","en\u002F10.device-sdk\u002F1.introduction","Introduction",{"title":249,"path":250,"stem":251,"navTitle":252},"XCP in the QFW SDK","\u002Fen\u002Fdevice-sdk\u002Fxcp","en\u002F10.device-sdk\u002F2.xcp","XCP",{"title":254,"path":255,"stem":256,"navTitle":257},"Integration step by step: XCP on TCP with FreeRTOS + lwIP","\u002Fen\u002Fdevice-sdk\u002Fintegration-tcp","en\u002F10.device-sdk\u002F3.integration-tcp","Integration: XCP on TCP",{"title":259,"path":260,"stem":261,"navTitle":262},"XCP on classic CAN — what changes","\u002Fen\u002Fdevice-sdk\u002Fcan","en\u002F10.device-sdk\u002F4.can","XCP on classic CAN",{"title":264,"path":265,"stem":266,"navTitle":267},"Integration without an RTOS: XCP on TCP from the main loop","\u002Fen\u002Fdevice-sdk\u002Fbaremetal","en\u002F10.device-sdk\u002F5.baremetal","Integration without an RTOS",{"title":269,"path":270,"stem":271,"navTitle":272},"The engine contract","\u002Fen\u002Fdevice-sdk\u002Fengine-contract","en\u002F10.device-sdk\u002F6.engine-contract","Engine contract",{"title":274,"path":275,"stem":276,"navTitle":277},"Variable addresses for QInsight","\u002Fen\u002Fdevice-sdk\u002Fvariable-addresses","en\u002F10.device-sdk\u002F7.variable-addresses","Variable addresses",{"title":279,"path":280,"stem":281,"navTitle":282},"Troubleshooting the SDK integration","\u002Fen\u002Fdevice-sdk\u002Ftroubleshooting","en\u002F10.device-sdk\u002F8.troubleshooting","Troubleshooting",{"title":284,"navTitle":15,"path":285,"stem":286,"children":287,"page":40},"Reference","\u002Fen\u002Freference","en\u002F11.reference",[288,292,296,300],{"title":289,"path":290,"stem":291,"navTitle":289},"Drivers","\u002Fen\u002Freference\u002Fdrivers","en\u002F11.reference\u002F1.drivers",{"title":293,"path":294,"stem":295,"navTitle":293},"Protocols","\u002Fen\u002Freference\u002Fprotocols","en\u002F11.reference\u002F2.protocols",{"title":297,"path":298,"stem":299,"navTitle":297},"Controls","\u002Fen\u002Freference\u002Fcontrols","en\u002F11.reference\u002F3.controls",{"title":282,"path":301,"stem":302,"navTitle":282},"\u002Fen\u002Freference\u002Ftroubleshooting","en\u002F11.reference\u002F4.troubleshooting",{"title":304,"navTitle":15,"path":305,"stem":306,"children":307,"page":40},"Examples","\u002Fen\u002Fexamples","en\u002F12.examples",[308,312,317,322,327,331,335,339,343,347,352,357,362],{"title":309,"path":310,"stem":311,"navTitle":309},"Simulation: all signals","\u002Fen\u002Fexamples\u002Fsimulation-all-signals","en\u002F12.examples\u002F01.simulation-all-signals",{"title":313,"path":314,"stem":315,"navTitle":316},"Modbus RTU master over a serial line","\u002Fen\u002Fexamples\u002Fserial-modbus-master","en\u002F12.examples\u002F02.serial-modbus-master","Modbus RTU master",{"title":318,"path":319,"stem":320,"navTitle":321},"Modbus RTU slave with simulated sensors","\u002Fen\u002Fexamples\u002Fserial-modbus-slave","en\u002F12.examples\u002F03.serial-modbus-slave","Modbus RTU slave",{"title":323,"path":324,"stem":325,"navTitle":326},"Modbus TCP master over a TCP client","\u002Fen\u002Fexamples\u002Ftcp-client-modbus-master","en\u002F12.examples\u002F04.tcp-client-modbus-master","Modbus TCP master",{"title":328,"path":329,"stem":330,"navTitle":328},"Modbus TCP slave on the TCP Server","\u002Fen\u002Fexamples\u002Ftcp-server-modbus-slave","en\u002F12.examples\u002F05.tcp-server-modbus-slave",{"title":332,"path":333,"stem":334,"navTitle":332},"Bit field and a script","\u002Fen\u002Fexamples\u002Fbit-field-script","en\u002F12.examples\u002F08.bit-field-script",{"title":336,"path":337,"stem":338,"navTitle":336},"Two ECUs at once","\u002Fen\u002Fexamples\u002Ftwo-ecus","en\u002F12.examples\u002F09.two-ecus",{"title":340,"path":341,"stem":342,"navTitle":340},"ISS position live","\u002Fen\u002Fexamples\u002Fiss-live-tracking","en\u002F12.examples\u002F10.iss-live-tracking",{"title":344,"path":345,"stem":346,"navTitle":344},"Simulated thermometer","\u002Fen\u002Fexamples\u002Fsimul-temp-measure","en\u002F12.examples\u002F11.simul-temp-measure",{"title":348,"path":349,"stem":350,"navTitle":351},"JSON signals from a Python generator","\u002Fen\u002Fexamples\u002Fjson-signal-python","en\u002F12.examples\u002F12.json-signal-python","JSON signals from Python",{"title":353,"path":354,"stem":355,"navTitle":356},"Raw CAN frames from a Raspberry Pi","\u002Fen\u002Fexamples\u002Fraw-can-python","en\u002F12.examples\u002F13.raw-can-python","Raw CAN from a Raspberry Pi",{"title":358,"path":359,"stem":360,"navTitle":361},"XCP on TCP on a NUCLEO-H723ZG: measurement, stimulation and calibration maps","\u002Fen\u002Fexamples\u002Ftcp-client-xcp-nucleo-maps","en\u002F12.examples\u002F14.tcp-client-xcp-nucleo-maps","XCP on TCP on NUCLEO-H723ZG",{"title":363,"path":364,"stem":365,"navTitle":366},"XCP on CAN on a NUCLEO-H723ZG: measurement, stimulation and calibration maps","\u002Fen\u002Fexamples\u002Fcan-xcp-nucleo-maps","en\u002F12.examples\u002F15.can-xcp-nucleo-maps","XCP on CAN on NUCLEO-H723ZG",{"id":368,"title":153,"body":369,"description":1112,"extension":1113,"meta":1114,"navTitle":156,"navigation":1115,"path":154,"seo":1116,"stem":155,"__hash__":1117},"docs_en\u002Fen\u002F05.visualization\u002F9.matrix-control.md",{"type":370,"value":371,"toc":1096},"minimark",[372,376,399,421,440,454,478,508,511,522,527,588,592,599,610,643,650,654,660,671,777,785,791,802,822,826,837,848,852,884,895,899,908,938,949,954,1002,1011,1015,1034,1038,1086,1090],[373,374,153],"h1",{"id":375},"matrix-control-maps-and-calibration",[377,378,379,380,384,385,390,391,394,395,398],"p",{},"The ",[381,382,383],"strong",{},"Matrix"," control displays\n",[386,387,389],"a",{"href":388},"\u002Fvariables\u002Fmatrix-variable","Matrix variables"," as tables — ",[381,392,393],{},"each\nvariable gets its own tab",". Depending on which axes the variable defines\nin its Layout, the tab automatically picks one of ",[381,396,397],{},"three display\nshapes",":",[400,401,402,409,415],"ul",{},[403,404,405,408],"li",{},[381,406,407],{},"Array"," (no axes) — a single row of data values,",[403,410,411,414],{},[381,412,413],{},"Curve"," (X axis + data) — a row of X-axis breakpoints with a row of\ndata values below it,",[403,416,417,420],{},[381,418,419],{},"Map \u002F matrix"," (X + Y axes + data) — the X-axis breakpoints as the\ncolumn header, the Y-axis breakpoints as the row header, and the data\ncells between them.",[377,422,423,424,427,428,432,433,436,437,439],{},"So the shape is not set on the control — it is determined by the\n",[381,425,426],{},"Layout of the bound variable"," (the presence of ",[429,430,431],"code",{},"xCount","\u002F",[429,434,435],{},"yCount",", see\n",[386,438,98],{"href":388},").",[377,441,442,449],{},[443,444],"img",{"alt":445,"className":446,"src":448},"Matrix control with the tabs Ignition map, Torque curve and Injection map 64x64 — the 16×16 ignition map of the Nucleo H723",[447],"img-light","\u002Fimg\u002FQInsight_tut_5_8_matrix_map_light.png",[443,450],{"alt":445,"className":451,"src":453},[452],"img-dark","\u002Fimg\u002FQInsight_tut_5_8_matrix_map_dark.png",[377,455,456,457,460,461,464,465,468,469,472,473,477],{},"The screenshot shows the ",[381,458,459],{},"Ignition map"," (16 × 16 ",[429,462,463],{},"float"," values, X axis\nengine speed ",[429,466,467],{},"rpm",", Y axis ",[429,470,471],{},"load",") from the\n",[386,474,476],{"href":475},"\u002Fexamples\u002Ftcp-client-xcp-nucleo-maps","XCP on TCP — Nucleo H723 calibration maps","\nexample.",[400,479,480,490,501],{},[403,481,482,483,486,487,439],{},"The tab header shows the ",[381,484,485],{},"variable Label"," and the unit of the data\npresentation (",[429,488,489],{},"Ignition map [deg]",[403,491,492,493,496,497,500],{},"The axis captions from the Layout (",[429,494,495],{},"xLabel",", ",[429,498,499],{},"yLabel",") are drawn in\nitalics above the table (X) and vertically on the left (Y). A 2 px line\nin the theme text colour separates the axes from the data — the same\nlook as the plot frame of the Graph control.",[403,502,503,504,507],{},"Each cell is formatted by the ",[381,505,506],{},"presentation of its section","\n(conversion, Print Format) — axes and data can use different units and\nformats.",[377,509,510],{},"A curve has just the X-axis row with the data below it:",[377,512,513,518],{},[443,514],{"alt":515,"className":516,"src":517},"The Torque curve tab — an 8-point curve (speed → torque)",[447],"\u002Fimg\u002FQInsight_tut_5_8_matrix_curve_v2_light.png",[443,519],{"alt":515,"className":520,"src":521},[452],"\u002Fimg\u002FQInsight_tut_5_8_matrix_curve_v2_dark.png",[523,524,526],"h2",{"id":525},"tabs-several-variables-in-one-control","Tabs — several variables in one control",[400,528,529,535,541,549,566,578,581],{},[403,530,531,532,534],{},"Only a ",[381,533,98],{}," can be bound to the control (drag & drop\nfrom the Solution Explorer) — scalar variables are refused, and a\nmatrix cannot be dropped on the other controls.",[403,536,537,540],{},[381,538,539],{},"Every further matrix you drop adds a new tab"," at the end; it does\nnot replace the existing one. Dropping a variable that is already in\nthe control does nothing.",[403,542,543,544,548],{},"An empty control shows the text ",[545,546,547],"em",{},"Drop a matrix variable (map, curve,\nvalue block) here",".",[403,550,379,551,554,555,496,558,561,562,565],{},[381,552,553],{},"tab header"," context menu: ",[381,556,557],{},"Move left",[381,559,560],{},"Move right"," (tab\norder) and ",[381,563,564],{},"Remove"," (removes the tab and unbinds the variable).",[403,567,568,569,574,575,439],{},"A tab with edited cells not yet written shows a bold ",[381,570,571],{},[429,572,573],{},"*"," after its\nname (tooltip ",[545,576,577],{},"Edited cells not written to the device yet",[403,579,580],{},"The empty part of the tab strip belongs to the control — use it to\ndrag the control (in edit mode) and to open the control's context\nmenu.",[403,582,583,584,587],{},"Each tab has ",[381,585,586],{},"its own settings and its own write mode","; the selected\ntab and the settings are saved with the project.",[523,589,591],{"id":590},"reading","Reading",[377,593,594,595,598],{},"The cells stay ",[381,596,597],{},"empty until data arrives from the device"," — after\nbinding the variable, after opening the project, after a change of the\nvariable configuration and after every Edit → Run switch. The table\nshape and the axis captions remain.",[377,600,601,602,605,606,609],{},"How the table is filled depends on the ",[381,603,604],{},"event","\n(",[386,607,100],{"href":608},"\u002Fvariables\u002Fevents",") assigned to the variable:",[400,611,612,625],{},[403,613,614,617,618,548],{},[381,615,616],{},"Periodic event"," — the table follows the device; every poll updates\nit, with redrawing throttled by ",[381,619,620,621],{},"Refresh ",[622,623,624],"span",{},"ms",[403,626,627,630,631,634,635,638,639,642],{},[381,628,629],{},"On Request event"," — the variable is not polled. The tab header has a\n",[381,632,633],{},"Read"," button that ",[381,636,637],{},"reads the matrix from the device once","\n(tooltip ",[545,640,641],{},"Read the matrix from the device once (On Request event;\ndiscards pending edits)","). The button is disabled while a read is in\nprogress; a failed read turns the button and the cells red. Reading\nworks only while the communication runs — in edit mode the read fails.",[377,644,645,646,649],{},"Periodic variables have no Read button. The former ",[381,647,648],{},"Auto Read"," option\nno longer exists — the table always shows what came from the device.",[523,651,653],{"id":652},"settings-and-colour-scale-heat-map","Settings and colour scale (heat map)",[377,655,656,657,398],{},"The arrow on the left of the header expands the settings of the\n",[381,658,659],{},"current tab",[377,661,662,667],{},[443,663],{"alt":664,"className":665,"src":666},"The expanded settings of the Ignition map tab — Rainbow colour scale 10–32.5",[447],"\u002Fimg\u002FQInsight_tut_5_8_matrix_settings_light.png",[443,668],{"alt":664,"className":669,"src":670},[452],"\u002Fimg\u002FQInsight_tut_5_8_matrix_settings_dark.png",[672,673,674,690],"table",{},[675,676,677],"thead",{},[678,679,680,684,687],"tr",{},[681,682,683],"th",{},"Setting",[681,685,686],{},"Default",[681,688,689],{},"Meaning",[691,692,693,708,724,737,750],"tbody",{},[678,694,695,702,705],{},[696,697,698],"td",{},[381,699,620,700],{},[622,701,624],{},[696,703,704],{},"250",[696,706,707],{},"shortest interval between table redraws",[678,709,710,718,721],{},[696,711,712],{},[381,713,714,715],{},"Cell width ",[622,716,717],{},"px",[696,719,720],{},"60",[696,722,723],{},"width of all columns (min. 20)",[678,725,726,731,734],{},[696,727,728],{},[381,729,730],{},"Color scale",[696,732,733],{},"off",[696,735,736],{},"tints the data cells by value",[678,738,739,744,747],{},[696,740,741],{},[381,742,743],{},"Min \u002F Max",[696,745,746],{},"0 \u002F 100",[696,748,749],{},"range of the colour scale (engineering values)",[678,751,752,757,760],{},[696,753,754],{},[381,755,756],{},"Spectrum",[696,758,759],{},"Rainbow",[696,761,762,763,496,765,496,768,496,771,496,774],{},"palette: ",[429,764,759],{},[429,766,767],{},"BlueRed",[429,769,770],{},"GreenYellowRed",[429,772,773],{},"Viridis",[429,775,776],{},"Grayscale",[377,778,779,781,782,784],{},[381,780,743],{}," and ",[381,783,756],{}," are enabled only while the scale is on.\nThe row height is fixed (20 px).",[377,786,787,788,790],{},"With ",[381,789,730],{}," on, the table becomes a heat map:",[377,792,793,798],{},[443,794],{"alt":795,"className":796,"src":797},"The ignition map as a heat map (Rainbow, 10–32.5 deg)",[447],"\u002Fimg\u002FQInsight_tut_5_8_matrix_heatmap_light.png",[443,799],{"alt":795,"className":800,"src":801},[452],"\u002Fimg\u002FQInsight_tut_5_8_matrix_heatmap_dark.png",[400,803,804,810,813,816],{},[403,805,806,809],{},[381,807,808],{},"Only the data cells"," are tinted — the axes and the corner stay\nplain.",[403,811,812],{},"Values outside Min\u002FMax are clamped to the end colour; with Max ≤ Min\nthe middle colour is used. A cell without data is not tinted.",[403,814,815],{},"The colours are semi-transparent and quantised to 64 steps.",[403,817,818,821],{},[381,819,820],{},"In write mode the scale is hidden"," — the editing colours take\nprecedence (see below).",[523,823,825],{"id":824},"large-maps","Large maps",[377,827,828,829,832,833,836],{},"The table is virtualised (only the visible cells are rendered), so it\nhandles even a ",[381,830,831],{},"64 × 64"," map (4,224 cells) smoothly. When the table is\nlarger than the control, scroll bars appear: the ",[381,834,835],{},"Y-axis column stays\nfrozen"," while scrolling horizontally, the X-axis row scrolls away with\nthe data when scrolling vertically.",[377,838,839,844],{},[443,840],{"alt":841,"className":842,"src":843},"The Injection map 64x64 scrolled to the middle, GreenYellowRed scale 0–1100 mg",[447],"\u002Fimg\u002FQInsight_tut_5_8_matrix_bigmap_light.png",[443,845],{"alt":841,"className":846,"src":847},[452],"\u002Fimg\u002FQInsight_tut_5_8_matrix_bigmap_dark.png",[523,849,851],{"id":850},"control-context-menu","Control context menu",[400,853,854,860,878],{},[403,855,856,859],{},[381,857,858],{},"Lock"," — locks the position and size of the control,",[403,861,862,865,866,869,870,873,874,877],{},[381,863,864],{},"Write Mode"," — write mode of the ",[381,867,868],{},"selected tab","; enabled only when\nthe protocol can write the variable (Comm params with\n",[429,871,872],{},"direction=\"write\""," or ",[429,875,876],{},"\"readWrite\"","),",[403,879,880,883],{},[381,881,882],{},"Write on Enter"," — applies to the whole control (off by default);\nenabled only in write mode.",[377,885,886,891],{},[443,887],{"alt":888,"className":889,"src":890},"The Matrix control context menu with Write Mode on",[447],"\u002Fimg\u002FQInsight_tut_5_8_matrix_menu_light.png",[443,892],{"alt":888,"className":893,"src":894},[452],"\u002Fimg\u002FQInsight_tut_5_8_matrix_menu_dark.png",[523,896,898],{"id":897},"write-mode-calibrating-cells","Write mode — calibrating cells",[377,900,787,901,903,904,907],{},[381,902,864],{}," on, the cells get an ",[381,905,906],{},"orange"," tint and become\neditable:",[400,909,910,921,931],{},[403,911,912,913,916,917,920],{},"Both ",[381,914,915],{},"data cells and the breakpoints of both axes"," are editable; the\ntable corner is not. You always enter the ",[381,918,919],{},"engineering"," value — the\nraw value sent to the device is obtained by the inverse conversion.",[403,922,923,924,927,928,548],{},"An edited cell turns yellow, the tab gets the asterisk and the\n",[381,925,926],{},"Write"," button becomes enabled. A cell whose write failed is ",[381,929,930],{},"red",[403,932,933,934,937],{},"The display is ",[381,935,936],{},"frozen"," in write mode — polls do not overwrite the\ntable while the communication keeps running in the background.",[377,939,940,945],{},[443,941],{"alt":942,"className":943,"src":944},"Write mode — three edited (yellow) cells, the tab \"Ignition map *\" and the enabled Write button",[447],"\u002Fimg\u002FQInsight_tut_5_8_matrix_write_light.png",[443,946],{"alt":942,"className":947,"src":948},[452],"\u002Fimg\u002FQInsight_tut_5_8_matrix_write_dark.png",[950,951,953],"h3",{"id":952},"sending-to-the-device","Sending to the device",[400,955,956,962,993,996,999],{},[403,957,958,961],{},[381,959,960],{},"Write on Enter on"," — Enter writes the edited cell immediately; the\nWrite button is not shown.",[403,963,964,967,968,970,971,974,975,978,979],{},[381,965,966],{},"Write on Enter off"," (default) — Enter only commits the cell and the\nedits accumulate. The ",[381,969,926],{}," button (tooltip ",[545,972,973],{},"Write all edited\n(highlighted) cells to the device",") sends ",[381,976,977],{},"all edited cells in one\nbatch",":\n",[400,980,981,987],{},[403,982,983,984,986],{},"with ",[381,985,252],{},", neighbouring cells are merged into contiguous windows\nand each window is written in one transfer (a pasted row of 64 cells\n= one transfer),",[403,988,983,989,992],{},[381,990,991],{},"Modbus",", only the registers touched by the cells are written.",[403,994,995],{},"A cell whose text is not a number turns red and is left out of the\nbatch.",[403,997,998],{},"If the batch fails, all its cells stay edited and turn red, and the\nWrite button turns red too — the write can be repeated. On success the\nbutton greys out again.",[403,1000,1001],{},"Writing works only while the communication runs.",[377,1003,1004,1007,1008,1010],{},[381,1005,1006],{},"The written value is not shown immediately"," — the control shows only\nvalues read from the device. The new value appears after the next poll\n(periodic event) or after pressing ",[381,1009,633],{}," (On Request).",[950,1012,1014],{"id":1013},"leaving-write-mode","Leaving write mode",[400,1016,1017,1022,1028],{},[403,1018,1019,1021],{},[381,1020,633],{}," in write mode discards the pending edits, reads the current\nstate from the device and keeps write mode on.",[403,1023,1024,1027],{},[381,1025,1026],{},"Turning Write Mode off"," discards unsent edits and error states; the\ntable keeps the last values read until the next poll. A write still in\nprogress is cancelled silently.",[403,1029,1030,1033],{},[381,1031,1032],{},"Switching Edit → Run"," turns write mode off and empties the table.",[523,1035,1037],{"id":1036},"clipboard-and-keyboard","Clipboard and keyboard",[400,1039,1040,1046,1074,1080],{},[403,1041,1042,1045],{},[381,1043,1044],{},"Ctrl+C"," (in both modes) — copies the selected cells in Excel format\n(tab between cells, new line between rows); in write mode it copies\nthe edit text. The selection may contain multiple cells.",[403,1047,1048,1051,1052,1055,1056,1059,1060],{},[381,1049,1050],{},"Ctrl+V \u002F Shift+Insert"," (write mode only) — pastes a block starting\nat the top-left selected cell. The block must ",[381,1053,1054],{},"fit entirely"," into the\ntable; otherwise nothing is pasted and the header shows, on a red\nbackground, a message of the form ",[545,1057,1058],{},"Paste refused: R x C cells do not\nfit at row r, column c (table N x M)."," The message is also written to\nthe log (Warn level).\n",[400,1061,1062,1065,1068],{},[403,1063,1064],{},"A single copied value pasted over a multi-cell selection fills the\nwhole selection.",[403,1066,1067],{},"Empty clipboard cells and the table corner are skipped.",[403,1069,1070,1073],{},[381,1071,1072],{},"Every pasted cell is marked as edited"," (yellow), even if its value\ndid not change — send them with the Write button.",[403,1075,1076,1079],{},[381,1077,1078],{},"Tab \u002F Shift+Tab"," while editing commits the cell, moves to the next \u002F\nprevious one and opens it for editing.",[403,1081,1082,1085],{},[381,1083,1084],{},"Enter"," commits the cell (and writes it with Write on Enter on).\nArrow keys and F2 work as in an ordinary grid.",[523,1087,1089],{"id":1088},"next","Next",[377,1091,1092,1093,548],{},"Writing values also works for scalar variables —\n",[386,1094,114],{"href":1095},"\u002Fvisualization\u002Fwrite-to-device",{"title":1097,"searchDepth":1098,"depth":1098,"links":1099},"",3,[1100,1102,1103,1104,1105,1106,1110,1111],{"id":525,"depth":1101,"text":526},2,{"id":590,"depth":1101,"text":591},{"id":652,"depth":1101,"text":653},{"id":824,"depth":1101,"text":825},{"id":850,"depth":1101,"text":851},{"id":897,"depth":1101,"text":898,"children":1107},[1108,1109],{"id":952,"depth":1098,"text":953},{"id":1013,"depth":1098,"text":1014},{"id":1036,"depth":1101,"text":1037},{"id":1088,"depth":1101,"text":1089},"Tabs of Matrix variables shown as an array, curve, or map — reading, colour scale, write mode, batch cell writes, clipboard, and large maps.","md",{},true,{"title":153,"description":1112},"qFHwCrFDNZ5dGh91gKEqDzcbOyYz4DFAr3_LY8ZcmaM",[1119,1120],{"title":148,"path":149,"stem":150,"navTitle":151,"children":-1},{"title":163,"path":164,"stem":165,"navTitle":163,"children":-1},1791554568268]