Third party software and hardware support forums. > PoKeys

Pwm pokeys57cnc mach4

(1/1)

ptipierre:
hi,

i would like to modify the duty cycle of pwm pins inside a macro and i don't find the way to do it, if someone could post an exemple or give me some advice i'll we be happy

thx

ptipierre:
i'm slowly getting things to work,


--- Code: ---function m6()

local inst = mc.mcGetInstance()

selectedtool = mc.mcToolGetSelected(inst)


currenttool = mc.mcToolGetCurrent(inst)


local signalinv = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2) --deverouillage, contacte relais pour inversion moteur

local signalfait = mc.ISIG_INPUT2

function GetpokReg(regname) -- fonction pour lire le registre du pokeys
local hreg = mc.mcRegGetHandle(inst, string.format("PoKeys_42447/%s", regname))
return mc.mcRegGetValueString(hreg)

end
--regval = GetpokReg("PWM 18 duty")


function WritepokReg(regname, regvalue) -- fonction pour ecrire sur registre pokeys
local hreg = mc.mcRegGetHandle(inst, string.format("PoKeys_42447/%s", regname))
mc.mcRegSetValueString(hreg, tostring(regvalue))

end
--WritepokReg("PWM 18 duty", 25)





mc.mcCntlSetLastError(inst, "Changement demandé "..tostring(currenttool).."a"..tostring(selectedtool))
wx.wxMilliSleep(1000)



if (selectedtool == currenttool)then

mc.mcCntlSetLastError(inst, "inutile")
wx.wxMilliSleep(1000)

--regval = GetpokReg("PWM 18 duty")
--mc.mcCntlSetLastError(inst, regval)
--wx.wxMilliSleep(1000)

end

mc.mcCntlSetLastError(inst, "changement en cour")  -- debut du changement
mc.mcCntlGcodeExecute(inst, "G00 Z-5.0")

mc.mcSignalSetState(signalinv, 1)
WritepokReg("PWM 18 duty", 0.9)


local switchH = mc.mcSignalGetHandle(inst, mc.ISIG_INPUT2)
local switchstate = mc.mcSignalGetState(switchH)


if (switchstate == 1)then --controle de l'état du capteur position tourelle'

mc.mcCntlSetLastError(inst, "degagement capteur")
wx.wxMilliSleep(1000)
local check2 = mc.mcSignalWait(inst,signalfait, mc.WAIT_MODE_LOW,10) --on attend 5 sec max que le capteur soi degagé

if (check2 ~= 0)then --controle degagement capteur arrivé tourelle

mc.mcCntlCycleStop(inst)
mc.mcCntlSetLastError(inst, "Annulé capteur bloqué")
wx.wxMilliSleep(1000)
mc.mcCntlCycleStop(inst)

end

mc.mcCntlSetLastError(inst, "capteur degagé")
wx.wxMilliSleep(1000)

end


mc.mcCntlSetLastError(inst, "en cours attente capteur tourelle")
local check = mc.mcSignalWait(inst,signalfait, mc.WAIT_MODE_HIGH,15) --on attend 15 seconde que le capteur passe a 1

if (check ~= 0)then --controle arrivé en position tourelle
WritepokReg("PWM 18 duty", 0) --le capteur n'est pas passé a 1 pwm et relais au repos/vérouillage
mc.mcSignalSetState(signalinv, 0)
mc.mcCntlSetLastError(inst, "Annulé probleme tourelle")
wx.wxMilliSleep(1000)
mc.mcCntlCycleStop(inst)

else --le capteur est passé a 1 on coupe tout puis repasse le pwm a 30
WritepokReg("PWM 18 duty", 0) -- pour maintenir la tourelle
mc.mcSignalSetState(signalinv, 0)
WritepokReg("PWM 18 duty", 0.3)
mc.mcCntlSetLastError(inst, "changement ok !")
mc.mcToolSetCurrent(inst, selectedtool)
wx.wxMilliSleep(1000)


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

--- End code ---


the pwm is ok but the macro seems to run multiple time at least 2 sometime 3

This macro will be for the emco C 5 cnc atc, output2 control a relay to inverse the dc motor, pin18 pwm drive dcdriver a 90% duty while changing tool, then 30% for the reverse to lock the turret  and input2 is used to check if the turret has moved

ptipierre:

i'm slowly getting things to work,


--- Code: ---function m6()

local inst = mc.mcGetInstance()

selectedtool = mc.mcToolGetSelected(inst)
currenttool = mc.mcToolGetCurrent(inst)

local signalinv = mc.mcSignalGetHandle(inst, mc.OSIG_OUTPUT2) --deverouillage, contacte relais pour inversion moteur
local signalfait = mc.ISIG_INPUT2

function GetpokReg(regname) -- fonction pour lire le registre du pokeys
local hreg = mc.mcRegGetHandle(inst, string.format("PoKeys_42447/%s", regname))
return mc.mcRegGetValueString(hreg)

end
--regval = GetpokReg("PWM 18 duty")


function WritepokReg(regname, regvalue) -- fonction pour ecrire sur registre pokeys
local hreg = mc.mcRegGetHandle(inst, string.format("PoKeys_42447/%s", regname))
mc.mcRegSetValueString(hreg, tostring(regvalue))

end
--WritepokReg("PWM 18 duty", 25)

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



mc.mcCntlSetLastError(inst, "Changement demandé "..tostring(currenttool).."a"..tostring(selectedtool))
wx.wxMilliSleep(1000)



if (selectedtool == currenttool)then

mc.mcCntlSetLastError(inst, "inutile")
wx.wxMilliSleep(1000)

--regval = GetpokReg("PWM 18 duty")
--mc.mcCntlSetLastError(inst, regval)
--wx.wxMilliSleep(1000)

else

mc.mcCntlSetLastError(inst, "changement en cour")  -- debut du changement
mc.mcCntlGcodeExecute(inst, "G00 Z-5.0")

mc.mcSignalSetState(signalinv, 1)
WritepokReg("PWM 18 duty", 0.9)


local switchH = mc.mcSignalGetHandle(inst, mc.ISIG_INPUT2)
local switchstate = mc.mcSignalGetState(switchH)


if (switchstate == 1)then --controle de l'état du capteur position tourelle'

mc.mcCntlSetLastError(inst, "degagement capteur")
wx.wxMilliSleep(1000)
local check2 = mc.mcSignalWait(inst,signalfait, mc.WAIT_MODE_LOW,10) --on attend 5 sec max que le capteur soi degagé

if (check2 ~= 0)then --controle degagement capteur arrivé tourelle

mc.mcCntlCycleStop(inst)
mc.mcCntlSetLastError(inst, "Annulé capteur bloqué")
wx.wxMilliSleep(1000)
mc.mcCntlCycleStop(inst)

end
end

mc.mcCntlSetLastError(inst, "capteur degagé")
wx.wxMilliSleep(1000)




mc.mcCntlSetLastError(inst, "en cours attente capteur tourelle")
local check = mc.mcSignalWait(inst,signalfait, mc.WAIT_MODE_HIGH,15) --on attend 15 seconde que le capteur passe a 1

if (check ~= 0)then --controle arrivé en position tourelle
WritepokReg("PWM 18 duty", 0) --le capteur n'est pas passé a 1 pwm et relais au repos/vérouillage
mc.mcSignalSetState(signalinv, 0)
mc.mcCntlSetLastError(inst, "Annulé probleme tourelle")
wx.wxMilliSleep(1000)
mc.mcCntlCycleStop(inst)


else --le capteur est passé a 1 on coupe tout puis repasse le pwm a 30
WritepokReg("PWM 18 duty", 0) -- pour maintenir la tourelle
mc.mcSignalSetState(signalinv, 0)
WritepokReg("PWM 18 duty", 0.3)
mc.mcCntlSetLastError(inst, "changement ok !")
mc.mcToolSetCurrent(inst, selectedtool)
wx.wxMilliSleep(1000)
end
end
end

--- End code ---


the pwm is ok but the macro seems to run multiple time at least 2 sometime 3

This macro will be for the emco C 5 cnc atc, output2 control a relay to inverse the dc motor, pin18 pwm drive dcdriver a 90% duty while changing tool, then 30% for the reverse to lock the turret  and input2 is used to check if the turret has moved

Navigation

[0] Message Index

Go to full version