Machsupport Forum
Mach Discussion => General Mach Discussion => Topic started by: DanielS 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
-
soemthing like this might work:
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
-
Hello
Thanks for the help. If I understood correctly, it's something like that!
-
inside M6Start macro you have to read new toolnumber like this:
newtool = GetSelectedTool() ' get the newtool
and then:
DoPulses newtool
-
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.
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!