I'll just put this here for now, but it's a work in progress. I need to go and do something, but will try and get it finished later.
Original code-
Code:
;=============================================================================
                           MainStage
;=============================================================================
;Do gather if commanded (uncomment and recompile for debugging purposes)
;IF Aux11Key || ((SV_MPU11_ABS_POS_2 < SV_MACHINE_PARAMETER_45) && (SV_MACHINE_PARAMETER_45 < -1000)) THEN (Aux11KeyPD)
;IF Aux11KeyPD  THEN (SV_TRIGGER_PLOT_DUMP), SET SV_STOP
;IF Aux11Key || OUT25 THEN (SV_TRIGGER_PLOT_DUMP)

IF TRUE THEN CurrentTurretPosition_W = 0
IF ToolBit1 && ToolBit2 && !ToolBit3 THEN CurrentTurretPosition_W = 1
IF !ToolBit1 && ToolBit2 && !ToolBit3 THEN CurrentTurretPosition_W = 2
IF !ToolBit1 && !ToolBit2 && !ToolBit3 THEN CurrentTurretPosition_W = 3
IF ToolBit1 && !ToolBit2 && !ToolBit3 THEN CurrentTurretPosition_W = 4
IF ToolBit1 && !ToolBit2 && ToolBit3 THEN CurrentTurretPosition_W = 5
IF !ToolBit1 && !ToolBit2 && ToolBit3 THEN CurrentTurretPosition_W = 6
IF !ToolBit1 && ToolBit2 && ToolBit3 THEN CurrentTurretPosition_W = 7
IF ToolBit1 && ToolBit2 && ToolBit3 THEN CurrentTurretPosition_W = 8
IF TRUE THEN SV_PLC_CAROUSEL_POSITION = CurrentTurretPosition_W

IF SV_PROGRAM_RUNNING THEN (ProgramRunning)

;cnctch.mac
IF OnAtPowerUp_M THEN RequestedLocation_W = CurrentTurretPosition_W
IF TRUE THEN TurretTimer = 700, ReversingTimer = 1500
IF M6 THEN (M6PD), SET DoingTurretIndex_M
IF M6PD THEN RequestedLocation_W = SV_TOOL_NUMBER

IF DoingTurretIndex_M && ((SV_TOOL_NUMBER < 1) || (SV_TOOL_NUMBER > 8))
  THEN SET OtherFault_M, FaultMsg_W = INVALID_TOOL_NUMBER, RST DoingTurretIndex_M, 
  RequestedLocation_W = CurrentTurretPosition_W, SET ToolChangeComplete

IF DoingTurretIndex_M && RequestedLocation_W != CurrentTurretPosition_W THEN SET TurretMotor
IF RequestedLocation_W == CurrentTurretPosition_W THEN SET TurretTimer
IF TurretTimer THEN RST TurretMotor, SET ReversingTimer, RST TurretTimer
IF ReversingTimer THEN RST ReversingTimer, SET ToolChangeComplete

IF !SV_PROGRAM_RUNNING THEN RST M6, RST DoingTurretIndex_M, RequestedLocation_W = CurrentTurretPosition_W

IF !M6 THEN RST ToolChangeComplete, RST TurretTimer


IF SV_STOP THEN RST TurretMotor, RST TurretTimer, RST ReversingTimer, RST M6

Code in the process of being modified
Code:
;=============================================================================
                           MainStage
;=============================================================================
;Do gather if commanded (uncomment and recompile for debugging purposes)
;IF Aux11Key || ((SV_MPU11_ABS_POS_2 < SV_MACHINE_PARAMETER_45) && (SV_MACHINE_PARAMETER_45 < -1000)) THEN (Aux11KeyPD)
;IF Aux11KeyPD  THEN (SV_TRIGGER_PLOT_DUMP), SET SV_STOP
;IF Aux11Key || OUT25 THEN (SV_TRIGGER_PLOT_DUMP)

IF SV_PROGRAM_RUNNING THEN (ProgramRunning)

;cnctch.mac
IF OnAtPowerUp_M THEN RequestedLocation_W = CurrentTurretPosition_W
IF TRUE THEN TurretTimer = 700, ReversingTimer = 1500
IF M6 THEN (M6PD), SET DoingTurretIndex_M
IF M6PD THEN RequestedLocation_W = SV_TOOL_NUMBER

IF DoingTurretIndex_M && ((SV_TOOL_NUMBER < 1) || (SV_TOOL_NUMBER > 8))
  THEN SET OtherFault_M, FaultMsg_W = INVALID_TOOL_NUMBER, RST DoingTurretIndex_M, 
  RequestedLocation_W = CurrentTurretPosition_W, SET ToolChangeComplete

;code to calculate distance to move
If CurrentTurretPosition_W > RequestedLocations_W THEN DistanceToMove = ... (need to handle roll over)
;code to rotate A-axis require distance
;code to reverse A-axis
IF TRUE THEN SET ToolChangeComplete


IF !SV_PROGRAM_RUNNING THEN RST M6, RST DoingTurretIndex_M, RequestedLocation_W = CurrentTurretPosition_W

IF !M6 THEN RST ToolChangeComplete, RST TurretTimer


IF SV_STOP THEN RST TurretMotor, RST TurretTimer, RST ReversingTimer, RST M6
RequestedLocation_W
CurrentTurretPosition_W

Chaz, to save me looking it up, just to confirm, it's an 8-position turret (45 deg between tools)?
And does normal rotation increase or decrease tool position?