Public Class fEQ8AuxEncoder Dim WaitResponseTime = 50 ' in mS Private Function ReadResponse(OverTime_mS As Integer) As String Dim Response As String Dim AChar As Char Dim AbortTime As Date Dim tSpan As New TimeSpan(OverTime_mS * 10000) Dim bStarted, bEnded As Boolean bStarted = False bEnded = False Response = "" AbortTime = Now.AddMilliseconds(OverTime_mS) Do If SerialPort1.BytesToRead <> 0 Then AbortTime = Now.AddMilliseconds(OverTime_mS) AChar = Chr(SerialPort1.ReadByte) If (AChar = "=") Or (AChar = "!") Then bStarted = True bEnded = False Response = AChar Else If bStarted Then Response += AChar If AChar = Chr(13) Then bEnded = True End If End If End If End If Loop Until (Now > AbortTime) Or bEnded Return Response End Function Private Sub btTurnOn_Click(sender As Object, e As EventArgs) Handles btTurnOn.Click Dim Response As String SerialPort1.PortName = "COM" + tbPortNumber.Text SerialPort1.Open() REM RA axis SerialPort1.Write(":W1040000" + Chr(13)) Response = ReadResponse(WaitResponseTime) ' It should return "=" REM Dec axis SerialPort1.Write(":W2040000" + Chr(13)) Response = ReadResponse(WaitResponseTime) ' It should return "=" SerialPort1.Close() End Sub Private Sub btTurnOff_Click(sender As Object, e As EventArgs) Handles btTurnOff.Click Dim Response As String SerialPort1.PortName = "COM" + tbPortNumber.Text SerialPort1.Open() REM RA axis SerialPort1.Write(":W1050000" + Chr(13)) Response = ReadResponse(WaitResponseTime) ' It should return "=" REM Dec axis SerialPort1.Write(":W2050000" + Chr(13)) Response = ReadResponse(WaitResponseTime) ' It should return "=" SerialPort1.Close() End Sub Private Function HexStrToInteger(Response As String) As Integer Dim HEXDataString As String HEXDataString = Response.Chars(5) + Response.Chars(6) + Response.Chars(3) + Response.Chars(4) + Response.Chars(1) + Response.Chars(2) Return Convert.ToInt32(HEXDataString, 16) End Function Private Function IntegerToHexStr(Data As Integer) As String Dim HEXDataString, SkywatcherHEXString As String Data = Data And &HFFFFFF ' Use lower 24 bits only HEXDataString = Hex(Data) For i = 1 To (6 - Len(HEXDataString)) HEXDataString = "0" + HEXDataString Next SkywatcherHEXString = HEXDataString.Chars(4) + HEXDataString.Chars(5) + HEXDataString.Chars(2) + HEXDataString.Chars(3) + HEXDataString.Chars(0) + HEXDataString.Chars(1) Return SkywatcherHEXString End Function Private Sub btAutoHome_Click(sender As Object, e As EventArgs) Handles btAutoHome.Click Dim fParkingPosition_HA, fParkingPosition_Dec As Decimal Dim Response As String Dim StepsPerRevolution_RA, StepsPerRevolution_Dec As Integer Dim iParkingPosition_RA, iParkingPosition_Dec As Integer Dim bSlewingUp_RA, bSlewingUp_Dec As Boolean Dim iPosition_RA, iPosition_Dec As Long Dim iChanges As Integer Dim bIndexChanged_RA, bIndexChanged_Dec As Boolean Dim sHomeIndexPosition_RA, sHomeIndexPosition_Dec As String lbAutoHome.Text = "Auto-homing ..." SerialPort1.PortName = "COM" + tbPortNumber.Text SerialPort1.Open() ' Turn off AUX encoder SerialPort1.Write(":W1050000" + Chr(13)) Response = ReadResponse(WaitResponseTime) ' It should return "=" SerialPort1.Write(":W2050000" + Chr(13)) Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Acquire StepsPerRevolution ' RA SerialPort1.Write(":a1" + Chr(13)) Response = ReadResponse(WaitResponseTime) ' It should return "=nnnnnn" StepsPerRevolution_RA = HexStrToInteger(Response) ' Dec SerialPort1.Write(":a2" + Chr(13)) Response = ReadResponse(WaitResponseTime) ' It should return "=nnnnnn" StepsPerRevolution_Dec = HexStrToInteger(Response) ' Prepare for slewing ' RA SerialPort1.Write(":F1" + Chr(13)) Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Dec SerialPort1.Write(":F2" + Chr(13)) Response = ReadResponse(WaitResponseTime) ' It should return "=" ' **************** Trying to get a reliable home index signal ****************** ' Reset the home position index ' RA SerialPort1.Write(":W1080000" + Chr(13)) Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Dec SerialPort1.Write(":W2080000" + Chr(13)) Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Read home position index data and decide the direction to slew twords the home position ' RA SerialPort1.Write(":q1000000" + Chr(13)) Response = ReadResponse(WaitResponseTime) ' It should return "=000000" or "=FFFFFF" If Response = ("=000000" + Chr(13)) Then bSlewingUp_RA = True Else bSlewingUp_RA = False End If ' Dec SerialPort1.Write(":q2000000" + Chr(13)) Response = ReadResponse(WaitResponseTime) ' It should return "=000000" or "=FFFFFF" If Response = ("=000000" + Chr(13)) Then bSlewingUp_Dec = True Else bSlewingUp_Dec = False End If ' Make sure both axes are stopped (They might be slewing) ' RA SerialPort1.Write(":K1" + Chr(13)) ' Send STOP command Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Dec SerialPort1.Write(":K2" + Chr(13)) ' Send STOP command Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Set slewing mode ' RA SerialPort1.Write(":G100" + Chr(13)) ' Goto a position Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Dec SerialPort1.Write(":G200" + Chr(13)) ' Goto a position Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Aquire current position ' RA SerialPort1.Write(":j1" + Chr(13)) Response = ReadResponse(WaitResponseTime) ' It should return "=nnnnnn" iPosition_RA = HexStrToInteger(Response) ' Dec SerialPort1.Write(":j2" + Chr(13)) Response = ReadResponse(WaitResponseTime) ' It should return "=nnnnnn" iPosition_Dec = HexStrToInteger(Response) ' Calculate target position, try to move further away from home position in this stage ' RA iChanges = 5.0 / 360.0 * StepsPerRevolution_RA ' Move 5 degree If bSlewingUp_RA Then iPosition_RA = iPosition_RA - iChanges Else iPosition_RA = iPosition_RA + iChanges End If ' Dec iChanges = 5.0 / 360.0 * StepsPerRevolution_Dec If bSlewingUp_Dec Then iPosition_Dec = iPosition_Dec - iChanges Else iPosition_Dec = iPosition_Dec + iChanges End If ' Set target position ' RA SerialPort1.Write(":S1" + IntegerToHexStr(iPosition_RA) + Chr(13)) ' Set target position Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Dec SerialPort1.Write(":S2" + IntegerToHexStr(iPosition_Dec) + Chr(13)) ' Set target position Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Slew away from current position ' RA SerialPort1.Write(":J1" + Chr(13)) ' Start slewing Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Dec SerialPort1.Write(":J2" + Chr(13)) ' Set slewing Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Wait until both axis stops ' RA Do SerialPort1.Write(":f1" + Chr(13)) ' Check status Response = ReadResponse(WaitResponseTime) ' It should return "=nnn" Loop Until (Response.Chars(2) = "0") ' Dec Do SerialPort1.Write(":f2" + Chr(13)) ' Check status Response = ReadResponse(WaitResponseTime) ' It should return "=nnn" Loop Until (Response.Chars(2) = "0") ' Check home index status ' RA SerialPort1.Write(":q1000000" + Chr(13)) Response = ReadResponse(WaitResponseTime) ' It should return "=nnnnnn" If (Response = ("=000000" + Chr(13))) Or (Response = ("=FFFFFF" + Chr(13))) Then bIndexChanged_RA = False Else bIndexChanged_RA = True End If ' Dec SerialPort1.Write(":q2000000" + Chr(13)) Response = ReadResponse(WaitResponseTime) ' It should return "=nnnnnn" If (Response = ("=000000" + Chr(13))) Or (Response = ("=FFFFFF" + Chr(13))) Then bIndexChanged_Dec = False Else bIndexChanged_Dec = True End If ' Make extra movement if needed ' RA If bIndexChanged_RA Then ' Set slewing mode SerialPort1.Write(":G100" + Chr(13)) ' Goto a position Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Aquire current position SerialPort1.Write(":j1" + Chr(13)) Response = ReadResponse(WaitResponseTime) ' It should return "=nnnnnn" iPosition_RA = HexStrToInteger(Response) ' Calculate target position, move further away from the home position iChanges = 5.0 / 360.0 * StepsPerRevolution_RA ' Move 5 degree If bSlewingUp_RA Then iPosition_RA = iPosition_RA - iChanges Else iPosition_RA = iPosition_RA + iChanges End If ' Set target position SerialPort1.Write(":S1" + IntegerToHexStr(iPosition_RA) + Chr(13)) ' Set target position Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Slew away from current position SerialPort1.Write(":J1" + Chr(13)) ' Start slewing Response = ReadResponse(WaitResponseTime) ' It should return "=" End If ' Dec If bIndexChanged_Dec Then ' Set slewing mode SerialPort1.Write(":G200" + Chr(13)) ' Goto a position Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Aquire current position SerialPort1.Write(":j2" + Chr(13)) Response = ReadResponse(WaitResponseTime) ' It should return "=nnnnnn" iPosition_RA = HexStrToInteger(Response) ' Calculate target position, move further away from the home position iChanges = 5.0 / 360.0 * StepsPerRevolution_Dec ' Move 5 degree If bSlewingUp_Dec Then iPosition_Dec = iPosition_Dec - iChanges Else iPosition_Dec = iPosition_Dec + iChanges End If ' Set target position SerialPort1.Write(":S2" + IntegerToHexStr(iPosition_Dec) + Chr(13)) ' Set target position Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Slew away from current position ' RA SerialPort1.Write(":J2" + Chr(13)) ' Start slewing Response = ReadResponse(WaitResponseTime) ' It should return "=" End If ' Wait until both axis stops ' RA Do SerialPort1.Write(":f1" + Chr(13)) ' Check status Response = ReadResponse(WaitResponseTime) ' It should return "=nnn" Loop Until (Response.Chars(2) = "0") ' Dec Do SerialPort1.Write(":f2" + Chr(13)) ' Check status Response = ReadResponse(WaitResponseTime) ' It should return "=nnn" Loop Until (Response.Chars(2) = "0") ' Reset the index again, if it changes in the first slewing If bIndexChanged_RA Then SerialPort1.Write(":W1080000" + Chr(13)) Response = ReadResponse(WaitResponseTime) ' It should return "=" End If If bIndexChanged_Dec Then SerialPort1.Write(":W2080000" + Chr(13)) Response = ReadResponse(WaitResponseTime) ' It should return "=" End If ' Update home position index data, do not update the one whose index data does not change in the first slewing ' RA If bIndexChanged_RA Then SerialPort1.Write(":q1000000" + Chr(13)) Response = ReadResponse(WaitResponseTime) ' It should return "=000000" or "=FFFFFF" If Response = ("=000000" + Chr(13)) Then bSlewingUp_RA = False Else bSlewingUp_RA = True End If End If ' Dec If bIndexChanged_Dec Then SerialPort1.Write(":q2000000" + Chr(13)) Response = ReadResponse(WaitResponseTime) ' It should return "=000000" or "=FFFFFF" If Response = ("=000000" + Chr(13)) Then bSlewingUp_Dec = False Else bSlewingUp_Dec = True End If End If '*********************** End of getting a reliable home index signal ********************************* '*********************** Move the axis to a negative position *********************** ' RA If Not bSlewingUp_RA Then ' Set slewing mode SerialPort1.Write(":G131" + Chr(13)) ' Negative high speed slewing Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Set slewing speed, use maximum speed SerialPort1.Write(":I1060000" + Chr(13)) Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Start slewing SerialPort1.Write(":J1" + Chr(13)) Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Wait home position index change Do SerialPort1.Write(":q1000000" + Chr(13)) Response = ReadResponse(WaitResponseTime) ' It should return "=FFFFFF" before it changes Loop Until (Response <> ("=FFFFFF" + Chr(13))) Threading.Thread.Sleep(3000) ' Slew 3 seconds more to get a reliable home position index signal ' Stop slewing SerialPort1.Write(":K1" + Chr(13)) Response = ReadResponse(WaitResponseTime) ' It should return "=" ' RA Do SerialPort1.Write(":f1" + Chr(13)) ' Check status Response = ReadResponse(WaitResponseTime) ' It should return "=nnn" Loop Until (Response.Chars(2) = "0") ' Reset home position index SerialPort1.Write(":W1080000" + Chr(13)) ' Constant speed slewing Response = ReadResponse(WaitResponseTime) ' It should return "=" ' We know that the axis is at a negative position now. bSlewingUp_RA = True End If ' Dec If Not bSlewingUp_Dec Then ' Set slewing mode SerialPort1.Write(":G231" + Chr(13)) ' Negative high speed slewing Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Set slewing speed, use maximum speed SerialPort1.Write(":I2060000" + Chr(13)) Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Start slewing SerialPort1.Write(":J2" + Chr(13)) Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Wait home position index change Do SerialPort1.Write(":q2000000" + Chr(13)) Response = ReadResponse(WaitResponseTime) ' It should return "=FFFFFF" before it changes Loop Until (Response <> ("=FFFFFF" + Chr(13))) Threading.Thread.Sleep(3000) ' Slew 3 seconds more to get a reliable home position index signal ' Stop slewing SerialPort1.Write(":K2" + Chr(13)) Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Dec Do SerialPort1.Write(":f2" + Chr(13)) ' Check status Response = ReadResponse(WaitResponseTime) ' It should return "=nnn" Loop Until (Response.Chars(2) = "0") ' Reset home position index SerialPort1.Write(":W2080000" + Chr(13)) ' Constant speed slewing Response = ReadResponse(WaitResponseTime) ' It should return "=" ' We know that the axis is at a negative position now. bSlewingUp_Dec = True End If '*********************** End of Moving the axis to a negative position *********************** ' ********************** Find the home position index ************************* ' RA ' Set slewing mode SerialPort1.Write(":G130" + Chr(13)) ' Positive high speed slewing Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Set slewing speed, use maximum speed SerialPort1.Write(":I1060000" + Chr(13)) Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Start slewing SerialPort1.Write(":J1" + Chr(13)) Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Dec ' Set slewing mode SerialPort1.Write(":G230" + Chr(13)) ' Positiove high speed slewing Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Set slewing speed, use maximum speed SerialPort1.Write(":I2060000" + Chr(13)) Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Start slewing SerialPort1.Write(":J2" + Chr(13)) Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Wait home position index change bIndexChanged_RA = False bIndexChanged_Dec = False sHomeIndexPosition_Dec = "" sHomeIndexPosition_RA = "" Do If Not bIndexChanged_RA Then SerialPort1.Write(":q1000000" + Chr(13)) Response = ReadResponse(WaitResponseTime) ' It should return "=000000" before it changes If Response <> ("=000000" + Chr(13)) Then bIndexChanged_RA = True iPosition_RA = HexStrToInteger(Response) sHomeIndexPosition_RA = Response.Substring(1, 6) ' Stop slewing SerialPort1.Write(":K1" + Chr(13)) Response = ReadResponse(WaitResponseTime) ' It should return "=" End If End If If Not bIndexChanged_Dec Then SerialPort1.Write(":q2000000" + Chr(13)) Response = ReadResponse(WaitResponseTime) ' It should return "=000000" before it changes If Response <> ("=000000" + Chr(13)) Then bIndexChanged_Dec = True iPosition_Dec = HexStrToInteger(Response) sHomeIndexPosition_Dec = Response.Substring(1, 6) ' Stop slewing SerialPort1.Write(":K2" + Chr(13)) Response = ReadResponse(WaitResponseTime) ' It should return "=" End If End If Loop Until (bIndexChanged_Dec And bIndexChanged_RA) ' Wait until both axis stops ' RA Do SerialPort1.Write(":f1" + Chr(13)) ' Check status Response = ReadResponse(WaitResponseTime) ' It should return "=nnn" Loop Until (Response.Chars(2) = "0") ' Dec Do SerialPort1.Write(":f2" + Chr(13)) ' Check status Response = ReadResponse(WaitResponseTime) ' It should return "=nnn" Loop Until (Response.Chars(2) = "0") ' ********************** End of finding the home position index *************** ' ********************** Move back *************************** ' Set slewing mode ' RA SerialPort1.Write(":G100" + Chr(13)) ' Goto a position Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Dec SerialPort1.Write(":G200" + Chr(13)) ' Goto a position Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Calculate target position, try to move further away from home position in this stage ' RA iChanges = 10.0 / 360.0 * StepsPerRevolution_RA ' Move 10 degree back iPosition_RA = iPosition_RA - iChanges ' iPosition_RA stores home position index ' Dec iChanges = 10.0 / 360.0 * StepsPerRevolution_Dec iPosition_Dec = iPosition_Dec - iChanges ' iPosition_Dec stores home position index ' Set target position ' RA SerialPort1.Write(":S1" + IntegerToHexStr(iPosition_RA) + Chr(13)) ' Set target position Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Dec SerialPort1.Write(":S2" + IntegerToHexStr(iPosition_Dec) + Chr(13)) ' Set target position Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Start slewing ' RA SerialPort1.Write(":J1" + Chr(13)) Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Dec SerialPort1.Write(":J2" + Chr(13)) Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Wait until both axis stops ' RA Do SerialPort1.Write(":f1" + Chr(13)) ' Check status Response = ReadResponse(WaitResponseTime) ' It should return "=nnn" Loop Until (Response.Chars(2) = "0") ' Dec Do SerialPort1.Write(":f2" + Chr(13)) ' Check status Response = ReadResponse(WaitResponseTime) ' It should return "=nnn" Loop Until (Response.Chars(2) = "0") ' ********************** End Moving back ********************* ' ********************** Goto home position *************************** ' Set slewing mode ' RA SerialPort1.Write(":G100" + Chr(13)) ' Goto a position Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Dec SerialPort1.Write(":G200" + Chr(13)) ' Goto a position Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Set target position ' RA SerialPort1.Write(":S1" + sHomeIndexPosition_RA + Chr(13)) ' Set target position Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Dec SerialPort1.Write(":S2" + sHomeIndexPosition_Dec + Chr(13)) ' Set target position Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Start slewing ' RA SerialPort1.Write(":J1" + Chr(13)) Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Dec SerialPort1.Write(":J2" + Chr(13)) Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Wait until both axis stops ' RA Do SerialPort1.Write(":f1" + Chr(13)) ' Check status Response = ReadResponse(WaitResponseTime) ' It should return "=nnn" Loop Until (Response.Chars(2) = "0") ' Dec Do SerialPort1.Write(":f2" + Chr(13)) ' Check status Response = ReadResponse(WaitResponseTime) ' It should return "=nnn" Loop Until (Response.Chars(2) = "0") ' ********************** End Auto-Homing ********************* ' ********************** Reset mount positions ***************** SerialPort1.Write(":E1000080" + Chr(13)) ' 0 Degree Response = ReadResponse(WaitResponseTime) ' It should return "=nnn" SerialPort1.Write(":E2" + IntegerToHexStr(StepsPerRevolution_Dec / 4 + &H800000) + Chr(13)) ' 90 Degree, there is an offset of &H800000. Response = ReadResponse(WaitResponseTime) ' It should return "=nnn" ' ********************** End reseting mount positions ********** ' Calculate parking position fParkingPosition_HA = Convert.ToDecimal(tbHA.Text) ' Get user input fParkingPosition_Dec = Convert.ToDecimal(tbDec.Text) ' Get user input iParkingPosition_RA = (fParkingPosition_HA + 90.0) / 360.0 * StepsPerRevolution_RA + &H800000 ' RA axis position is 0 degree when HA = -90 degree (in the case of observing in northen hemisphere) iParkingPosition_Dec = fParkingPosition_Dec / 360.0 * StepsPerRevolution_Dec + &H800000 ' There is an offset of &H800000 for the position used by the motor controller ' ********************** Move back if necessary *************************** If fParkingPosition_HA < -90 Then ' Set slewing mode ' RA SerialPort1.Write(":G100" + Chr(13)) ' Goto a position Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Calculate target position, try to move to a position lower than the parking position ' RA iChanges = 10.0 / 360.0 * StepsPerRevolution_RA ' Move 10 degree back iPosition_RA = iParkingPosition_RA - iChanges ' Set target position ' RA SerialPort1.Write(":S1" + IntegerToHexStr(iPosition_RA) + Chr(13)) ' Set target position Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Start slewing ' RA SerialPort1.Write(":J1" + Chr(13)) Response = ReadResponse(WaitResponseTime) ' It should return "=" End If If fParkingPosition_Dec < 90 Then ' Set slewing mode ' RA SerialPort1.Write(":G200" + Chr(13)) ' Goto a position Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Calculate target position, try to move to a position lower than the parking position ' RA iChanges = 10.0 / 360.0 * StepsPerRevolution_RA ' Move 10 degree back iPosition_Dec = iParkingPosition_Dec - iChanges ' Set target position ' RA SerialPort1.Write(":S2" + IntegerToHexStr(iPosition_Dec) + Chr(13)) ' Set target position Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Start slewing ' RA SerialPort1.Write(":J2" + Chr(13)) Response = ReadResponse(WaitResponseTime) ' It should return "=" End If ' Wait until both axis stops ' RA Do SerialPort1.Write(":f1" + Chr(13)) ' Check status Response = ReadResponse(WaitResponseTime) ' It should return "=nnn" Loop Until (Response.Chars(2) = "0") ' Dec Do SerialPort1.Write(":f2" + Chr(13)) ' Check status Response = ReadResponse(WaitResponseTime) ' It should return "=nnn" Loop Until (Response.Chars(2) = "0") ' ********************** End Moving back ********************* ' ********************** Slew to parking position *************************** ' Set slewing mode ' RA SerialPort1.Write(":G100" + Chr(13)) ' Goto a position Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Dec SerialPort1.Write(":G200" + Chr(13)) ' Goto a position Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Set target position ' RA SerialPort1.Write(":S1" + IntegerToHexStr(iParkingPosition_RA) + Chr(13)) ' Set target position Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Dec SerialPort1.Write(":S2" + IntegerToHexStr(iParkingPosition_Dec) + Chr(13)) ' Set target position Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Start slewing ' RA SerialPort1.Write(":J1" + Chr(13)) Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Dec SerialPort1.Write(":J2" + Chr(13)) Response = ReadResponse(WaitResponseTime) ' It should return "=" ' Wait until both axis stops ' RA Do SerialPort1.Write(":f1" + Chr(13)) ' Check status Response = ReadResponse(WaitResponseTime) ' It should return "=nnn" Loop Until (Response.Chars(2) = "0") ' Dec Do SerialPort1.Write(":f2" + Chr(13)) ' Check status Response = ReadResponse(WaitResponseTime) ' It should return "=nnn" Loop Until (Response.Chars(2) = "0") ' ********************** End Moving to Park Position ******************** SerialPort1.Close() lbAutoHome.Text = "Done" End Sub Private Sub btTestConnection_Click(sender As Object, e As EventArgs) Handles btTestConnection.Click Dim Response, sVersion As String Dim iVersion As Integer SerialPort1.PortName = "COM" + tbPortNumber.Text SerialPort1.Open() sVersion = "" SerialPort1.Write(":e1" + Chr(13)) ' Check status Response = ReadResponse(WaitResponseTime) ' It should return "=nnnnnn" If Response <> "" Then iVersion = HexStrToInteger(Response) sVersion = "MC Version R.A.= " + Convert.ToString(Int(iVersion Mod 256)) + "." + Convert.ToString(Int((iVersion / 256) Mod 256)) + "." + Convert.ToString(iVersion >> 16) lbVersion.Text = sVersion sVersion = sVersion + " " SerialPort1.Write(":e2" + Chr(13)) ' Check status Response = ReadResponse(WaitResponseTime) ' It should return "=nnnnnn" iVersion = HexStrToInteger(Response) sVersion = sVersion + "Dec. = " + Convert.ToString(Int(iVersion Mod 256)) + "." + Convert.ToString(Int((iVersion / 256) Mod 256)) + "." + Convert.ToString(iVersion >> 16) lbVersion.Text = sVersion btTurnOn.Enabled = True btTurnOff.Enabled = True btAutoHome.Enabled = True End If SerialPort1.Close() End Sub End Class