Pneumatics Won't Fire: A Full Diagnostic Tree
Walk the exact order to debug a dead solenoid: CAN IDs, code enable, wiring, air pressure, and leaks, using CTRE PCM / REV PH behavior.
Sign in to track progress, earn XP, and save lessons.
Symptom
You command a piston and nothing moves. Pneumatics failures are almost always systematic; walk this tree top to bottom and do not skip steps.
1. CAN ID 0 (the #1 mistake)
The power distribution device and the legacy CTRE PCM should be configured so the FRC libraries can find them. As FRC Zero's troubleshooting guide states emphatically: the PDP and PCM should ALWAYS have the same CAN ID of 0, because FRC libraries assume this. A wrong CAN ID makes a perfectly wired module invisible. (The REV Pneumatic Hub is addressed separately by its own CAN ID; match what your code expects.)
2. Is the robot actually enabled and the module told to run?
- Confirm the Robot Status Light shows enabled (Teleop/Test), not just connected.
- The compressor must be enabled. With the modern WPILib API you construct a
Compressorobject and callenableDigital()(closed-loop control on the pressure switch); simply constructing the object starts default closed-loop control. - Instantiate solenoids with the right module type:
// CTRE PCM
Solenoid intake = new Solenoid(PneumaticsModuleType.CTREPCM, 1);
// REV Pneumatic Hub
DoubleSolenoid claw = new DoubleSolenoid(
PneumaticsModuleType.REVPH, 0, 1);
Using the wrong PneumaticsModuleType is a silent no-op.
3. Power and fuses
The PCM/PH and VRM are powered from the power distribution device. Check the fuse/breaker feeding the module. A blown fuse = dead module.
4. Air pressure
- High side should reach the system max (the legal ceiling is 120 PSI); the regulated low side typically reads ~60 PSI to the cylinders.
- If low side reads 0, the regulator is backwards or set to zero.
- If high side reads 0, a manual vent valve is open or the compressor isn't charging.
5. Double-solenoid logic
A double solenoid driven by two separate, conflicting commands will fire asynchronously or chatter. Drive it with a single set(kForward/kReverse) call and matching tubing lengths/fittings on both ports.
6. Leaks
If the compressor runs continuously and pressure won't hold, you have a leak. Spray a small amount of soapy water on every fitting; bubbles reveal the leak. A stuck pressure switch can also run the compressor forever, check it.
7. Sticky faults
Clear PCM/PH sticky faults in Phoenix Tuner / REV Hardware Client self-test, then verify CAN wiring. Persistent faults after clearing point to a real wiring or firmware problem, update firmware.
The discipline
Change one thing, retest, then move on. The fastest pneumatics debuggers don't guess; they walk the tree.
Key takeaways
- The single most common pneumatics bug is a wrong CAN ID, the PDP and legacy CTRE PCM should both be CAN ID 0.
- Enable the compressor in code (construct a Compressor / enableDigital()) and instantiate solenoids with the correct PneumaticsModuleType (CTREPCM vs REVPH).
- A continuously running compressor that won't hold pressure means a leak (soapy-water test) or a stuck pressure switch.
Lesson quiz
RequiredAnswer all 3 questions correctly to complete this lesson.
1.Your compressor builds pressure on the storage gauge, but a cylinder won't extend even though the storage side reads full. The low (working) side gauge reads 0 psi. What is the most likely cause?
2.In WPILib code, what automatically enables the PCM/Pneumatic Hub closed-loop compressor control that uses the pressure switch to cycle the compressor?
3.A double solenoid controlling a cylinder is set to kOff in code. What happens at the cylinder?
Answer every question to submit.