Check engine light keeps comming on

A 1999 Suburban K1500, the check engine light continues to come on, especially when under-load like going up a 2000 foot grade. The DTC Code is P0304. The distributor cap and rotor and plug wires have been replaced and all new plugs installed. Te engine runs smooth with no hesitation. Fuel injector cleaner has been in the gas tank for five months. The light never comes on during in-town driving only highway. The engine runs fine, smooth, no hesitation or misfires. The local shop has not been able to find the cause. The code does not clear on its own, has to be done with a code reader.

Try swapping the fuel injector from cylinder #4 to another cylinder to see if the miss moves with the injector.

Tester

Has your shop run a compression test?

You might have a broken valvespring on the #4 intake valve. Just the tail end of the spring.

hmm … so you’re getting a diagnostic code for a misfire, but the engine doesn’t feel like it is misfiring at all? … hmm … well, the computer decides the engine is misfiring by measuring the crankshaft rpm, looking for an increase in rpm immediately after a spark. So maybe it doesn’t know exactly at what crank angle the spark occurred, or it knows that ok, but isn’t measuring the rpm increase accurately. Whatever sensor(s) are involved with those functions should be considered suspects. On my Corolla all of those sensors are inside the distributor, but I don’t know the sensor config of your engine. If you have a dashboard rpm display, does it seem to be working normally?