Airspeed Indicator — Robotics/Flight Instruments
Robotics/Flight_Instruments/Airspeed_Indicator · 0 input / 0 output port(s) at insert · exports to Python, MATLAB, Java, Rust, C, C++, VHDL, Verilog, SystemVerilog, PLC Structured Text
Description#
The block's own DESCRIPTION_HTML, rendered verbatim — the same text the config dialog's info panel and the library navigator show. Fix a wrong sentence in the block's .cpp (R-D9), never here.
Airspeed Indicator
Robotics / Flight Instruments
An airspeed dial. It shows the value of a signal it is told the name of: a needle on a scale from Limits(1) to Limits(2), turned in proportion to the value over 324°, with coloured bands drawn on the scale. Outside the limits the needle pegs 5° past the end of the scale. It has no ports at all.
Ports
- None. Not one input, not one output: the dial reads the signal it is bound to by name, as Simulink's binds to the one selected on its canvas.
Parameters
- Signal – the name of the link to read, for example
airspeed, or its full path when the name contains/. Matching runs over this block's own subsystem and everything below it. It names a link, not a variable, so it is never looked up in the variables space. A name that matches no link is reported when the run starts, and the dial then shows no value. Only the first entry of the signal is read. - Limits –
[min max], the two ends of the scale, default[40 400]as on Simulink's block. The ten scale labels read min + k·(max − min)/9, k = 0…9. min must be below max. - Band Limits – one row per colour band,
[min max]per row, default[0 120; 100 360; 360 380; 380 450], Simulink's own four. A band is drawn clamped to Limits; empty means no bands. - Band Colors – one RGB row per band, components 0–255, default
white, green, yellow and red (
[255 255 255; 76 187 23; 252 209 22; 227 23 13]). It must have exactly as many rows as Band Limits. - Refresh Period (s) – how often the dial is repainted, in wall-clock seconds, so a fast run does not turn the needle into a blur. Zero or less repaints on every sample; the final sample of a run is always shown.
- Sampling Time (s) – how often the value is read. Zero or less inherits the solver's rate.
How a band is chosen
A band matches when min ≤ value ≤ max, and the FIRST matching row wins,
so Simulink's overlapping white and green bands give 100–120 to the white one. The band
index is what the exported code reports.
Notes
- The value is one sample behind. A block with no inputs has no input dependency, so it runs at the head of every step and reads what its source published on the previous one.
- Stateless: it draws, and computes nothing a later step reads.
Code export
All ten targets: Python, MATLAB, Java, Rust, C,
C++, VHDL, Verilog, SystemVerilog and PLC Structured Text.
A deployable target has no dial, so each one prints the bound VALUE and the BAND it falls in
(0-based, -1 for none), as the Dashboard Gauge does. PLC Structured Text emits
comments only, naming the signal array entry to tap. The one-sample shift applies to the
exported code too.
Code-export verification
This block is excluded from the code-export verification matrix, by name: the verifier records a terminal block's input signals, and a block with no inputs records nothing, so a rig around it would fail all ten languages at residual 0 and say nothing about the block.
Simulink bridge
None, and that is a measurement. Simulink's Airspeed Indicator
(aerolibhmi/Airspeed Indicator, BlockType=AirspeedIndicatorBlock)
has ZERO ports of any kind and no SampleTime, measured on R2026a; it reaches its
signal through Binding, a canvas selection stored outside the block's parameters,
and ICore has no counterpart for that. This block is the ICore reading of it – the signal
is named rather than clicked – so it is reported on exchange rather than mapped.
Code facts#
| Fact | Value |
|---|---|
| registered type | Robotics/Flight_Instruments/Airspeed_Indicator |
| family | Robotics/Flight_Instruments |
| solver environment class | ICoreBlock_0_Robotics_1_Flight_Instruments_2_Airspeed_Indicator |
| source | src/ICoreBlocks/ICoreBlockLibrary/Blocks/Robotics/Flight_Instruments/Airspeed_Indicator/ICoreBlock_0_Robotics_1_Flight_Instruments_2_Airspeed_Indicator.cpp |
| header | src/ICoreBlocks/ICoreBlockLibrary/Blocks/Robotics/Flight_Instruments/Airspeed_Indicator/ICoreBlock_0_Robotics_1_Flight_Instruments_2_Airspeed_Indicator.h |
| ports at insert | 0 in, 0 out |
| code generators implemented | Python, MATLAB, Java, Rust, C, C++, VHDL, Verilog, SystemVerilog, PLC Structured Text |
Ports#
The constructor creates no port explicitly — the port list comes from registerInitialPorts (0 in, 0 out) or from the block's configuration.
Configuration variables#
| Config variable | Default | Simulink parameter |
|---|---|---|
Signal | — | — |
Limits | [40 400] | — |
Band Limits | [0 120; 100 360; 360 380; 380 450] | — |
Band Colors | [255 255 255; 76 187 23; 252 209 22; 227 23 13] | — |
Refresh Period (s) | 0.1 | — |
Every block also carries Sampling Time (s) from ICoreBlockSolverEnvironment: zero or less inherits the solver's rate, a positive value runs the block at that period.
Simulink bridge#
| support | Support::None |
| Simulink path | — |
| port-count rule | PortsParam::None |
SampleTime parameter | yes |
Caveat (shown to the user): Simulink's Airspeed Indicator (aerolibhmi, BlockType=AirspeedIndicatorBlock) has ZERO ports of any kind and no SampleTime - measured on R2026a. It does not receive its value on a wire: it reaches the signal through Binding, a canvas selection stored outside the block's parameters, and ICore has no counterpart for that. This block is the ICore reading of that dial - the signal is named rather than clicked - so it is reported on exchange rather than asserted
Catalog contract: src/ICoreBlocks/ICoreCoder/ICoreCommandSystem/SimulinkBridge/ICoreSimulinkBlockCatalog.h
Description vs code#
The checker has a blind spot here — it could not resolve something (a grouped port bullet, a computed config name), which is reported and never counted as a pass. A reader has to settle it:
B0no sample under docs/generated/samples/ — nothing to cross-check (P8.1)
The verdict above is
tools/docs/check_block_descriptions.py(P7.1), which compares LISTS. It cannot read a sentence: "stateless" on a block with a state, an initial-value semantic the recursion does not implement, a "not synthesizable" caveat the HDL banner contradicts. That is the agent audit (P7.3) on BLOCK_DESCRIPTION_AUDIT.md, and this tool's green is not a substitute for one.
File banner (developer view)#
The top comment of the block's .cpp — the maths, the realization and the export strategy, addressed to whoever changes it. It must not contradict the description above (P7.5).
Airspeed Indicator -- an airspeed dial bound to a signal by name The Aerospace Blockset's Flight Instruments/Airspeed Indicator, measured on R2026a (BlockType=AirspeedIndicatorBlock): ZERO ports, no SampleTime, the value arriving through Binding. Its dialog holds Limits, default [40 400]; a hidden ScaleColors holds four bands, white 0-120, green 100-360, yellow 360-380 and red 380-450. The face, read from the component that draws it: the scale starts at 126 degrees (from nine o'clock, clockwise) and sweeps 324, with ten major ticks and labels at Limits(1) + k * range / 9 and three minor ticks between each pair; the bands are arcs of stroke 5 clamped to Limits, the first at radius 130 and the rest at 135; the needle is proportional inside Limits and pegs 5 degrees past either end outside them.
Everything else -- the binding, the refresh gate, the bands' matching and the ten code generators -- is the family's, in ICoreFlightInstrumentSupport.
Sample results#
No sample run is committed for this block. Samples come from the headless harness (DOCS_PLAN.md P8.1) into docs/generated/samples/; until one exists this block's behaviour is witnessed by the parity and export-verification suites, not by a plot here.