private void startCooldown( IoModule ioModule, ParamManager paramManager, List<ZoneState> zones, List<BeltState> beltStates, List<RailState> railStates, double cooldownTemp, Config config, List<Integer> nodes) { if (ioModule.getOutput(Can.OutputIO.IOM_HEAT_CONTACTOR) == 1) { // Turn off heat contactor and disable alarms paramManager.setAlarms(ALARM_DISABLED); CanComm.sendCmdSetpoint( Can.BoardType.BOARD_TYPE_IOM.getStartNum(), 0, Can.CmdSetpoint.SETPOINT_HEAT_CONTACTOR, 0); log.info("Delayed Cooldown -- Heat Contactor Off..."); } // gray out heat zones on GUI for (ZoneState zone : zones) { zone.setTopHeaterFlag(Equip.HeaterFlag.OFF); paramManager.zeroHeaterSetpoint(true, zone); zone.setTopColor(GRAY); if (zone.isHeatZone()) { zone.setBottomHeaterFlag(Equip.HeaterFlag.OFF); paramManager.zeroHeaterSetpoint(false, zone); zone.setBottomColor(GRAY); } } // gray out belts on GUI for (BeltState beltState : beltStates) { beltState.setColor(GRAY); } // gray out rails on GUI for (RailState railState : railStates) { railState.setColor(GRAY); } // test if zone heaters are above cooldown temperature boolean belowTemp = true; for (ZoneState zone : zones) { if (zone.getTopTemp() > cooldownTemp) { belowTemp = false; break; } if (zone.getBottomTemp() > cooldownTemp && zone.isHeatZone()) { belowTemp = false; break; } } if (belowTemp) { // complete cooldown after all zones less than cooldown temp if (OvenState.getInstance().getLightTower() == LightTowerState.COOLDOWN.getTower()) { CanComm.setLightTower(Equip.LightTowerState.TOWER_OFF.getTower()); } // set all belts to speed of zero for (int i = 0; i < config.getNumBelts(); i++) { BeltState beltState = beltStates.get(i); paramManager.zeroBeltSetpoint(beltState); } // turn off fan contactor CanComm.sendCmdSetpoint( Can.BoardType.BOARD_TYPE_IOM.getStartNum(), 0, Can.CmdSetpoint.SETPOINT_FAN_CONTACTOR, 0); CanComm.sendSystemState( SystemState.SYSTEM_STATE_OVEN_OFF, Can.OpId.OPER_SET.ordinal(), nodes); log.info("Cooldown complete - Fan Contactor Off..."); } }