I am only too pleased to be of help, Anne-Marie. Yes, definitley try it on your own. If you get stuck, then take a peak at what I did. I tested it with LogixPro based on what you have said was needed, and it seemed to work.
Big Hot Tip: Use the Timer DN bits to stop the Outputs when the cycles end, but make sure the subroutine Outputs (water, soap, blower, and so on) are off before you exit the subroutine.
Because your timers are inside subroutines (I understand you did this because the project requires the use of subroutines) then you should set your Comparision instructions to end 0.1 seconds before the timer Preset values are reached (and DN bit goes on). You can move the comparison instruction time back 0.1 seconds (what I did), OR you can move the timer Preset value up by 0.1 seconds. Maybe it is technically better to move the Presets up by 0.1, to keep your cycle times exactly as specified by your instructor, instead of being 0.1 seconds less. In the real world, nobody would care if the times are 0.1 second short for a car wash (might even save the owner money over a long time period), but in the ideal unreal world of the classroom, objections might be raised. Anyway, do one or the other. If you let the timer DN bit stop the subroutine calls, and the Outputs in the subroutine are still on, then the outputs will be stuck on and there will be no easy efficient way to turn them off. For the above reason, I also changed the last Greater Than rung in each subroutine to a Limit instruction, so that the Outputs go off BEFORE the timer DN bit goes on.
Much more could be done with the coin detector/changer. You could write routines to give change for dollars, quarters, dimes, and so on. There was a guy on here last year, who wrote a program for a vending machine, so we have that as a guide. I know this is above the project requirements, but some instructors give extra credit for extra work. Only you can decide whether it is worth some extra effort.