[{"data":1,"prerenderedAt":1971},["ShallowReactive",2],{"docs-nav-docs_en":3,"docs-page-\u002Fen\u002Fexamples\u002Fcan-xcp-nucleo-maps":367,"docs-surround-\u002Fen\u002Fexamples\u002Fcan-xcp-nucleo-maps":1969},[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":363,"body":369,"description":1963,"extension":1964,"meta":1965,"navTitle":366,"navigation":1966,"path":364,"seo":1967,"stem":365,"__hash__":1968},"docs_en\u002Fen\u002F12.examples\u002F15.can-xcp-nucleo-maps.md",{"type":370,"value":371,"toc":1948},"minimark",[372,376,401,430,433,447,452,523,527,607,611,618,623,635,726,734,836,852,858,861,878,973,977,991,1309,1322,1351,1355,1361,1500,1507,1511,1522,1557,1567,1582,1629,1632,1635,1700,1703,1707,1741,1745,1879,1883,1944],[373,374,363],"h1",{"id":375},"xcp-on-can-on-a-nucleo-h723zg-measurement-stimulation-and-calibration-maps",[377,378,379,380,384,385,387,388,392,393,396,397,400],"p",{},"The project ",[381,382,383],"code",{},"Qenex_CAN_XCP_NucleoH723_Maps_FreeRTOS.qproj"," is in the\n",[381,386,304],{}," folder next to QInsight.exe. It belongs to the\n",[389,390,239],"a",{"href":391},"\u002Fdevice-sdk\u002Fxcp"," example firmware image ",[381,394,395],{},"examples\u002Fnucleo_h723zg","\nbuilt with the ",[381,398,399],{},"DebugCan"," preset (FreeRTOS, CAN transport); the\nbare-metal image has no CAN.",[377,402,403,404,408,409,413,414,417,418,421,422,425,426,429],{},"It is the CAN variant of\n",[389,405,407],{"href":406},"\u002Fexamples\u002Ftcp-client-xcp-nucleo-maps","XCP on TCP on a NUCLEO-H723ZG",":\nthe same variables, events, scripts and workspace, only the board talks\nover classic CAN through a PEAK PCAN-USB adapter. The eight-byte frames\nshow clearly how QInsight combines ",[410,411,412],"strong",{},"DAQ",", ",[410,415,416],{},"polling"," and ",[410,419,420],{},"STIM"," in\none XCP session, why large maps are read ",[410,423,424],{},"on request"," and why ",[410,427,428],{},"block\nmode"," helps — and because the driver deliberately has a limited number\nof reconnection attempts, the example also shows what happens when you\nunplug the adapter while running.",[377,431,432],{},"The workspace is the same as in the TCP variant:",[377,434,435,442],{},[436,437],"img",{"alt":438,"className":439,"src":441},"The \"Nucleo H723 live + maps\" workspace while running (screenshot of the TCP variant, the workspace is identical)",[440],"img-light","\u002Fimg\u002FQInsight_ex_nucleo_maps_light.png",[436,443],{"alt":438,"className":444,"src":446},[445],"img-dark","\u002Fimg\u002FQInsight_ex_nucleo_maps_dark.png",[448,449,451],"h2",{"id":450},"what-the-example-shows","What the example shows",[453,454,455,480,486,503,509],"ul",{},[456,457,458,461,462,413,465,468,469,417,472,475,476,479],"li",{},[410,459,460],{},"DAQ measurement"," — the board transmits ",[381,463,464],{},"sine1_value",[381,466,467],{},"sine1_raw",",\n",[381,470,471],{},"sine2_value",[381,473,474],{},"sine3_value"," by itself on its ",[381,477,478],{},"demo10ms"," event\n(every 10 ms).",[456,481,482,485],{},[410,483,484],{},"Calibration by polling"," — the amplitudes and periods of the three\nsines are read every 500 ms and can be written at any time.",[456,487,488,491,492,495,496,499,500,502],{},[410,489,490],{},"STIM bypass"," — a periodic script streams a slow sine into\n",[381,493,494],{},"sine1_stim","; the ",[381,497,498],{},"sine1_bypass"," switch decides whether ",[381,501,464],{},"\nis owned by the board's internal model or by the master via STIM.",[456,504,505,508],{},[410,506,507],{},"Maps and a curve"," — the 16 × 16 ignition map and the 64 × 64 map\nread on request with the Read button, the torque curve polled every\n500 ms, cell editing in Write Mode and writing only the changed cells.",[456,510,511,514,515,518,519,522],{},[410,512,513],{},"Reconnection with a limit"," — ",[381,516,517],{},"reconnectAttempts=2",": after the\nadapter is unplugged the driver reports the transport loss, tries to\nrecover twice and then stops trying; the ",[410,520,521],{},"Start"," button starts it\nagain.",[448,524,526],{"id":525},"what-you-need","What you need",[453,528,529,553,563,570,580],{},[456,530,531,532,535,536,538,539,541,542,544,545,548,549,552],{},"A ",[410,533,534],{},"NUCLEO-H723ZG"," board running the ",[389,537,239],{"href":391},"\nexample firmware (",[381,540,395],{},") built for the CAN\ntransport — preset ",[381,543,399],{}," (",[381,546,547],{},"QFW_XCP_TRANSPORT=can","), see\n",[389,550,262],{"href":551},"\u002Fdevice-sdk\u002Fcan",".",[456,554,531,555,558,559,562],{},[410,556,557],{},"PEAK PCAN-USB"," adapter wired to the board's CAN interface; the\nbus is ",[410,560,561],{},"classic CAN, 500 kbit\u002Fs",", DLC 8 frames.",[456,564,565,566,569],{},"XCP identifiers ",[410,567,568],{},"master 0x200 \u002F slave 0x201"," (11-bit) — that is how\nboth the firmware and the project have them.",[456,571,572,575,576,579],{},[410,573,574],{},"The adapter's device ID",": the project has ",[381,577,578],{},"deviceId=0xff",". Replace\nthe value with the ID set in your adapter (PEAK Settings), otherwise\nthe driver does not find the adapter and keeps retrying according to\nthe reconnection parameters.",[456,581,582,585,586,588,589,592,593,596,597,600,601,603,604,552],{},[410,583,584],{},"Variable addresses matching your firmware build."," The addresses\nare absolute and come from the ELF file of the specific build (the\n",[381,587,399],{}," preset has different matrix object addresses than ",[381,590,591],{},"Debug",").\nThe ",[381,594,595],{},"tools\u002Felf_vars_scan.py"," tool of the SDK package with the\nconfiguration ",[381,598,599],{},"examples\u002Fnucleo_h723zg\u002Fnucleo_h723zg.vars.json"," adapted\nto the ",[381,602,399],{}," ELF reads them and exports arrays as Matrix\nvariables. Refresh them in the project after every new firmware build,\nsee ",[389,605,274],{"href":606},"\u002Fdevice-sdk\u002Fvariable-addresses",[448,608,610],{"id":609},"the-project","The project",[377,612,613,614,617],{},"The project contains one PEAK CAN Adapter driver with the XCP on CAN\nprotocol, four events, seventeen variables, two scripts and the\nworkspace ",[410,615,616],{},"Nucleo H723 live + maps"," with four controls.",[619,620,622],"h3",{"id":621},"driver-and-protocol","Driver and protocol",[377,624,625,626,630,631,634],{},"The ",[389,627,629],{"href":628},"\u002Freference\u002Fdrivers#peak-can-adapter","PEAK CAN Adapter"," driver\n(label ",[381,632,633],{},"PCAN-USB","):",[636,637,638,654],"table",{},[639,640,641],"thead",{},[642,643,644,648,651],"tr",{},[645,646,647],"th",{},"Parameter",[645,649,650],{},"Value",[645,652,653],{},"Meaning",[655,656,657,677,692,707],"tbody",{},[642,658,659,665,670],{},[660,661,662],"td",{},[381,663,664],{},"deviceId",[660,666,667],{},[381,668,669],{},"0xff",[660,671,672,673,676],{},"adapter ID (hexadecimal) — ",[410,674,675],{},"adjust"," to your adapter",[642,678,679,684,689],{},[660,680,681],{},[381,682,683],{},"bitrate",[660,685,686],{},[381,687,688],{},"500000",[660,690,691],{},"500 kbit\u002Fs, classic CAN",[642,693,694,699,704],{},[660,695,696],{},[381,697,698],{},"reconnectDelayMs",[660,700,701],{},[381,702,703],{},"1000",[660,705,706],{},"delay between attempts to initialize the adapter",[642,708,709,714,719],{},[660,710,711],{},[381,712,713],{},"reconnectAttempts",[660,715,716],{},[381,717,718],{},"2",[660,720,721,722,725],{},"after two consecutive failed attempts the driver stops trying (default ",[381,723,724],{},"-1"," = unlimited)",[377,727,728,729,733],{},"Underneath it a single instance of the\n",[389,730,732],{"href":731},"\u002Freference\u002Fprotocols#xcp-on-can","XCP on CAN"," protocol:",[636,735,736,746],{},[639,737,738],{},[642,739,740,742,744],{},[645,741,647],{},[645,743,650],{},[645,745,653],{},[655,747,748,763,778,793,807,821],{},[642,749,750,755,760],{},[660,751,752],{},[381,753,754],{},"masterId",[660,756,757],{},[381,758,759],{},"0x200",[660,761,762],{},"CAN id of master → slave frames",[642,764,765,770,775],{},[660,766,767],{},[381,768,769],{},"slaveId",[660,771,772],{},[381,773,774],{},"0x201",[660,776,777],{},"CAN id of slave → master frames",[642,779,780,785,790],{},[660,781,782],{},[381,783,784],{},"extendedIds",[660,786,787],{},[381,788,789],{},"false",[660,791,792],{},"11-bit identifiers",[642,794,795,800,804],{},[660,796,797],{},[381,798,799],{},"requestTimeoutMs",[660,801,802],{},[381,803,703],{},[660,805,806],{},"response timeout of a command",[642,808,809,814,818],{},[660,810,811],{},[381,812,813],{},"requestRetries",[660,815,816],{},[381,817,718],{},[660,819,820],{},"repetitions of a command after a timeout (in addition to the first attempt)",[642,822,823,828,833],{},[660,824,825],{},[381,826,827],{},"daqTimestamps",[660,829,830],{},[381,831,832],{},"slave",[660,834,835],{},"time axis of DAQ samples from the board's timestamps",[377,837,625,838,840,841,843,844,847,848,552],{},[381,839,827],{}," setting has a visible effect on the DAQ packet layout\non CAN: with ",[381,842,832],{}," the first ODT of each cycle carries a four-byte\ntimestamp and has 2 data bytes left; without ECU timestamps (",[381,845,846],{},"master",")\nevery ODT has 6 data bytes. The four measured floats spread over several\npackets per cycle in both cases — the protocol does that by itself, see\n",[389,849,851],{"href":850},"\u002Freference\u002Fprotocols#daq-behaviour-and-diagnostics","DAQ behaviour and diagnostics",[377,853,854,855,552],{},"Block mode is not configured — the protocol detects it at connect and\nlogs it; on CAN the slave reports ",[381,856,857],{},"MAX_BS 16",[619,859,100],{"id":860},"events",[377,862,863,864,867,868,871,872,544,874,877],{},"Four ",[389,865,860],{"href":866},"\u002Fvariables\u002Fevents","; DAQ and STIM point to ",[410,869,870],{},"the same\nfirmware event channel"," ",[381,873,478],{},[381,875,876],{},"daqId=\"0\"","), only in opposite\ndirections:",[636,879,880,896],{},[639,881,882],{},[642,883,884,887,890,893],{},[645,885,886],{},"Event",[645,888,889],{},"Type",[645,891,892],{},"Extra Params",[645,894,895],{},"Used for",[655,897,898,916,936,959],{},[642,899,900,905,908,913],{},[660,901,902],{},[381,903,904],{},"Daq_demo10ms",[660,906,907],{},"Periodic 10 ms",[660,909,910],{},[381,911,912],{},"direction=\"DAQ\";daqId=\"0\"",[660,914,915],{},"the board transmits the measured signals (the period only documents the channel cycle)",[642,917,918,923,925,930],{},[660,919,920],{},[381,921,922],{},"Stim_demo10ms",[660,924,907],{},[660,926,927],{},[381,928,929],{},"direction=\"STIM\";daqId=\"0\"",[660,931,932,933,935],{},"the master sends the current value of ",[381,934,494],{}," every 10 ms",[642,937,938,943,946,949],{},[660,939,940],{},[381,941,942],{},"Poll500ms",[660,944,945],{},"Periodic 500 ms",[660,947,948],{},"—",[660,950,951,952,955,956],{},"polling of the calibration parameters, the bypass switch, the ",[381,953,954],{},"uwTick"," counter, the curve and ",[381,957,958],{},"qfwDemoMapOut",[642,960,961,966,968,970],{},[660,962,963],{},[381,964,965],{},"OnRequest",[660,967,965],{},[660,969,948],{},[660,971,972],{},"maps read by the Read button",[619,974,976],{"id":975},"scalar-variables","Scalar variables",[377,978,979,980,983,984,987,988,990],{},"All thirteen scalar variables have ",[381,981,982],{},"addressExtension=\"0\""," and\n",[381,985,986],{},"multiplier=\"1\""," in their Comm params; in the ",[381,989,399],{}," build the\naddresses are the same as in the FreeRTOS image for TCP:",[636,992,993,1013],{},[639,994,995],{},[642,996,997,1000,1002,1005,1008,1010],{},[645,998,999],{},"Variable",[645,1001,889],{},[645,1003,1004],{},"Address",[645,1006,1007],{},"Direction",[645,1009,886],{},[645,1011,1012],{},"Presentation",[655,1014,1015,1039,1061,1083,1104,1128,1151,1174,1197,1219,1241,1263,1286],{},[642,1016,1017,1021,1024,1029,1032,1036],{},[660,1018,1019],{},[381,1020,464],{},[660,1022,1023],{},"float",[660,1025,1026],{},[381,1027,1028],{},"0x2400005C",[660,1030,1031],{},"read",[660,1033,1034],{},[381,1035,904],{},[660,1037,1038],{},"Sine value (−10…10)",[642,1040,1041,1045,1047,1052,1054,1058],{},[660,1042,1043],{},[381,1044,467],{},[660,1046,1023],{},[660,1048,1049],{},[381,1050,1051],{},"0x24000058",[660,1053,1031],{},[660,1055,1056],{},[381,1057,904],{},[660,1059,1060],{},"Sine value — internal model of sine 1, keeps running during bypass",[642,1062,1063,1067,1069,1074,1076,1080],{},[660,1064,1065],{},[381,1066,471],{},[660,1068,1023],{},[660,1070,1071],{},[381,1072,1073],{},"0x24000074",[660,1075,1031],{},[660,1077,1078],{},[381,1079,904],{},[660,1081,1082],{},"Sine value",[642,1084,1085,1089,1091,1096,1098,1102],{},[660,1086,1087],{},[381,1088,474],{},[660,1090,1023],{},[660,1092,1093],{},[381,1094,1095],{},"0x2400008C",[660,1097,1031],{},[660,1099,1100],{},[381,1101,904],{},[660,1103,1082],{},[642,1105,1106,1111,1113,1118,1121,1125],{},[660,1107,1108],{},[381,1109,1110],{},"sine1_amplitude",[660,1112,1023],{},[660,1114,1115],{},[381,1116,1117],{},"0x24000050",[660,1119,1120],{},"readWrite",[660,1122,1123],{},[381,1124,942],{},[660,1126,1127],{},"Amplitude (0…10)",[642,1129,1130,1135,1137,1142,1144,1148],{},[660,1131,1132],{},[381,1133,1134],{},"sine1_period",[660,1136,1023],{},[660,1138,1139],{},[381,1140,1141],{},"0x24000054",[660,1143,1120],{},[660,1145,1146],{},[381,1147,942],{},[660,1149,1150],{},"Period (0.05…60 s; a shorter period is clamped by the firmware)",[642,1152,1153,1158,1160,1165,1167,1171],{},[660,1154,1155],{},[381,1156,1157],{},"sine2_amplitude",[660,1159,1023],{},[660,1161,1162],{},[381,1163,1164],{},"0x24000068",[660,1166,1120],{},[660,1168,1169],{},[381,1170,942],{},[660,1172,1173],{},"Amplitude",[642,1175,1176,1181,1183,1188,1190,1194],{},[660,1177,1178],{},[381,1179,1180],{},"sine2_period",[660,1182,1023],{},[660,1184,1185],{},[381,1186,1187],{},"0x2400006C",[660,1189,1120],{},[660,1191,1192],{},[381,1193,942],{},[660,1195,1196],{},"Period",[642,1198,1199,1204,1206,1211,1213,1217],{},[660,1200,1201],{},[381,1202,1203],{},"sine3_amplitude",[660,1205,1023],{},[660,1207,1208],{},[381,1209,1210],{},"0x24000080",[660,1212,1120],{},[660,1214,1215],{},[381,1216,942],{},[660,1218,1173],{},[642,1220,1221,1226,1228,1233,1235,1239],{},[660,1222,1223],{},[381,1224,1225],{},"sine3_period",[660,1227,1023],{},[660,1229,1230],{},[381,1231,1232],{},"0x24000084",[660,1234,1120],{},[660,1236,1237],{},[381,1238,942],{},[660,1240,1196],{},[642,1242,1243,1247,1249,1253,1256,1260],{},[660,1244,1245],{},[381,1246,494],{},[660,1248,1023],{},[660,1250,1251],{},[381,1252,1028],{},[660,1254,1255],{},"write",[660,1257,1258],{},[381,1259,922],{},[660,1261,1262],{},"Stim level (0…100 %)",[642,1264,1265,1269,1272,1277,1279,1283],{},[660,1266,1267],{},[381,1268,498],{},[660,1270,1271],{},"byte",[660,1273,1274],{},[381,1275,1276],{},"0x24000060",[660,1278,1120],{},[660,1280,1281],{},[381,1282,942],{},[660,1284,1285],{},"Bypass (0\u002F1)",[642,1287,1288,1292,1295,1300,1302,1306],{},[660,1289,1290],{},[381,1291,954],{},[660,1293,1294],{},"uint",[660,1296,1297],{},[381,1298,1299],{},"0x24000124",[660,1301,1031],{},[660,1303,1304],{},[381,1305,942],{},[660,1307,1308],{},"HAL tick (ms) — proof that any global variable from the ELF is reachable",[377,1310,1311,1312,1314,1315,1317,1318,1321],{},"Note the pair ",[381,1313,464],{}," \u002F ",[381,1316,494],{},": the ",[410,1319,1320],{},"same address",", once\nread via DAQ, once written by the STIM stream. Firmware defaults: sine 1\namplitude 1.0 \u002F period 1 s, sine 2 5.0 \u002F 3 s, sine 3 0.5 \u002F 10 s.",[377,1323,1324,1325,1328,1329,1332,1333,1335,1336,413,1339,1342,1343,1346,1347,1350],{},"There are three conversions: ",[381,1326,1327],{},"PassThrough"," (1:1) for everything except\nthe stimulation and the large map's axis, ",[381,1330,1331],{},"StimPercent"," for ",[381,1334,494],{},"\n— linear ",[381,1337,1338],{},"multiplier=5",[381,1340,1341],{},"offset=50",", i.e. ",[410,1344,1345],{},"eng = raw · 5 + 50"," (the\noperator and the script enter percent, QInsight inverts the value to\nraw: 75 % = raw 5.0; 50 % = raw 0) — and ",[381,1348,1349],{},"LoadTenth"," (×0.1) for the Y\naxis of the large map.",[619,1352,1354],{"id":1353},"matrix-variables","Matrix variables",[377,1356,1357,1358,1360],{},"In the ",[381,1359,399],{}," build the matrix variables have these addresses\n(address extension 0, little-endian):",[636,1362,1363,1382],{},[639,1364,1365],{},[642,1366,1367,1370,1373,1376,1378,1380],{},[645,1368,1369],{},"Variable (Label)",[645,1371,1372],{},"Shape",[645,1374,1375],{},"Size",[645,1377,1004],{},[645,1379,1007],{},[645,1381,886],{},[655,1383,1384,1417,1445,1474],{},[642,1385,1386,1392,1403,1406,1411,1413],{},[660,1387,1388,1391],{},[381,1389,1390],{},"qfwDemoMap"," (Ignition map)",[660,1393,1394,1395,1397,1398,1314,1401],{},"16 × 16 ",[381,1396,1023],{}," map, axes ",[381,1399,1400],{},"ushort",[381,1402,1271],{},[660,1404,1405],{},"1072 B",[660,1407,1408],{},[381,1409,1410],{},"0x2401421C",[660,1412,1120],{},[660,1414,1415],{},[381,1416,965],{},[642,1418,1419,1425,1431,1434,1439,1441],{},[660,1420,1421,1424],{},[381,1422,1423],{},"qfwDemoCurve"," (Torque curve)",[660,1426,1427,1428,1430],{},"8-point ",[381,1429,1400],{}," curve",[660,1432,1433],{},"32 B",[660,1435,1436],{},[381,1437,1438],{},"0x2401464C",[660,1440,1120],{},[660,1442,1443],{},[381,1444,942],{},[642,1446,1447,1453,1460,1463,1468,1470],{},[660,1448,1449,1452],{},[381,1450,1451],{},"qfwDemoBigMap"," (Injection map 64x64)",[660,1454,1455,1456,1397,1458],{},"64 × 64 ",[381,1457,1023],{},[381,1459,1400],{},[660,1461,1462],{},"16,640 B",[660,1464,1465],{},[381,1466,1467],{},"0x2401466C",[660,1469,1120],{},[660,1471,1472],{},[381,1473,965],{},[642,1475,1476,1481,1486,1489,1494,1496],{},[660,1477,1478,1480],{},[381,1479,958],{}," (Map lookup)",[660,1482,1483,1485],{},[381,1484,1023],{}," scalar",[660,1487,1488],{},"4 B",[660,1490,1491],{},[381,1492,1493],{},"0x2401876C",[660,1495,1031],{},[660,1497,1498],{},[381,1499,942],{},[377,1501,1502,1503,552],{},"The presentations of the axes and data and the firmware defaults are the\nsame as in the ",[389,1504,1506],{"href":1505},"\u002Fexamples\u002Ftcp-client-xcp-nucleo-maps#matrix-variables","TCP variant",[619,1508,1510],{"id":1509},"scripts","Scripts",[377,1512,1513,1514,1517,1518,1521],{},"Two scripts, both runtime-only (not for replay). ",[381,1515,1516],{},"init.py"," runs in\n",[410,1519,1520],{},"Startup"," mode and prepares the state:",[1523,1524,1529],"pre",{"className":1525,"code":1526,"language":1527,"meta":1528,"style":1528},"language-python shiki shiki-themes github-light github-dark-default","import math\nt = 0\na = 4\nf = 1\u002F5\n","python","",[381,1530,1531,1539,1545,1551],{"__ignoreMap":1528},[1532,1533,1536],"span",{"class":1534,"line":1535},"line",1,[1532,1537,1538],{},"import math\n",[1532,1540,1542],{"class":1534,"line":1541},2,[1532,1543,1544],{},"t = 0\n",[1532,1546,1548],{"class":1534,"line":1547},3,[1532,1549,1550],{},"a = 4\n",[1532,1552,1554],{"class":1534,"line":1553},4,[1532,1555,1556],{},"f = 1\u002F5\n",[377,1558,1559,1562,1563,1566],{},[381,1560,1561],{},"script.py"," runs ",[410,1564,1565],{},"periodically every 20 ms"," (blocking, no timeout):",[1523,1568,1570],{"className":1525,"code":1569,"language":1527,"meta":1528,"style":1528},"t += 0.02\nsine1_stim.EngValue = 50 + a * math.sin(2 * math.pi * f * t)\n",[381,1571,1572,1577],{"__ignoreMap":1528},[1532,1573,1574],{"class":1534,"line":1535},[1532,1575,1576],{},"t += 0.02\n",[1532,1578,1579],{"class":1534,"line":1541},[1532,1580,1581],{},"sine1_stim.EngValue = 50 + a * math.sin(2 * math.pi * f * t)\n",[377,1583,1584,1585,1588,1589,1591,1592,1595,1596,1598,1599,1602,1603,1607,1608,413,1611,1613,1614,1617,1618,1620,1621,1623,1624,417,1626,1628],{},"So the script writes a ",[410,1586,1587],{},"50 ± 4 %"," sine with a period of 5 s into\n",[381,1590,494],{},"; after the inverse conversion that is raw ±0.8. Writing\n",[381,1593,1594],{},"EngValue"," only stores the value — the STIM stream of the\n",[381,1597,922],{}," event carries it to the board every 10 ms, and it takes\neffect only while ",[381,1600,1601],{},"sine1_bypass = 1",". The scripts\n",[389,1604,1606],{"href":1605},"\u002Fpython-scripts\u002Faccessing-variables","share one namespace",", so ",[381,1609,1610],{},"t",[381,1612,389],{},"\nand ",[381,1615,1616],{},"f"," from ",[381,1619,1516],{}," are available in ",[381,1622,1561],{},"; ",[381,1625,389],{},[381,1627,1616],{}," can be\nchanged at runtime in the Python Interpreter window.",[619,1630,112],{"id":1631},"workspace",[377,1633,1634],{},"The workspace has four controls:",[453,1636,1637,1655,1668,1680],{},[456,1638,1639,1642,1643,1645,1646,1648,1649,1651,1652,1654],{},[389,1640,131],{"href":1641},"\u002Fvisualization\u002Fgraph-control"," (15 s window): ",[381,1644,464],{},"\n(red), ",[381,1647,467],{}," (orange), ",[381,1650,471],{}," (blue) and ",[381,1653,474],{},"\n(green).",[456,1656,1657,1660,1661,1663,1664,1667],{},[389,1658,151],{"href":1659},"\u002Fvisualization\u002Fwatch-table-control"," (250 ms refresh)\nwith all scalar variables except ",[381,1662,467],{}," and with the ",[410,1665,1666],{},"Write","\ncolumn — this is where you calibrate, toggle the bypass and enter a\nmanual stimulation.",[456,1669,1670,1673,1674,1676,1677,1679],{},[389,1671,136],{"href":1672},"\u002Fvisualization\u002Fxy-graph-control",": ",[381,1675,464],{}," on the X\naxis against ",[381,1678,474],{},", persistence 22 s.",[456,1681,1682,1686,1687,1689,1690,1693,1694,1696,1697,1699],{},[389,1683,1685],{"href":1684},"\u002Fvisualization\u002Fmatrix-control","Matrix"," with three tabs: the\n",[381,1688,1390],{}," map (",[410,1691,1692],{},"Read"," button, colour scale 4–32.5), the\n",[381,1695,1423],{}," curve (polled) and the large map ",[381,1698,1451],{}," (Read\nbutton).",[377,1701,1702],{},"The layout also opens both scripts and the Python Interpreter window\nnext to the workspace.",[448,1704,1706],{"id":1705},"can-specifics","CAN specifics",[453,1708,1709,1716,1731,1734],{},[456,1710,1711,1712,1715],{},"A classic CAN frame carries at most 7 data bytes of a response, so the\n1072 B map means more than 150 frames and the 64 × 64 map more than\n2,300 frames. Reading the 16 KB map at 500 kbit\u002Fs takes approximately\n0.6 s — which is why both maps are on the ",[410,1713,1714],{},"On Request"," event and are\nnot polled.",[456,1717,1718,1719,1722,1723,1726,1727,1730],{},"Reads use slave block mode (",[381,1720,1721],{},"UPLOAD"," bursts), writes use master block\nmode in blocks of 16 × 6 B (",[381,1724,1725],{},"DOWNLOAD"," + ",[381,1728,1729],{},"DOWNLOAD_NEXT",", one\nacknowledgement per block).",[456,1732,1733],{},"The curve (32 B) is polled every 500 ms on CAN too.",[456,1735,1736,1737,1740],{},"A matrix transfer spread over several frames is ",[410,1738,1739],{},"not atomic"," — if\nthe firmware is changing cells meanwhile, the block read may mix old\nand new values.",[448,1742,1744],{"id":1743},"what-you-will-see-and-what-to-try","What you will see and what to try",[453,1746,1747,1765,1788,1809,1826,1849],{},[456,1748,1749,1752,1753,1756,1757,417,1759,1761,1762,1764],{},[410,1750,1751],{},"Measurement."," After ",[410,1754,1755],{},"Connect"," the XCP session is established, the\nlog shows the name and cycle of the board's event channel and the\ngraph starts drawing four sines; ",[381,1758,464],{},[381,1760,467],{},"\noverlap, ",[381,1763,954],{}," in the table grows every 500 ms, the torque curve\nfills.",[456,1766,1767,1770,1771,1773,1774,1777,1778,1780,1781,1783,1784,1787],{},[410,1768,1769],{},"Maps."," Press ",[410,1772,1692],{}," on the ignition map tab — on CAN you can\nwatch the block load. Edit cells in ",[410,1775,1776],{},"Write Mode",", press ",[410,1779,1666],{}," and\ncheck with another ",[410,1782,1692],{}," and the ",[381,1785,1786],{},"Map lookup"," value. Load the large\nmap on its tab; the read takes approximately 0.6 s.",[456,1789,1790,1793,1794,1796,1797,1799,1800,1802,1803,417,1806,1808],{},[410,1791,1792],{},"Bypass."," Write ",[381,1795,1601],{},". ",[381,1798,464],{}," detaches from the\nmodel and starts following the slow sine from the script (raw ±0.8),\nwhile ",[381,1801,467],{}," keeps showing the internal model. The shape on the\nXY graph changes. Write ",[381,1804,1805],{},"0",[381,1807,464],{}," returns to the model.",[456,1810,1811,1814,1815,1818,1819,1822,1823,1825],{},[410,1812,1813],{},"Manual stimulation."," Set ",[381,1816,1817],{},"a = 0"," in the Python Interpreter (or\ndisable the script in the project) and enter e.g. ",[381,1820,1821],{},"75"," into\n",[381,1824,494],{}," — a constant raw value of 5.0 is transferred to the board\nuntil you overwrite it.",[456,1827,1828,1793,1831,1834,1835,1838,1839,1726,1842,1844,1845,1848],{},[410,1829,1830],{},"Calibration.",[381,1832,1833],{},"sine2_amplitude = 8"," or ",[381,1836,1837],{},"sine3_period = 2"," —\nthe write goes through ",[381,1840,1841],{},"SET_MTA",[381,1843,1725],{}," in engineering units\n(",[389,1846,114],{"href":1847},"\u002Fvisualization\u002Fwrite-to-device",") and\nthe new value comes back by polling within 500 ms.",[456,1850,1851,1854,1855,1858,1859,1862,1863,1866,1867,1869,1870,1873,1874,1878],{},[410,1852,1853],{},"Unplugging the adapter."," Unplug the PCAN-USB while running. Within\none second the driver reports the transport loss to the protocol, goes\n",[410,1856,1857],{},"Faulted",", tries to reopen the adapter twice (with a 1 s delay) and\nthen stops its protocol with the error ",[381,1860,1861],{},"gave up after 2 reconnect attempt(s)"," and ends up ",[410,1864,1865],{},"Stopped",". The runtime keeps running — the\nscript keeps computing, but no data is transferred. Plug the adapter\nback in and press ",[410,1868,521],{}," in the driver's ",[410,1871,1872],{},"Properties"," window: the\ndriver and the protocol start, XCP establishes a new session and DAQ\nand STIM resume, see\n",[389,1875,1877],{"href":1876},"\u002Frunning\u002Fstart-and-stop#driver-states-and-the-start-button","Driver states and the Start button",".\nIf you plug the adapter back in during the two attempts, the\nconnection recovers by itself.",[448,1880,1882],{"id":1881},"related-chapters","Related chapters",[453,1884,1885,1890,1899,1916,1921,1927,1931,1938],{},[456,1886,1887,1889],{},[389,1888,407],{"href":406},"\n— the detailed description of the variables, presentations, scripts\nand the workspace.",[456,1891,1892,1613,1895,552],{},[389,1893,1894],{"href":628},"Reference — PEAK CAN Adapter",[389,1896,1898],{"href":1897},"\u002Freference\u002Fdrivers#reconnection","Reconnection",[456,1900,1901,468,1904,468,1908,1613,1912,552],{},[389,1902,1903],{"href":731},"Reference — XCP on CAN",[389,1905,1907],{"href":1906},"\u002Freference\u002Fprotocols#xcp-polling-daq-and-stim","XCP polling, DAQ, and STIM",[389,1909,1911],{"href":1910},"\u002Freference\u002Fprotocols#matrix-variables-over-xcp","Matrix variables over XCP",[389,1913,1915],{"href":1914},"\u002Freference\u002Fprotocols#block-mode","Block mode",[456,1917,1918,1920],{},[389,1919,100],{"href":866}," — Extra Params for DAQ and STIM.",[456,1922,1923,1926],{},[389,1924,163],{"href":1925},"\u002Frunning\u002Fstart-and-stop"," — driver states.",[456,1928,1929,552],{},[389,1930,156],{"href":1684},[456,1932,1933,983,1935,1937],{},[389,1934,249],{"href":391},[389,1936,262],{"href":551}," — the example firmware, the CAN\ntransport.",[456,1939,1940,1943],{},[389,1941,196],{"href":1942},"\u002Fpython-scripts\u002Fscripts-overview"," — the Startup and\nPeriodic modes.",[1945,1946,1947],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":1528,"searchDepth":1547,"depth":1547,"links":1949},[1950,1951,1952,1960,1961,1962],{"id":450,"depth":1541,"text":451},{"id":525,"depth":1541,"text":526},{"id":609,"depth":1541,"text":610,"children":1953},[1954,1955,1956,1957,1958,1959],{"id":621,"depth":1547,"text":622},{"id":860,"depth":1547,"text":100},{"id":975,"depth":1547,"text":976},{"id":1353,"depth":1547,"text":1354},{"id":1509,"depth":1547,"text":1510},{"id":1631,"depth":1547,"text":112},{"id":1705,"depth":1541,"text":1706},{"id":1743,"depth":1541,"text":1744},{"id":1881,"depth":1541,"text":1882},"The same example as over TCP, but over classic CAN through a PEAK PCAN-USB adapter — DAQ measurement, polled calibration writes, a STIM bypass from a script, maps read on request and block mode on eight-byte frames, the driver's behaviour after unplugging the adapter.","md",{},true,{"title":363,"description":1963},"MmbWo7CPTxM7D7XkpRugWtaAoj7n4oAQ1M44r5LyZUI",[1970,15],{"title":358,"path":359,"stem":360,"navTitle":361,"children":-1},1791554568268]