Re: PUMOTIX – вопросы и ответы по системе ЧПУ
Добавлено: 15 мар 2023, 19:39
				
				)))
			Статьи, обзоры, цены на станки и комплектующие.
https://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 писал(а): ↑ У кого нибудь есть пара версий предшествующих текущей?
Спасибо большое.