Re: PUMOTIX – вопросы и ответы по системе ЧПУ
Добавлено: 15 мар 2023, 19:39
)))
Статьи, обзоры, цены на станки и комплектующие.
https://www.cnc-club.ru/forum/
Можно поподробнее, что такое "подтяжка" и куда её вешать? В концевик 3 провода приходят - земля, плюс и сигнальный. Сигнальный, соответственно, на один из пинов платы расширения приходит. Видимо, на него предлагаете повесить резистор? Последовательно, в разрыв провода? Ну, ок, но как оно всё работало тогда уже года 2 или чуть больше без дополнений всяких, непонятно... Саппорт подозревает неисправность платы, пока посоветовал перетыкнуть в приход концевика в свободный порт платы. Сделал, даже дважды, каждый раз тестируя результат. Ничего не поменялось, как фантомно и рандомно срабатывал концевик, так и срабатывает. Стабильность
Код: Выделить всё
require("Common")
function m6()
if (GetToolSlot() == GetSelectedToolSlot()) then
return
end
local stage = GetStage()
if (stage == 0) then
m6start()
SetStage(1, true, true)
Stop()
return
elseif (stage == 1) then
m6end()
SetStage(0, false, false)
return
end
end
function m6start()
savedDistanceMode = GetCurrentDistanceMode()
savedMotionMode = GetCurrentMotionMode()
savedSpindleRPM = SpindleGetCurRPM()
savedFeed = GetGCodeFeedrate()
if (not IsAxesMaskReferenced(tonumber("0x7"))) then
DisplayMessage("Do homing first!!!")
Stop()
return
end
if (not IsProbingPinConfigured()) then
DisplayMessage("Probing not configured!!! Do it first!!!")
Stop()
return
end
local toolSlot = GetSelectedToolSlot()
local previousToolSlot = GetToolSlot()
if ( toolSlot == 0 and previousToolSlot == 0) then
DisplayMessage("Nothing to put!!!")
Stop()
return
end
savedPos = {}
for i = Axis.X, Axis.W do
savedPos[i] = AxisGetMachinePos(i)
end
GotoSafeZ()
if (not SafeSpindleStop()) then
DisplayMessage("Spindle did not stop at "..str(10000).." sec! or stop signal not found!!!!")
Stop()
return
end
local toolchangePos = {}
for i = Axis.X, Axis.W do
toolchangePos[i] = GetGeneralToolchangePosition(i)
end
ExecuteMDI("G53 G1 X"..toolchangePos[Axis.X].." Y"..toolchangePos[Axis.Y].." F5000")
end
function m6end()
local toolSlot = GetSelectedToolSlot()
--Sleep(3000)
Sleep(5000)
PinSetState(Outputs.UserOutput_5, true) -- blow job on
PinSetState(Outputs.UserOutput_4, true) -- change job on
if (not WaitForPinState(Inputs.UserInput_12, true, 500)) then
DisplayMessage("Tool release on Spindle not working! Turn air pump On dude...")
PinSetState(Outputs.UserOutput_4, false) -- change job off
PinSetState(Outputs.UserOutput_5, false) -- blow job off
return
end
if (not WaitForPinState(Inputs.UserInput_13, false, 500)) then
DisplayMessage("Tool on Spindle found! It must be 0")
PinSetState(Outputs.UserOutput_4, false) -- change job off
PinSetState(Outputs.UserOutput_5, false) -- blow job off
return
end
Sleep(5000)
PinSetState(Outputs.UserOutput_4, false) -- change job off
PinSetState(Outputs.UserOutput_5, false) -- blow job off
if (not WaitForPinState(Inputs.UserInput_12, false, 500)) then
DisplayMessage("Tool tighten on Spindle not working! Turn air pump On dude...")
return
end
if (PinGetState(Inputs.Probing) or PinGetState(Inputs.Probing2)) then
DisplayMessage("Probe input is already active")
Stop()
return
end
Sleep(1000)
if (toolSlot ~= 0) then
if (not WaitForPinState(Inputs.UserInput_13, true, 500)) then
DisplayMessage("Tool on Spindle not found as signals spindle show! It must be 1")
Stop()
return
end
ExecuteMDI("G90 G53 G1 Z-100 F2000")
local ProbeLim = 190
local ProbingMaximum = AxisGetPos(Axis.Z) - ProbeLim
local ProbeFeedFast = GetGeneralProbeFeed()
ProbeFeedFast = 1000
local ProbeFeedSlow = ProbeFeedFast / 10
ExecuteMDI("G90 G38.2 Z"..str(ProbingMaximum).." F"..ProbeFeedFast)
local Raise = AxisGetPos(Axis.Z) + 5
ExecuteMDI("G90 G1 Z"..str(Raise).."F"..ProbeFeedFast)
ExecuteMDI("G90 G38.2 Z"..str(ProbingMaximum).." F"..ProbeFeedSlow)
ExecuteMDI("G92 Z"..GetNumUserValue(10))
GotoSafeZ()
end
ExecuteMDI("G53 G90 G1 X"..str(savedPos[Axis.X]).." Y"..str(savedPos[Axis.Y]).." F5000")
SetToolSlot(toolSlot)
if (savedSpindleRPM > 0) then
SpindleStartCW()
end
ExecuteMDI("F"..savedFeed)
if (savedDistanceMode ~= GetCurrentDistanceMode()) then
if (savedDistanceMode == DistanceMode.Abs) then
ExecuteMDI("G90")
else
ExecuteMDI("G91")
end
end
if (savedMotionMode ~= GetCurrentMotionMode()) then
SetCurrentMotionMode(savedMotionMode)
end
end
Они вернулись в своё привычное конченое состояние скорее, был период в несколько лет, когда они охотно сотрудничали с клиентами. Сейчас просто сто лет форума ихнего нет уже, на котором можно было оценить все масштабы их деятельности в первые годы, хотя где нибудь в вэб архиве эта бомба наверное лежит.
К счастью немного помогли, хоть и не без косяков, прислали недоступную в инструкциях команду, хоть и не рабочую (хотя как они утверждают, что сами ей пользуются), но немного подкорректировав, все получилось.Argentum47 писал(а): ↑18 янв 2024, 08:03Они вернулись в своё привычное конченое состояние скорее, был период в несколько лет, когда они охотно сотрудничали с клиентами. Сейчас просто сто лет форума ихнего нет уже, на котором можно было оценить все масштабы их деятельности в первые годы, хотя где нибудь в вэб архиве эта бомба наверное лежит.
забыл добавить функции, которые я использовал, мало ли их не хватило из Common.pm
Код: Выделить всё
function GotoSafeZ()
PushCurrentDistanceMode()
PushCurrentMotionMode()
local SafeZ = GetGeneralSafeZ()
local SafeZMode = GetSafeZMode()
if (SafeZMode == SafeZModes.Machine) then
if (AxisGetMachinePos(Axis.Z) < SafeZ) then
ExecuteMDI("G90 G53 G01 Z"..SafeZ.." F1000")
end
end
end
-- Ожидание сигнала на указанном входе с заданным состоянием в течение заданного тайм-аута
function WaitForPinState(input, desired_state, time_ms)
local finish_time = GetSystemTickCount() + time_ms
while (GetSystemTickCount() < finish_time and PinGetState(input) ~= desired_state) do
Sleep(50)
end
return (PinGetState(input) == desired_state)
end
function SafeSpindleStop()
local sleepingTime = 0
if (not PinGetState( Inputs.UserInput_7 )) then
SpindleStop()
if (not WaitForPinState(Inputs.UserInput_7, true, 10000)) then
DisplayMessage("Spindle can't stoped safetly!")
return false
end
end
return true
end
Благодарю.rry писал(а): ↑18 янв 2024, 13:51забыл добавить функции, которые я использовал, мало ли их не хватило из Common.pm
Код: Выделить всё
function GotoSafeZ() PushCurrentDistanceMode() PushCurrentMotionMode() local SafeZ = GetGeneralSafeZ() local SafeZMode = GetSafeZMode() if (SafeZMode == SafeZModes.Machine) then if (AxisGetMachinePos(Axis.Z) < SafeZ) then ExecuteMDI("G90 G53 G01 Z"..SafeZ.." F1000") end end end -- Ожидание сигнала на указанном входе с заданным состоянием в течение заданного тайм-аута function WaitForPinState(input, desired_state, time_ms) local finish_time = GetSystemTickCount() + time_ms while (GetSystemTickCount() < finish_time and PinGetState(input) ~= desired_state) do Sleep(50) end return (PinGetState(input) == desired_state) end function SafeSpindleStop() local sleepingTime = 0 if (not PinGetState( Inputs.UserInput_7 )) then SpindleStop() if (not WaitForPinState(Inputs.UserInput_7, true, 10000)) then DisplayMessage("Spindle can't stoped safetly!") return false end end return true end
Пойдут? Стоит у меня с пометкой "эта"Argentum47 писал(а): ↑ У кого нибудь есть пара версий предшествующих текущей?
Спасибо большое.