I have found that the mount in my RCS400 is not robust enough to permit out of balance and still achieve accurate pointing. The scope has to be in good balance. I have an Optec Pyxis rotator and an SBIG ST2000 CCD. When the rotator turns, the balance is disturbed by the rotation of the optical train. I made a few mods in Aquireimages to prevent rotation during slewing and made a User Action to return the Pyxis to PA=0 before doing the next slew to another target. I am also including a script which turns the rotator to PA=0 and shuts down the CCD camera (I borrowed the latter from these Forums).
Someone may find these useful.
Mod in Aquireimages
//
// Slew-ahead logic. This will not slew-ahead from the last
// target of one set to the first target of the next set.
// That logic just got too complex, and has so little benefit.
// Consider the effect of a MinSetTime: Is this a wait or not?
// The slewNext and rotNext vars are passed to SUP.TakePicture()...
//
// slewNext = rotNext = false;
// if(Tn !== null)
// {
//
// Slew-ahead
//
// if(LightTargetImmediate(Tn))
// {
// slewNext = !TargetCloseEnough(Tn);
// rotNext = !RotatorCloseEnough(Tn) || WouldFlip(Tn.RA);
// }
// }
---------------------------------------------------------------------------------
function SafeSlewIf(Tgt, Reason)
{
var willFlip = WouldFlip(Tgt.RA); // True if slew flips GEM, used to force rotator slew
if(!TargetInLimits(Tgt, Reason)) return false; // Unsafe for limits (Update ephemeris)
if(!TargetCloseEnough(Tgt) || willFlip) // Flip requires slew regardless!
{
SUP.StartSlewJ2000(Tgt.Name, Tgt.RA, Tgt.Dec);
}
else
{
Console.PrintLine(" (no slew, scope already within max error of target)");
if(Prefs.PointingUpdates.Simulate) // If simulating (need for initial target)
SUP.CalcSimImageCoordinates(Tgt.RA, Tgt.Dec); // Calculate simulator image
}
SUP.WaitForSlew(); //I inserted this line
if(SUP.HaveRotator)
{
if(Prefs.PointingUpdates.Simulate || !RotatorCloseEnough(Tgt) || willFlip) // Flip & Simulate require rotation regardless!
SUP.StartRotateToPA(Tgt.PA, Tgt.RA); // Rotate if > 1.0 deg error
else
Console.PrintLine(" (no rotate, already close enough to desired PA)");
}
return true;
}
----------------------------------------------------------
UserActions
'------------------------------------------------------------------------------
' TargetEnd() Called from AcquireImages.js/~plan-acquire.js when the current
' target's processing is complete.
'
' Parameters:
' Plan ACP.Plan object for currently running plan
' Target Current ACP.Target object
' NextTarget Next ACP.Target object Or Null
'
' Use Util.Script.xxx to acces AcquireImages globals, etc.
'
' Return True to permit the script to continue. Returning False will cause the
' observing run to terminate.
'------------------------------------------------------------------------------
Function TargetEnd(Plan, Target, NextTarget)
Util.Script.SUP.Initialize
Util.Console.PrintLine " [useraction] TargetEnd called"
Util.Script.voiceForUA.Speak ("TargetEnd user action called")
Util.ScriptCamera.GuiderStop
Util.Console.PrintLine "Guider has stopped"
Util.Script.voiceForUA.Speak ("Guider has stopped")
If Util.Script.SUP.HaveRotator Then Util.Script.SUP.StartRotateToPA 0.0,0
Util.Script.SUP.WaitForRotator
Util.Console.PrintLine "Rotator has rotated to PA of 0 degrees"
Util.Script.voiceForUA.Speak ("Rotator has rotated to a position angle of 0")
TargetEnd = True
End Function
-----------------------------------------------------
Script to turn rotator to PA=0 and shutdown camera.
Sub Main()
Dim SUP
Dim ROT
Dim Telescope, PA
Set SUP = CreateObject("ACP.AcquireSupport") ' Enables slewing
Call SUP.Initialize
If SUP.HaveRotator Then SUP.StartRotateToPA 0.0,0
SUP.WAitForRotator
Console.PrintLine "Rotator has rotated to 0"
Voice.Speak ("Rotator is now at 0 degrees")
Set Telescope = Util.ScriptTelescope ' Need this for parking/tracking
If Telescope.CanSetTracking Then
If Telescope.Tracking Then
Telescope.Tracking = False
''Util.WaitForMilliseconds 1000
End If
Console.PrintLine "Tracking has stopped"
Voice.Speak("Tracking has stopped")
End If
SUP.Terminate
Telescope.Park
WaitForMilliseconds 20000
Console.PrintLine("Scope is now parked")
Voice.Speak("Scope is now parked")
If Telescope.Connected Then Util.ScriptTelescope.Connected = False ' Disconnect it from ACP
Console.PrintLine "Shutting down imager. Please wait..."
Voice.Speak("Shutting down imager. Please wait.")
If Camera.CanSetTemperature Then ' Try to do "nice" Shutdown
z = Camera.TemperatureSetpoint ' Remember this, as MaxIm remembers
Console.PrintLine " (raising temperature to +5.0C... 20 min max)"
Console.PrintLine " (cooler is now at " & Util.FormatVar(Util.ScriptCamera.Temperature, "0.0") & "C"
Camera.TemperatureSetpoint = 6.0 ' Raise temperature to +6C
For i = 1 To 20 ' Take 20 minutes max...
If Camera.Temperature >= 4.0 Then Exit For ' Warmed, time to shut down cooler
WaitForMilliseconds 60000
Console.PrintLine " (cooler is now at " & Util.FormatVar(Util.ScriptCamera.Temperature, "0.0") & "C)"
Next
End If
Camera.CoolerOn = False
Camera.TemperatureSetpoint = z ' Reset original setpoint for future
WaitForMilliseconds 1000 ' Give MaxIm a chance to shutdown cooler
Camera.LinkEnabled = False
CameraConnected = False ' Disconnect it from ACP
Console.PrintLine "Imager shutdown complete."
Voice.Speak("Imager shutdown complete. Good night.")
End Sub
Larry Simpson