Guia CNC Brasil - Tudo sobre CNC, Router, Laser, Torno e 3D Print
SOFTWARES => Controle => Mach 2/3 => Tópico iniciado por: niomar em 08 de Agosto de 2013, 08:13
-
Bom dia,
Estou com problema gostaria de saber se alguém pode me ajudar.
Estou fazendo uma troca de ferramenta, estou com trocador pronto, é um trocador que rotacional e posiciona a ferramenta sempre na mesma posição para trocar.
Oque preciso, é definir a macro M6 para ir para posição segura, depois enviar um sinal que está na posição para meu CLP, ai meu trocador recebendo este sinal irá avançar abrir o trocador de ferramenta e enviar um sinal para M6, M6 recebe o sinal e sobe o Z para um posição mais alta, envia um sinal para meu CLP com o numero da ferramenta que é para ser coloca, Exemplo T6 envia 6 pulso, T5 Envia 5 Pulso, depois disto meu CLP fazerá toda troca até chegar na ferramenta determinada e enviara um sinal de volta a M6 que a ferramenta está pronta, M6 precisa baixar o Z e enviar um sinal para meu CLP para fechar trocador, meu CLP fecha trocador e recua magazine, envia um sinal de volta a M6 para finalizar a troca e sub-rotina voltando ao programa.
-
Niomar,
Ainda não tive tempo de ver como se pode fazer a coisa, mas em todo caso posso postar aqui um fragmento de código pára te dar uma luz...
Voce havia dito que precisa habilitar um pino por um certo tempo e depois desabilitar...
Veja o código abaixo:
...
ActivateSignal(OUTPUT3) 'liga o sinal do pino 3 - solta o pino da torre
Code "G4 P0.5" 'pausa de meio segundo
While IsMoving () 'não faça nada até terminar o que estava fazendo
Wend
Code "G00 G91 a" & MoveDis 'codigo para mover alguma coisa num certo sist. coordenadas
While IsMoving () 'não faça nada até terminar o que estava fazendo
Wend
DeActivateSignal(OUTPUT3) 'desliga o sinal do pino 3 - prende o pino da torre
...
Veja que isso é só um fragmento de código - o resto da lógica precisa ser feito, como verificação de posição inicial etc...
-
Este codigo aqui é uma cópia de um ATC tipo RACK - não rotativo...
'ToolChange Macro For Bed type tool changer 11/05 Brian
Sub Main()
OldTool = GetOEMDRO (1200) 'Tool In spindle DRO You must add this to your settings screen
x = GetToolChangeStart( 0 )
y = GetToolChangeStart( 1 )
z = GetToolChangeStart( 2 )
a = GetToolChangeStart( 3 )
b = GetToolChangeStart( 4 )
c = GetToolChangeStart( 5 )
tool = GetSelectedTool()
NewTool = tool
'Tool Changer Macro (Bed Type)
MaxToolNum = 8 'Max number off tools for the changer
ToolDown = -3.125 'Z Pos to Get or drop a tool
ToolUp = 0.0 'Z Hieght to Rapid from tool to tool
If NewTool = OldTool Then
Exit Sub
End If
While NewTool > MaxToolNum
NewTool = Question ("Enter New Tool Number up to " & MaxToolNum)
Wend
Code "G00 G53 Z" & ToolUp
While IsMoving()
Wend
Call MovePos(OldTool)
While IsMoving()
Wend
Code "G53 Z" & ToolDown
Code "G4 P.75"
While IsMoving()
Wend
ActivateSignal(Output1) 'Turn On Draw bar to release the tool
Code "G4 P1.0" 'Wait for the tool to release
'SystemWaitFor (7) 'Wait for the tool Release Limit switch
Code "G53 Z-2.5" & ToolUp
Call MovePos(NewTool)
While IsMoving()
Wend
Code "G53 Z" & ToolDown
Code "G4 P.75"
While IsMoving()
Wend
DeActivateSignal(Output1) 'Turn Off Draw bar to Clamp the tool
Code "G4 P1.0" 'Wait for the tool to Clamp
While IsMoving()
Wend
Code "G53 Z" & ToolUp
Call SetUserDRO (1200,NewTool)
SetCurrentTool( NewTool )
Code "G00 X" & x & " Y" & y 'Move back to where the tool change was prompted
End Sub
Sub MovePos(ByVal ToolNumber As Integer)
Select Case ToolNumber
Case Is = 1
Xpos = 12.00
YPos = 2.00
Case Is = 2
Xpos = 14.00
YPos = 2.00
Case Is = 3
Xpos = 16.00
YPos = 2.00
Case Is = 4
Xpos = 18.00
YPos = 2.00
Case Is = 5
Xpos = 12.00
YPos = 4.00
Case Is = 6
Xpos = 14.00
YPos = 4.00
Case Is = 7
Xpos = 16.00
YPos = 4.00
Case Is = 8
Xpos = 18.00
YPos = 4.00
End Select
Code "G53 X" & XPos & " Y" & YPos
End Sub
Main
-
Bom dia Fabio isto já me ajudou bastante,
Porém necessito de mais algumas informações,
T2 é uma sub-rotina? se é onde fica armazenada?
Como faço para ficar preso dentro de uma sub-rotina esperando um sinal esterno?
-
E este um exemplo de código de ATC rotativo, mas o acionamento é com motor de passo (ou servo) e é encarado como coordenada...
'Macro M6Start
Message""
If GetOEMLed(807) And GetOemLED(808) And GetOemLed(809) And GetOemled(812) Then
MsgBox" 1 or more axis are NOT REFERENCED cancel program and REF XYZC axis"
End
End If
Dim OldTool as Single
Dim NewTool as Single
Dim X as Double
Dim Y as Double
Dim Z as Double
'********************************
OldTool = GetCurrentTool()
NewTool = GetSelectedTool()
If NewTool = OldTool Then
Message" Same Tool, NO ACTION"
End
End If
IF NewTool > 10 OR NewTool < 1 then
MsgBox" Tool # not a valid Number 1-10 ONLY, ENDING Program RUN "
DoButton(3)
End
End If
Code"M09"
SLEEP(4000)
SetDro(17,60) 'SetSpindle Speed
DoSpinCW() 'Start Spindle
While Not Isactive(Index) 'Wait on index signal
Wend
ActivateSignal(OutPut7)
DoSpinStop() 'Stop Spindle
Message" Spindle Stopped"
x = GetUserDRO( 1200 )
y = GetUserDRO( 1201 )
z = GetUserDRO( 1202 )
'******************************
Code"G00"
Code "G53Z" & z
Code "G53X" & x & "Y" & y
While IsMoving()
Wend
Do
ActivateSignal(OutPut1)
If GetUserLED(1005) Then Exit Do
Sleep 10
Loop
Do
ActivateSignal(OutPut3)
If GetUserLED(1002) Then Exit Do
Sleep 10
Loop
ActivateSignal(Output2) 'Turn On Draw bar to release the tool
Code "G4 P2.0" 'Wait for the tool to release
Do
ActivateSignal(OutPut4)
If GetUserLED(1006) Then Exit Do
Sleep 10
Loop
Call MovePos(NewTool) 'The ATC moves to the new tool.
While IsMoving()
Wend
Do
DeactivateSignal(OutPut4)
If GetUserLED(1001) Then Exit Do
Sleep 10
Loop
DeactivateSignal(Output2) 'Turn Off Draw bar to lock the tool
Code "G4 P1.5" 'Wait for the tool to lock
Do
DeactivateSignal(OutPut3)
If GetUserLED(1003) Then Exit Do
Sleep 10
Loop
DeactivateSignal(OutPut7)
Do
DeactivateSignal(OutPut1)
If GetUserLED(1004) Then Exit Do
Sleep 10
Loop
SetOemDro(824,NewTool)
Sub MovePos(ByVal ToolNumber As Integer)
Select Case ToolNumber 'Positions to each tool in C-axis
Case = 1
Code "G00 G53 C0 "
Case = 2
Code "G00 G53 C36 "
Case = 3
Code "G00 G53 C72 "
Case = 4
Code "G00 G53 C108 "
Case = 5
Code "G00 G53 C144 "
Case = 6
Code "G00 G53 C180 "
Case = 7
Code "G00 G53 C216 "
Case = 8
Code "G00 G53 C252 "
Case = 9
Code "G00 G53 C288 "
Case = 10
Code "G00 G53 C324 "
End Select
End Sub
-
T1, T2, Tn... são as chamadas das ferramentas - se fosse usar um ATC tipo Rack, há uma tabela de coordenadas de posição de ferramentas.
Esta mesma tabela possui o Offset em Z de cada uma...
Veja este documento - o exemplo é de umas telas (e macros) personalizadas, mas o que interessa é o conceito
http://www.machmotion.com/manuals/Mach3/Tool%20Setup.pdf (http://www.machmotion.com/manuals/Mach3/Tool%20Setup.pdf)
-
Como faço para ficar preso dentro de uma sub-rotina esperando um sinal esterno?
...
ActivateSignal(Output12) 'ativa algum sinal
While Not IsActive(OEMTRIG3) 'espera por um sinal de confirmação
sleep(100) 'exemplo de espera de tempo
Wend
....
-
Posso Fazer assim?
Select Case ToolNumber
Case Is = 1
ActivateSignal(Output12) 'ativa algum sinal
sleep(100)
DeActivateSignal(OUTPUT12)
sleep(100)
Case Is = 2
ActivateSignal(Output12) 'ativa algum sinal
sleep(100)
DeActivateSignal(OUTPUT12)
sleep(100)
ActivateSignal(Output12) 'ativa algum sinal
sleep(100)
DeActivateSignal(OUTPUT12)
sleep(100)
Case Is = 3
ActivateSignal(Output12) 'ativa algum sinal
sleep(100)
DeActivateSignal(OUTPUT12)
sleep(100)
ActivateSignal(Output12) 'ativa algum sinal
sleep(100)
DeActivateSignal(OUTPUT12)
sleep(100)
ActivateSignal(Output12) 'ativa algum sinal
sleep(100)
DeActivateSignal(OUTPUT12)
sleep(100)
End Select
sleep(100) é um segundo?
While Not IsActive(Input #1) 'POSSO USAR ISTO ASSIM?
-
Select Case ToolNumber
Case = 1
ActivateSignal(Output12) 'ativa algum sinal
sleep(100)
While IsMoving()
Wend
DeActivateSignal(OUTPUT12)
sleep(100)
While IsMoving()
Wend
Case = 2
...
Talvez assim - precisa experimentar e ver se tem erro de sintaxe
-
sleep(100) é um segundo?
While Not IsActive(Input #1) 'POSSO USAR ISTO ASSIM?
-
sleep(100) é um segundo?
depende - se nas configurações gerais o tempo estiver em milissegundos (marcado), isso será equivalente a 0,1 segundos - se estiver desmarcada a opção serão 100 segundos
While Not IsActive(Input #1) 'POSSO USAR ISTO ASSIM?
Creio que pode, mas veja bem - o comando diz "enquanto não estiver ativa a entrada tal, espere..." - é como se fosse uma pausa que depende da entrada - só libera a execução da macro (e continua a executar) até que esta entrada habilite - é outra maneira de fazer uma pausa...
-
É que esta entrada externa que vai me dizer que ta trocado a ferramenta e pronta para trabalhar, outra duvida esta sub-rotina lê por linha também? Ex. Le linha 1 executa le linha 2 Executa?