CAN Bus Input
Overview
A CAN Bus Input decodes a single CANbus signal directly out of a raw incoming CAN frame, using a byte/bit layout you define by hand. Use it when you know the frame layout (e.g. from a DBC) for an arbitrary or custom device and there is no CAN Preset for it. This is the raw frame signal approach: you give the message ID, say how the bits are encoded and where they sit, then scale the raw value to engineering units. To read a named object from a supported device instead, use a CAN Object Input.
Prerequisites & hardware
- A defined CAN bus for the channel the frame arrives on — see Working with the CAN Bus.
- The frame's message ID and bit layout for the signal you want (length, offset, signedness, endianness).
Add it in the app
- Add a new input and choose CAN Bus Input as the type.
- Give it a clear alias (e.g.
Engine RPM). - Enter the Message ID and its ID type, then the decoding type, length and offset that locate the signal in the frame.
- Set the raw → out scaling and the fault / timeout behaviour below.
| Setting | Meaning | Unit | Range / values | Notes |
|---|---|---|---|---|
| Message ID | CAN frame identifier to match | hex | fixed32 | The arbitration ID of the frame carrying the signal. |
| Message ID type | Identifier width | — | Extended (29-bit), Standard (11-bit) |
Must match how the sending device addresses the frame. |
| Decoding type | How the raw bits are interpreted | — | UnsignedBigEndian, UnsignedLittleEndian, SignedBigEndian, SignedLittleEndian, BitField, BitFieldBigEndian, SignedBitField, SignedBitFieldBigEndian, FloatLittleEndian, FloatBigEndian |
Selects signedness, endianness, bitfield or float decoding. Match the sender's encoding. |
| Length | Signal length | bytes / bits | uint32 | In bytes for the integer/float types; in bits for the bitfield types (BitField, BitFieldBigEndian, SignedBitField, SignedBitFieldBigEndian). |
| Offset | Position of the signal in the frame | bytes / bits | uint32 | Same units as Length: bytes for integer/float types, bits for bitfield types. |
| Enable interpolation | Linearly interpolates between the raw/out points | — | on / off | Off = step/clamped mapping. |
| Raw min / Raw max | Raw signal range to scale from | — | sint32 | The decoded low/high points. |
| Out min / Out max | Engineering range to scale to | signal unit | sint32 | The value reported at Raw min / Raw max. |
| Fault input | An input whose state flags this signal as faulted | — | input alias | When that input is in its fault band the signal is treated as faulted. |
| Fault min / Fault max | Values that indicate a fault | — | sint32 | Decoded values inside this band mark the signal as faulted. |
| Saturate | Clamps the output to the out range | — | on / off | On = limit to Out min … Out max instead of extrapolating. |
| Default value | Value used before any frame arrives / when default selected | signal unit | sint32 | Reported until the first valid frame. |
| Fault value | Value reported on fault | signal unit | sint32 | Substituted while the signal is faulted. |
| Timeout | Maximum time between frames | ms | uint32 | A gap longer than this triggers the timeout behaviour. |
| Timeout mode | What to report on timeout | — | UsePrevious, UseDefault, UseFault |
See the Timeouts section. |
| Scaling: | the decoded value is mapped from Raw min…Raw max to Out min…Out max using two-point interpolation. |
Common settings
CAN Bus Input also uses the shared setting — alias. See Common IO Settings.
Example — engine RPM from a 500 kbit/s bus
- Type CAN Bus Input, alias
Engine RPM. - Message ID
0x0CF00400, ID typeExtended (29-bit). - Decoding type
UnsignedLittleEndian, Length2(bytes), Offset3(starts at byte 3) — a 16-bit value. (A bitfield type would use bits here.) - Raw min/max
0/65535→ Out min/max0/8191(0.125 rpm/bit gives the right scale); Saturate on. - Timeout
100ms, Timeout modeUseFault, Fault value0so a lost ECU is detected rather than the last rpm being held.
Troubleshooting
- Value is garbage / wildly wrong: check the decoding type (signedness and endianness) and that Length and Offset match the frame layout — remember they are in bytes for integer/float types and bits for bitfield types.
- Reads zero / never updates: confirm the Message ID and ID type, and that the CAN bus baud rate matches the sender.
- Scaled wrong: verify Raw min/max and Out min/max.
- Holds a stale value when the device drops off: set a Timeout and a Timeout mode of
UseDefaultorUseFault.
Related
- CAN Object Input — read a named object from a CAN Preset instead of decoding bytes by hand.
- CAN Bus Output — pack a signal into an outgoing frame.
- Working with the CAN Bus