[{"data":1,"prerenderedAt":1273},["ShallowReactive",2],{"docs-nav-docs_en":3,"docs-page-\u002Fen\u002Fexamples\u002Fsimulation-all-signals":367,"docs-surround-\u002Fen\u002Fexamples\u002Fsimulation-all-signals":1270},[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":309,"body":369,"description":1265,"extension":1266,"meta":1267,"navTitle":309,"navigation":1037,"path":310,"seo":1268,"stem":311,"__hash__":1269},"docs_en\u002Fen\u002F12.examples\u002F01.simulation-all-signals.md",{"type":370,"value":371,"toc":1252},"minimark",[372,376,398,412,417,489,493,500,504,509,512,560,563,619,622,629,775,782,948,966,972,976,989,1012,1023,1045,1067,1071,1121,1125,1131,1142,1212,1216,1248],[373,374,309],"h1",{"id":375},"simulation-all-signals",[377,378,379,380,384,385,387,388,391,392,397],"p",{},"The project ",[381,382,383],"code",{},"Qenex_Sim_SimulData_AllSignals.qproj"," is in the ",[381,386,304],{},"\nfolder next to ",[381,389,390],{},"QInsight.exe",". It needs no hardware: all data comes from\nthe ",[393,394,396],"a",{"href":395},"\u002Freference\u002Fprotocols#simulation-signals","Simulation Signals","\nprotocol, which makes it the quickest way to try QInsight and to see most\nof the controls in action.",[377,399,400,407],{},[401,402],"img",{"alt":403,"className":404,"src":406},"The Basic signals workspace while running",[405],"img-light","\u002Fimg\u002FQInsight_ex_sim_all_signals_light.png",[401,408],{"alt":403,"className":409,"src":411},[410],"img-dark","\u002Fimg\u002FQInsight_ex_sim_all_signals_dark.png",[413,414,416],"h2",{"id":415},"what-the-example-shows","What the example shows",[418,419,420,449,461,472,482],"ul",{},[421,422,423,424,427,428,427,431,434,435,427,438,427,441,444,445,448],"li",{},"all seven scalar simulation signals (",[381,425,426],{},"step",", ",[381,429,430],{},"noisystep",[381,432,433],{},"walk1"," to\n",[381,436,437],{},"walk3",[381,439,440],{},"laosstrain",[381,442,443],{},"laosstress",") and the ",[381,446,447],{},"thermal"," matrix signal,",[421,450,451,452,456,457,460],{},"a ",[453,454,455],"strong",{},"Python filter",": an on-change trigger on the noisy signal runs a\nscript that computes an exponential moving average and writes the result\ninto a ",[453,458,459],{},"virtual variable",", so the filtered curve is drawn next to the\noriginal,",[421,462,463,464,467,468,471],{},"the ",[453,465,466],{},"LAOS pair"," of strain and stress on a time graph and on an\n",[453,469,470],{},"XY graph"," as a Lissajous loop, shaped live by the nonlinearity and\nharmonic parameters written from the watch table,",[421,473,451,474,477,478,481],{},[453,475,476],{},"thermal field"," as a Matrix variable in the Matrix control, with a\n",[381,479,480],{},"Hold"," parameter that stops the generator and lets you edit cells,",[421,483,484,485,488],{},"parameter defaults through ",[381,486,487],{},"init="," in the Comm params, without a script.",[413,490,492],{"id":491},"what-you-need","What you need",[377,494,495,496,499],{},"Just QInsight. Open the project, press ",[453,497,498],{},"Start"," and switch between the\nthree workspace tabs.",[413,501,503],{"id":502},"the-project","The project",[505,506,508],"h3",{"id":507},"drivers-and-protocols","Drivers and protocols",[377,510,511],{},"Two pairs, neither with any settings:",[513,514,515,531],"table",{},[516,517,518],"thead",{},[519,520,521,525,528],"tr",{},[522,523,524],"th",{},"Driver",[522,526,527],{},"Protocol",[522,529,530],{},"Role",[532,533,534,545],"tbody",{},[519,535,536,540,542],{},[537,538,539],"td",{},"Simulation",[537,541,396],{},[537,543,544],{},"generates every signal and reads the parameters",[519,546,547,550,553],{},[537,548,549],{},"Virtual Variables Host",[537,551,552],{},"Virtual Variables",[537,554,555,556,559],{},"publishes the script writes into ",[381,557,558],{},"FilterVal"," as samples",[505,561,100],{"id":562},"events",[513,564,565,578],{},[516,566,567],{},[519,568,569,572,575],{},[522,570,571],{},"Event",[522,573,574],{},"Period",[522,576,577],{},"Used by",[532,579,580,593,606],{},[519,581,582,587,590],{},[537,583,584],{},[381,585,586],{},"event20ms",[537,588,589],{},"20 ms",[537,591,592],{},"staircase sines, the LAOS pair",[519,594,595,600,603],{},[537,596,597],{},[381,598,599],{},"event100ms",[537,601,602],{},"100 ms",[537,604,605],{},"random walks, parameters (the period plays no role there)",[519,607,608,613,616],{},[537,609,610],{},[381,611,612],{},"event250ms",[537,614,615],{},"250 ms",[537,617,618],{},"the thermal field",[505,620,77],{"id":621},"variables",[377,623,624,625,628],{},"Generated signals (direction ",[381,626,627],{},"read","):",[513,630,631,649],{},[516,632,633],{},[519,634,635,638,641,646],{},[522,636,637],{},"Variable",[522,639,640],{},"Type",[522,642,643],{},[381,644,645],{},"signal",[522,647,648],{},"Note",[532,650,651,668,689,715,733,751],{},[519,652,653,658,661,665],{},[537,654,655],{},[381,656,657],{},"StepVal",[537,659,660],{},"float",[537,662,663],{},[381,664,426],{},[537,666,667],{},"staircase sine",[519,669,670,675,678,682],{},[537,671,672],{},[381,673,674],{},"NoisyStepVal",[537,676,677],{},"int",[537,679,680],{},[381,681,430],{},[537,683,684,685,688],{},"filter input; on-change trigger ",[381,686,687],{},"filter.py"," (Delta 5, Eng)",[519,690,691,702,705,712],{},[537,692,693,427,696,427,699],{},[381,694,695],{},"Walk1Val",[381,697,698],{},"Walk2Val",[381,700,701],{},"Walk3Val",[537,703,704],{},"double",[537,706,707,709,710],{},[381,708,433],{}," … ",[381,711,437],{},[537,713,714],{},"random walks around 0, 10 and −5",[519,716,717,722,724,728],{},[537,718,719],{},[381,720,721],{},"LAOS\u002FStrain",[537,723,704],{},[537,725,726],{},[381,727,440],{},[537,729,730],{},[381,731,732],{},"amp=\"800\";freq=\"0.5\"",[519,734,735,740,742,746],{},[537,736,737],{},[381,738,739],{},"LAOS\u002FStress",[537,741,704],{},[537,743,744],{},[381,745,443],{},[537,747,748,750],{},[381,749,732],{},", nonlinearity from the parameter",[519,752,753,758,761,765],{},[537,754,755],{},[381,756,757],{},"ThermalField",[537,759,760],{},"Matrix 8×6, ushort",[537,762,763],{},[381,764,447],{},[537,766,767,768,427,771,774],{},"direction ",[381,769,770],{},"readWrite",[381,772,773],{},"amp=\"40\";freq=\"0.025\"",", cells in °C (conversion 0.1), axes in mm",[377,776,777,778,781],{},"Parameters (direction ",[381,779,780],{},"write",", not generated, read by the protocol):",[513,783,784,802],{},[516,785,786],{},[519,787,788,790,794,799],{},[522,789,637],{},[522,791,792],{},[381,793,645],{},[522,795,796],{},[381,797,798],{},"init",[522,800,801],{},"Meaning",[532,803,804,822,840,858,876,894,912,930],{},[519,805,806,811,816,819],{},[537,807,808],{},[381,809,810],{},"Params\u002FNonlin",[537,812,813],{},[381,814,815],{},"nonlin",[537,817,818],{},"0.6",[537,820,821],{},"stress nonlinearity, 0 to 2",[519,823,824,829,834,837],{},[537,825,826],{},[381,827,828],{},"Params\u002FH1Amp",[537,830,831],{},[381,832,833],{},"h1amp",[537,835,836],{},"680",[537,838,839],{},"amplitude of the fundamental",[519,841,842,847,852,855],{},[537,843,844],{},[381,845,846],{},"Params\u002FH1Freq",[537,848,849],{},[381,850,851],{},"h1freq",[537,853,854],{},"0.5 Hz",[537,856,857],{},"frequency of the fundamental, drives the strain too",[519,859,860,865,870,873],{},[537,861,862],{},[381,863,864],{},"Params\u002FH1Phase",[537,866,867],{},[381,868,869],{},"h1phase",[537,871,872],{},"23°",[537,874,875],{},"phase of the fundamental",[519,877,878,883,888,891],{},[537,879,880],{},[381,881,882],{},"Params\u002FH2Amp",[537,884,885],{},[381,886,887],{},"h2amp",[537,889,890],{},"144",[537,892,893],{},"amplitude of the 3rd harmonic",[519,895,896,901,906,909],{},[537,897,898],{},[381,899,900],{},"Params\u002FH2Freq",[537,902,903],{},[381,904,905],{},"h2freq",[537,907,908],{},"1.5 Hz",[537,910,911],{},"frequency of the 3rd harmonic",[519,913,914,919,924,927],{},[537,915,916],{},[381,917,918],{},"Params\u002FH2Phase",[537,920,921],{},[381,922,923],{},"h2phase",[537,925,926],{},"76°",[537,928,929],{},"phase of the 3rd harmonic",[519,931,932,937,942,945],{},[537,933,934],{},[381,935,936],{},"Params\u002FHold",[537,938,939],{},[381,940,941],{},"hold",[537,943,944],{},"0",[537,946,947],{},"1 = freeze the thermal field",[377,949,950,951,954,955,958,959,962,963,965],{},"The project deliberately has no parameters for the 5th and 7th harmonic:\ntheir amplitude stays under the control of the nonlinearity, so a change\nof ",[381,952,953],{},"Nonlin"," is visible on the graph. With ",[381,956,957],{},"h3amp"," and ",[381,960,961],{},"h4amp"," present they\nwould take precedence and ",[381,964,953],{}," would have nothing left to act on.",[377,967,968,969,971],{},"The virtual variable ",[381,970,558],{}," (double) is assigned to the Virtual\nVariables protocol; its Comm params are empty.",[505,973,975],{"id":974},"scripts","Scripts",[377,977,978,981,982,985,986,988],{},[381,979,980],{},"init.py"," (mode ",[453,983,984],{},"Startup",") only prepares the filter state. The\nsimulation parameters are not set here: the protocol sets their\ndefaults from ",[381,987,487],{},".",[990,991,996],"pre",{"className":992,"code":993,"language":994,"meta":995,"style":995},"language-python shiki shiki-themes github-light github-dark-default","val = 0.0\nf = 0.15\n","python","",[381,997,998,1006],{"__ignoreMap":995},[999,1000,1003],"span",{"class":1001,"line":1002},"line",1,[999,1004,1005],{},"val = 0.0\n",[999,1007,1009],{"class":1001,"line":1008},2,[999,1010,1011],{},"f = 0.15\n",[377,1013,1014,981,1016,1019,1020,1022],{},[381,1015,687],{},[453,1017,1018],{},"On Value Changed",", triggered by ",[381,1021,674],{},") is\nthe whole filter:",[990,1024,1026],{"className":992,"code":1025,"language":994,"meta":995,"style":995},"val += f * (NoisyStepVal.EngValue - val)\n\nFilterVal.EngValue = val\n",[381,1027,1028,1033,1039],{"__ignoreMap":995},[999,1029,1030],{"class":1001,"line":1002},[999,1031,1032],{},"val += f * (NoisyStepVal.EngValue - val)\n",[999,1034,1035],{"class":1001,"line":1008},[999,1036,1038],{"emptyLinePlaceholder":1037},true,"\n",[999,1040,1042],{"class":1001,"line":1041},3,[999,1043,1044],{},"FilterVal.EngValue = val\n",[377,1046,1047,1048,1051,1052,1054,1055,1058,1059,1063,1064,1066],{},"It is an exponential moving average: the new value moves towards the\nmeasurement by the fraction ",[381,1049,1050],{},"f"," of the remaining distance. A smaller ",[381,1053,1050],{},"\nmeans a smoother but lazier curve. The state ",[381,1056,1057],{},"val"," lives in a Python\nvariable that all scripts of the project\n",[393,1060,1062],{"href":1061},"\u002Fpython-scripts\u002Faccessing-variables","share",". The write into ",[381,1065,558],{},"\nis published as a new sample because it is a virtual variable; a write\ninto a variable of another protocol would raise no UI event.",[505,1068,1070],{"id":1069},"workspaces","Workspaces",[513,1072,1073,1082],{},[516,1074,1075],{},[519,1076,1077,1080],{},[522,1078,1079],{},"Tab",[522,1081,297],{},[532,1083,1084,1094,1107],{},[519,1085,1086,1091],{},[537,1087,1088],{},[453,1089,1090],{},"Basic signals",[537,1092,1093],{},"graph of the staircase sines with the filter, graph of the random walks, a gauge and signal controls, plus the LAOS XY graph, the thermal-field matrix and watch tables of the H1 and H2 parameters as an overview of everything on one canvas",[519,1095,1096,1101],{},[537,1097,1098],{},[453,1099,1100],{},"LAOS",[537,1102,1103,1104,1106],{},"time graph of strain (left axis) and stress (right axis), XY graph of stress against strain, a watch table of ",[381,1105,953],{},", H1 and H2 in write mode, signal controls",[519,1108,1109,1114],{},[537,1110,1111],{},[453,1112,1113],{},"Thermal field",[537,1115,463,1116,1118,1119],{},[381,1117,757],{}," Matrix control, a watch table with ",[381,1120,480],{},[413,1122,1124],{"id":1123},"what-you-will-see-and-what-to-try","What you will see and what to try",[377,1126,1127,1128,1130],{},"After ",[453,1129,498],{}," every control is emptied and fills with values read from\nthe simulation; the stress oscillates with an amplitude of about ±580\nand the XY graph draws a closed loop.",[377,1132,1133,1134,1137,1138,1141],{},"Parameters are written in the watch table in the row's write mode: the\nentered value is sent by the row's ",[453,1135,1136],{},"Write"," button (or by Enter when\n",[453,1139,1140],{},"Write on Enter"," is on in the context menu). The effect shows in the\ngraphs at once; the watch table shows the written value only after it\nis read back from the simulation (controls show read values, never\nwritten ones).",[418,1143,1144,1156,1176,1190,1199],{},[421,1145,1146,1149,1150,1152,1153,1155],{},[453,1147,1148],{},"Filter",": on the Basic signals graph watch the green filtered curve\nchase the orange noisy signal. Change ",[381,1151,1050],{}," in ",[381,1154,980],{}," to 0.05 and\nrestart the runtime: the filter gets smoother but slower.",[421,1157,1158,1160,1161,1163,1164,1167,1168,1171,1172,1175],{},[453,1159,1100],{},": in the watch table write ",[381,1162,953],{}," = 0 and the loop turns into\nan ellipse; 1.5 deforms it. ",[381,1165,1166],{},"H2Amp"," = 300 bends the loop into an S,\n",[381,1169,1170],{},"H1Phase"," = 90 opens it. ",[381,1173,1174],{},"H1Freq"," = 1 speeds up strain and stress\ntogether and the loop stays closed.",[421,1177,1178,1180,1181,1183,1184,1186,1187,1189],{},[453,1179,1113],{},": the hot spot orbits the plate centre once per 40 s.\nWrite ",[381,1182,480],{}," = 1, switch the Matrix control to write mode, edit a cell\nand send it with the ",[453,1185,1136],{}," button (or Enter with Write on Enter\non); the value stays until ",[381,1188,480],{}," goes back to 0.",[421,1191,1192,1195,1196,1198],{},[453,1193,1194],{},"Matrix axes",": edit a value on the X axis. The generator never\nrewrites the axes, so the edit survives even with ",[381,1197,480],{}," = 0.",[421,1200,1201,1204,1205,1208,1209,1211],{},[453,1202,1203],{},"Stop and Start",": the simulation restarts from zero, the filter from\n",[381,1206,1207],{},"val = 0",", and the parameters return to their ",[381,1210,487],{}," values.",[413,1213,1215],{"id":1214},"related-chapters","Related chapters",[418,1217,1218,1227,1232,1237,1242],{},[421,1219,1220,1222,1223,1226],{},[393,1221,396],{"href":395}," and\n",[393,1224,552],{"href":1225},"\u002Freference\u002Fprotocols#virtual-variables"," in the protocol reference",[421,1228,1229],{},[393,1230,1231],{"href":1061},"Accessing variables from a script",[421,1233,1234],{},[393,1235,98],{"href":1236},"\u002Fvariables\u002Fmatrix-variable",[421,1238,1239],{},[393,1240,297],{"href":1241},"\u002Freference\u002Fcontrols",[421,1243,1244,1247],{},[393,1245,332],{"href":1246},"\u002Fexamples\u002Fbit-field-script"," — another example with virtual variables and an on-change trigger",[1249,1250,1251],"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":995,"searchDepth":1041,"depth":1041,"links":1253},[1254,1255,1256,1263,1264],{"id":415,"depth":1008,"text":416},{"id":491,"depth":1008,"text":492},{"id":502,"depth":1008,"text":503,"children":1257},[1258,1259,1260,1261,1262],{"id":507,"depth":1041,"text":508},{"id":562,"depth":1041,"text":100},{"id":621,"depth":1041,"text":77},{"id":974,"depth":1041,"text":975},{"id":1069,"depth":1041,"text":1070},{"id":1123,"depth":1008,"text":1124},{"id":1214,"depth":1008,"text":1215},"A complete project without hardware — every signal of the Simulation Signals protocol on three workspaces, a Python filter into a virtual variable, a LAOS loop on an XY graph and a thermal field in a matrix.","md",{},{"title":309,"description":1265},"0pZIRMfxmz0_agneDjCr3DYFvLBCDuKETMM6ZVNKzT8",[1271,1272],{"title":282,"path":301,"stem":302,"navTitle":282,"children":-1},{"title":313,"path":314,"stem":315,"navTitle":316,"children":-1},1791554568268]