Page 1 of 1
Homing
Posted: Thu Mar 07, 2019 2:27 pm
by garytom
Hello
Could anyone assist me in implementing homing sequence for a 2 axis machine,
Version of Kflop 1.2 ,Kmotion434, PC VB example Dynomotion dotNet
I have written code for reading corresponding bits of each axis and if high proximity sensor is activated.
Regards
Gary
Re: Homing
Posted: Thu Mar 07, 2019 5:50 pm
by Moray
Can you post what code you've already written?
Re: Homing
Posted: Thu Mar 07, 2019 8:05 pm
by garytom
Hello Moray
Thanks for reply
I have only got to stage of reading state of bits
VB.net Form Code:
Public Sub HomeMotors()
If updating = False Then ' Move X and Y motors to proximity sensors
SendCommand = (String.Format("MoveXYZABC" & " " & "-50.0 -50.0 0.0 0.0 0.0 0.0"))
device.ProcessCommandXY(SendCommand)
SendCommand = ""
End If
End Sub
Private Sub btnHome_Click(sender As Object, e As EventArgs) Handles btnHome.Click
btnRight.Enabled = False
btnUp.Enabled = False
btnDown.Enabled = False
btnLeftDownNudge.Enabled = False
btnRightUpNudge.Enabled = False
btnLeft.Enabled = False
btnLeftUpNudge.Enabled = False
btnDownRightNudge.Enabled = False
btnZDown.Enabled = False
btnZUp.Enabled = False
HomeMotors()
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
updating = True
device.UpdateValues()
XPosition.Text = Format(Val(device.XPosition), "0.00")
YPosition.Text = Format(Val(device.YPosition), "0.00")
' ZPosition.Text = Format(Val(device.ZPosition), "0.00")
If device.XPosition = 0 AndAlso device.YPosition = 0 Then
btnRight.Enabled = True
btnUp.Enabled = True
btnDown.Enabled = True
btnLeftDownNudge.Enabled = True
btnRightUpNudge.Enabled = True
btnLeft.Enabled = True
btnLeftUpNudge.Enabled = True
btnDownRightNudge.Enabled = True
btnZDown.Enabled = True
btnZUp.Enabled = True
End If
txtXPulses.Text = device.XPosition * 12.78
txtYPulses.Text = device.YPosition * 12.78
chkEnableX.Checked = device.XEnabled
chkEnableY.Checked = device.YEnabled
' chkEnableZ.Checked = device.ZEnabled
If MovingXAxis Then
responseX = device.ResponseX
End If
If MovingYAxis Then
responseY = device.ResponseY
End If
If device.ReadBit4 = True Then ' X axis bit4 state
ChkLimitX.CheckState = CheckState.Checked
Else
ChkLimitX.CheckState = CheckState.Unchecked
End If
If device.ReadBit5 = True Then ' Y axis bit5 state
ChkLimitY.CheckState = CheckState.Checked
Else
ChkLimitY.CheckState = CheckState.Unchecked
End If
updating = False
' draw rectangle shape
If rubberBanding Then
Panel1.Invalidate()
End If
End Sub
-----------------------------------------------------------------------------------------------------------
Public Class DynoMotionVBnetProvider code:
Public Sub UpdateValues()
' check if the board is available
If (_Controller.WaitToken(100) = KMotion_dotNet.KMOTION_TOKEN.KMOTION_LOCKED) Then
_Controller.ReleaseToken()
Try
_XPosition = Convert.ToDouble(_Controller.WriteLineReadLine("Dest0") / _Controller.CoordMotion.MotionParams.CountsPerInchX) * 25.4
_YPosition = Convert.ToDouble(_Controller.WriteLineReadLine("Dest1") / _Controller.CoordMotion.MotionParams.CountsPerInchY) * 25.4
'_ZPosition = Convert.ToDouble(_Controller.WriteLineReadLine("Dest2") / _Controller.CoordMotion.MotionParams.CountsPerInchZ)* 25.4
_ResponseX = _Controller.WriteLineReadLine("CheckDone0")
_ResponseY = _Controller.WriteLineReadLine("CheckDone1")
_ResponseXY = _Controller.WriteLineReadLine("CheckDoneXYZABC")
_XEnabled = Convert.ToDouble(_Controller.WriteLineReadLine("Enabled0"))
_YEnabled = Convert.ToDouble(_Controller.WriteLineReadLine("Enabled1"))
' _ZEnabled = Convert.ToDouble(_Controller.WriteLineReadLine("Enabled2"))
_ReadBit0 = Convert.ToDouble(_Controller.WriteLineReadLine("ReadBit0")) ' laser
_ReadBit1 = Convert.ToDouble(_Controller.WriteLineReadLine("ReadBit1")) 'sandblaster
_ReadBit2 = Convert.ToDouble(_Controller.WriteLineReadLine("ReadBit2")) ' vacuum
_ReadBit4 = Convert.ToDouble(_Controller.WriteLineReadLine("ReadBit4")) ' X Axis homing
_ReadBit5 = Convert.ToDouble(_Controller.WriteLineReadLine("ReadBit5")) ' Y Axis homing
Catch ex As KMotion_dotNet.DMException
MessageBox.Show(ex.InnerException.Message(), "Dynomotion")
End Try
End If
End Sub
Public Sub ProcessCommandXY(ByVal sCommand As String)
WriteLineException(sCommand)
End Sub
Re: Homing
Posted: Thu Mar 07, 2019 9:21 pm
by Moray
I've just realised you posted in the User PC Apps forum.
You'll need to do the actual homing routine using a C program, as the lag between PC and KFlop is to slow to detect bit changes quickly (IIRC it's around 10Hz), unless you run homing at a very slow speed.
Easiest option is to create a couple basic C programs that you download and run depending on axis being homed, and have them set a couple virtual bits once homing is complete, and have your PC app monitor the virtual bits so it knows when homing is complete.
Re: Homing
Posted: Thu Mar 07, 2019 9:36 pm
by TomKerekes
Hi Gary,
You might also see the SimpleHomeIndexFunctionTest.c example.
Re: Homing
Posted: Thu Mar 07, 2019 10:29 pm
by garytom
Hello Moray
Thanks for your help
Regards
Gary
Re: Homing
Posted: Fri Mar 08, 2019 12:17 am
by garytom
Hello Tom
Thank you for reply, i have taken a look at file.
I only have basic knowledge of vb.net.
as file is c code how do i use file within vb.net program or do i need to convert c file to vb.net?
please excuse my lack of understanding
Regards
Gary
Re: Homing
Posted: Fri Mar 08, 2019 2:37 am
by TomKerekes
Hi Gary,
Any homing program needs to be written in C and executed in KFLOP.
You can debug the program using KMotion.exe C Program Screen. Then after it is working you can Compile/Load/Run the program in KFLOP with a single function call from your VB.net program to our .NET Library. See
this .NET function.
HTH
Re: Homing
Posted: Fri Mar 08, 2019 1:07 pm
by garytom
Hello Tom
Thanks for your help.
Regards
Gary