FoundryNet / Error codes / J1939 (CAN) FMI 31
J1939 (CAN) error code

FMI 31 — Condition exists

A catch-all: the named condition is present. It carries no failure-mode information, so the SPN is doing all the work.

Start free J1939 (CAN) → canonical

Diagnosis

When you hit this


Resolution

How to fix it

  1. Go straight to the SPN
    FMI 31 tells you nothing. Look up the SPN in the manufacturer's fault code list.
  2. Expect proprietary meanings
    Many FMI 31 codes are vendor-defined and need the OEM's service documentation.

Normalization

What Forge does about it

This code is reported by the device itself, so it survives normalization as data. Forge maps the vendor's fault register into the canonical fields alarm_code and alarm_description (and alarm_severity where the vendor supplies one), so an agent reads the same three fields whether the fault came from a Haas, a SINUMERIK, or a Cat engine. Forge does not clear the fault — that is the controller's job.


Connect

Normalize J1939 (CAN) telemetry

One MCP endpoint serves every protocol adapter. 16,908 curated mappings, 366 canonical fields.

# normalize telemetry from J1939 (CAN) — and 13 other protocols
claude mcp add --transport http forge https://mcp.foundrynet.io/mcp \
  --header 'Authorization: Bearer YOUR_FORGE_KEY'
✓ forge connected — 32 tools available

Related

Keep reading

Other J1939 (CAN) codes: FMI 0 FMI 3 FMI 4 FMI 5 FMI 2

Equipment that speaks J1939 (CAN): Caterpillar Cummins Detroit Diesel Freightliner John Deere Kenworth Mack Trucks Navistar / International PACCAR Peterbilt

J1939 (CAN) protocol hub

Other protocols: Modbus OPC UA MQTT / Sparkplug B FANUC FOCAS EtherNet/IP PROFINET / S7 BACnet/IP MTConnect ROS 2 (DDS) SNMP MAVLink HTTP / REST CSV ingest

All error codes · All OEMs · All protocols

Industrial AI fails at the data layer. The Machine Agent explains why, weekly. Read it →
Get the thesis behind this infrastructure — The Machine Agent, weekly.