Hello Guest it is March 28, 2024, 09:36:02 AM

Author Topic: Mach 3 Turret with ClearPath motor  (Read 772 times)

0 Members and 1 Guest are viewing this topic.

Mach 3 Turret with ClearPath motor
« on: May 31, 2021, 04:06:58 AM »
Hello
I want to make a turret with a ClearPath MCPV motor that gives me the option to select 16 positions that can be controlled by two pins, one Index and one Trigger.
The problem is that on the index pin I need a number of pulses equal to the position I want (Eg. position 6 - 6 pulses), after which a pulse on the trigger pin and the motor executes.
There is the possibility to do this in the script and if so what the script would look like. I know how to output a signal to a script, but I don't know how to give a no. of pulses according to a T code.
You can guide me on how the script should look like.
What is good about this motor is that if you ask for the position it is already in, it does not make any other movement, and the reference it is made at a point of your choice.
Thanks

Offline TPS

*
  •  2,501 2,501
    • View Profile
Re: Mach 3 Turret with ClearPath motor
« Reply #1 on: May 31, 2021, 06:26:51 AM »
soemthing like this might work:

Code: [Select]
Global Const IndexOutput = OUTPUT1
Global Const TriggerOutput = OUTPUT2

Sub Main()
'do 4 pulses
DoPulses 4
End Sub



'subroutine to generate pulses an trigger
Sub DoPulses(Pulses As Integer)
'generate the pluse
For i = 1 To Pulses
ActivateSignal(IndexOutput)
Sleep(200)
DeActivateSignal(IndexOutput)
Sleep(200)
Next i
'generate the trigger
ActivateSignal(TriggerOutput)
Sleep(200)
DeActivateSignal(TriggerOutput)
Sleep(200)

End Sub


anything is possible, just try to do it.
if you find some mistakes, in my bad bavarian english,they are yours.
Re: Mach 3 Turret with ClearPath motor
« Reply #2 on: May 31, 2021, 08:16:59 AM »
Hello
Thanks for the help. If I understood correctly, it's something like that!

Offline TPS

*
  •  2,501 2,501
    • View Profile
Re: Mach 3 Turret with ClearPath motor
« Reply #3 on: May 31, 2021, 08:25:00 AM »
inside M6Start macro you have to read new toolnumber like this:

Code: [Select]
newtool = GetSelectedTool() ' get the newtool

and then:
Code: [Select]
DoPulses newtool
anything is possible, just try to do it.
if you find some mistakes, in my bad bavarian english,they are yours.
Re: Mach 3 Turret with ClearPath motor
« Reply #4 on: June 01, 2021, 12:14:19 PM »
Hello
I am totally overwhelmed by programming in mach3, so I did a test in mach 4 and it works . I leave the code here, maybe someone else needs it.
The code is not complete because in my case the code will run depending on the unlocking and locking of the turret, which means other program lines for inputs.
Code: [Select]
function m6()
local rc = 0;
    --local inst = 0; -- mc.mcGetInstance(mInst)
local inst = mc.mcGetInstance()
local selectedTool = mc.mcToolGetSelected(inst)
selectedTool = math.tointeger(selectedTool)
local currentTool = mc.mcToolGetCurrent(inst)
currentTool = math.tointeger(currentTool)

if selectedTool == currentTool then
mc.mcCntlSetLastError(inst, "Current tool == Selected tool so there is nothing to do")
else

        mc.mcCntlSetLastError(inst, "Change to tool " .. tostring(selectedTool) .. " and press start to continue") --Message at beginning of tool change
--mc.mcCntlToolChangeManual(inst, true) --This will pause the tool change here and wait for a press of cycle start to continue
mc.mcCntlSetLastError(inst, "Current tool == " .. tostring(selectedTool) .. "   Previous Tool == " .. tostring(currentTool)) --Message that shows after Cycle Start
mc.mcToolSetCurrent(inst, selectedTool)

     if selectedTool == 1 then
 
hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 1);
wx.wxMilliSleep(100)

hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 0);

       hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT3); 
       mc.mcSignalSetState(hsig, 0);
       wx.wxMilliSleep(1500)

       hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT3); 
       mc.mcSignalSetState(hsig, 1);
   wx.wxMilliSleep(100)

       hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT3); 
       mc.mcSignalSetState(hsig, 0);

else

    if selectedTool == 2 then
 
hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 1);
wx.wxMilliSleep(50)


hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 0);
wx.wxMilliSleep(50)


hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 1);
wx.wxMilliSleep(50)


hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 0);

       hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT3); 
       mc.mcSignalSetState(hsig, 0);
       wx.wxMilliSleep(1500)

       hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT3); 
       mc.mcSignalSetState(hsig, 1);
   wx.wxMilliSleep(100)

       hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT3); 
       mc.mcSignalSetState(hsig, 0);


else

    if selectedTool == 3 then
 
hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 1);
wx.wxMilliSleep(50)


hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 0);
wx.wxMilliSleep(50)

hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 1);
wx.wxMilliSleep(50)


hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 0);
wx.wxMilliSleep(50)

hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 1);
wx.wxMilliSleep(50)


hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 0);

       hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT3); 
       mc.mcSignalSetState(hsig, 0);
       wx.wxMilliSleep(1500)

       hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT3); 
       mc.mcSignalSetState(hsig, 1);
   wx.wxMilliSleep(100)

       hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT3); 
       mc.mcSignalSetState(hsig, 0);

else

    if selectedTool == 4 then
 
hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 1);
wx.wxMilliSleep(50)


hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 0);
wx.wxMilliSleep(50)

hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 1);
wx.wxMilliSleep(50)

hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 0);
wx.wxMilliSleep(50)

hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 1);
wx.wxMilliSleep(50)


hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 0);
wx.wxMilliSleep(50)


hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 1);
wx.wxMilliSleep(50)


hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 0);

       hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT3); 
       mc.mcSignalSetState(hsig, 0);
       wx.wxMilliSleep(1500)

       hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT3); 
       mc.mcSignalSetState(hsig, 1);
   wx.wxMilliSleep(100)

       hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT3); 
       mc.mcSignalSetState(hsig, 0);


else


    if selectedTool == 5 then
 
hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 1);
wx.wxMilliSleep(50)


hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 0);
wx.wxMilliSleep(50)

hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 1);
wx.wxMilliSleep(50)

hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 0);
wx.wxMilliSleep(50)

hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 1);
wx.wxMilliSleep(50)


hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 0);
wx.wxMilliSleep(50)

hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 1);
wx.wxMilliSleep(50)


hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 0);
wx.wxMilliSleep(50)


hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 1);
wx.wxMilliSleep(50)


hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 0);


       hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT3); 
       mc.mcSignalSetState(hsig, 0);
       wx.wxMilliSleep(1500)

       hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT3); 
       mc.mcSignalSetState(hsig, 1);
   wx.wxMilliSleep(100)

       hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT3); 
       mc.mcSignalSetState(hsig, 0);

else


       if selectedTool == 6 then
 
hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 1);
wx.wxMilliSleep(50)


hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 0);
wx.wxMilliSleep(50)

hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 1);
wx.wxMilliSleep(50)

hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 0);
wx.wxMilliSleep(50)

hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 1);
wx.wxMilliSleep(50)


hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 0);
wx.wxMilliSleep(50)

hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 1);
wx.wxMilliSleep(50)


hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 0);
wx.wxMilliSleep(50)

hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 1);
wx.wxMilliSleep(50)


hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 0);
wx.wxMilliSleep(50)


hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 1);
wx.wxMilliSleep(50)


hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 0);

       hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT3); 
       mc.mcSignalSetState(hsig, 0);
       wx.wxMilliSleep(1500)

       hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT3); 
       mc.mcSignalSetState(hsig, 1);
   wx.wxMilliSleep(100)

       hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT3); 
       mc.mcSignalSetState(hsig, 0);


else


    if selectedTool == 7 then
 
hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 1);
wx.wxMilliSleep(50)


hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 0);
wx.wxMilliSleep(50)

hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 1);
wx.wxMilliSleep(50)

hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 0);
wx.wxMilliSleep(50)

hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 1);
wx.wxMilliSleep(50)


hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 0);
wx.wxMilliSleep(50)

hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 1);
wx.wxMilliSleep(50)


hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 0);
wx.wxMilliSleep(50)

hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 1);
wx.wxMilliSleep(50)


hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 0);
wx.wxMilliSleep(50)

hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 1);
wx.wxMilliSleep(50)


hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 0);
wx.wxMilliSleep(50)


hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 1);
wx.wxMilliSleep(50)


hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 0);


       hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT3); 
       mc.mcSignalSetState(hsig, 0);
       wx.wxMilliSleep(1500)

       hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT3); 
       mc.mcSignalSetState(hsig, 1);
   wx.wxMilliSleep(100)

       hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT3); 
       mc.mcSignalSetState(hsig, 0);

else


  if selectedTool == 8 then
 
hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 1);
wx.wxMilliSleep(50)


hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 0);
wx.wxMilliSleep(50)

hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 1);
wx.wxMilliSleep(50)

hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 0);
wx.wxMilliSleep(50)

hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 1);
wx.wxMilliSleep(50)


hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 0);
wx.wxMilliSleep(50)

hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 1);
wx.wxMilliSleep(50)


hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 0);
wx.wxMilliSleep(50)

hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 1);
wx.wxMilliSleep(50)


hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 0);
wx.wxMilliSleep(50)

hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 1);
wx.wxMilliSleep(50)


hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 0);
wx.wxMilliSleep(50)


hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 1);
wx.wxMilliSleep(50)


hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 0);
wx.wxMilliSleep(50)


hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 1);
wx.wxMilliSleep(50)


hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2); 
mc.mcSignalSetState(hsig, 0);


       hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT3); 
       mc.mcSignalSetState(hsig, 0);
       wx.wxMilliSleep(1500)

       hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT3); 
       mc.mcSignalSetState(hsig, 1);
   wx.wxMilliSleep(100)

       hsig, rc = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT3); 
       mc.mcSignalSetState(hsig, 0);




--Remove this line if you would not like the Z axis to move
--mc.mcCntlGcodeExecute(inst, "G90 G53 G0 Z0.0");--Move the Z axis all the way up
--mc.mcCntlSetLastError(inst, "Change to tool " .. tostring(selectedTool) .. " and press start to continue") --Message at beginning of tool change
--mc.mcCntlToolChangeManual(inst, true) --This will pause the tool change here and wait for a press of cycle start to continue
--mc.mcCntlSetLastError(inst, "Current tool == " .. tostring(selectedTool) .. "   Previous Tool == " .. tostring(currentTool)) --Message that shows after Cycle Start
--mc.mcToolSetCurrent(inst, selectedTool)
end
end
end
end
end
end
end
end
end 
end

if (mc.mcInEditor() == 1) then
m6()
end

I'm missing something with the script in mach 3 because he doesn't like anything I write. It is clear that I need more help!