Guia CNC Brasil - Tudo sobre CNC, Router, Laser, Torno e 3D Print

SOFTWARES => Controle => Mach 2/3 => Tópico iniciado por: Biosp em 24 de Março de 2010, 11:13

Título: Mach automatico
Enviado por: Biosp em 24 de Março de 2010, 11:13
Quero repetir o mesmo desenho (relevo) em diversas posições. Para isso eu teria que zerar os eixos “X” e “Y” em determinados pontos e executar o desenho a partir dali.  Estou fazendo isso mas manualmente, eu gostaria de executar isso automaticamente.
Não consigo me lembrar quem me disse que no Mach 3 era possível fazer isso automático!
Caso não seja possível no Mach, alguém poderia me ajudar com o “G-CODE” ” que devo usar para zerar determinado eixo em determinada linha de comando durante  execução do programa?

Obrigado,

BioSP

PS.  Parabéns mestre Gilii pela representação do MACH.  “ Agora Vai”  ;)
Título: Re: Mach automatico
Enviado por: F.Gilii em 24 de Março de 2010, 11:39
Biosp,

A maioria dos programas de controle de máquinas pode usar determinados pontos chamados "pontos de fixação" e que são controlados por uma tabela criada pelo operador.

Cada ponto desta tabela é tratado como uma origem de desenho, e se usa o sistema de coordenadas absolutas em relação ao "ponto de Origem Máquina" = G53.
 Se me recordo, é possível usar até 254 pontos diferentes, começando por G55 (até G59) e depois G59.1 até G59.254.

Cada ponto de origem pode ser tratado como uma chamada dentro do programa de corte que é inserida logo no começo do arquivo de corte.

Para automatizar a coisa, é necessário conhecer as coordenadas dos pontos de fixação e o tipo de usinagem para poder apontar alguma solução, seja por macro, sensoriamento automático, seja por variáveis ou subrotinas em arquivo.
Título: Re: Mach automatico
Enviado por: Biosp em 24 de Março de 2010, 13:15
Sem querer abusar do Mestre, .... Vc poderia me mostrar um exemplo pratico da utilização destas “subrotinas” para que eu tente fazer algum teste aqui ?
Em madeira de 100X100mm fiz um quadrado de 50x50mm conforme abaixo:
M3
G0X0.000Y0.000S1500 0
G0X25.000Y25.000Z25 .000
G1Z-2.000F780.0
G1X75.000Y25.000F25 20.0
Y75.000
X25.000
Y25.000
G0Z25.000
G0X0.000Y0.000
G0Z25.000
G0X0.000Y0.000
M30
Utilizando essa recorte acima, como eu poderia repetir  5 vezes  ao longo de uma chapa de 600X100. Utilizando uma subrotina ou algo assim ?

Obrigado.
Título: Re: Mach automatico
Enviado por: F.Gilii em 24 de Março de 2010, 16:32
Biosp,

O exemplo abaixo usa uma simples rotina de repetição (G52) - não é programação parametrizada nem usa o sistema de coordenadas de fixações.

M3 F500
G52 X0
M98 P01
G52 X 50
M98 P01
G52 X 100
M98 P01
G52 X 150
M98 P01
G52 X 200
M98 P01
G52 Z0
G00 Z25
M30

O1
G0X25.000Y25.000Z25 .000
G1Z-2.000F780.0
G1 X75.000 Y25.000 F2520
Y75.000
X25.000
Y25.000
G0Z25.000
M99

Note que seu programa está depois da chamada "O1" (Letra "O" e não zero )

Seu quadrado vai ser repetido a incrementos de 50mm a cada chamada M98

Mais tarde tento fazer um exemplo de programação parametrizada.
Título: Re: Mach automatico
Enviado por: Biosp em 24 de Março de 2010, 21:26
Entendi o conceito e é exatamente o que eu procuro, porém não dei conta de executar essa sub rotina no Mach3 , ele não reconhece os “PO1”  ... Alias nem o código G52  eu localizei no  manual do G-CODE.
No Mach3 em “Configuraçõe/Tabela de Trabalho – G54 a G59/  ............. é possível marcar alguma posições do eixo que quero mudar e funciona ele vai lá e muda, porém eu tenho que escrever o programa todinho a partir dessa “bendita linha”  .... e o que eu queria era uma sub rotina para eu não ter que ficar repetindo todo o processo N Vezes  ..... igualzinho a que vc descreveu, mas que funcione no Mach 3.
Gilii obrigado por estar respondendo minhas duvidas.

BioSP
Título: Re: Mach automatico
Enviado por: F.Gilii em 25 de Março de 2010, 07:40
... ele não reconhece os “PO1”  ...
Provavelmente porque voce escreveu PO1  e não P01 ... O Nome da Subrotina é O1, mas a chamada é P01 (pode escrever P1 também)
É preciso também uma linha em branco (CR) no final do arquivo, logo depois do M99

Citar
Alias nem o código G52  eu localizei no  manual do G-CODE.
Está no manual - pág 93

Citar
.... igualzinho a que vc descreveu, mas que funcione no Mach 3.
E funciona - experimente

Este exemplo que eu escreví faz 5 quadrados um do lado do outro, deslocados apenas em X 50mm.
Título: Re: Mach automatico
Enviado por: Biosp em 25 de Março de 2010, 11:53
Perfeito, funcionou!!!
Estava trocando "zero" por "oh"   ;D

Vou testar na pratica agora.

Obrigado
Título: Re: Mach automatico
Enviado por: marc0 em 25 de Março de 2010, 16:19
Fábio;
Com poucas chamadas dá pra editar manualmente as posições, mas quando se necessita usar dezenas ou centenas de vezes a mesma rotina, fica mais complicado.

Criei uma macro para gerar o código com todas as posições (X e Y) equidistantes configuradas pra X e para Y; vc sabe como se faz para inserir o esse código junto com a rotina?

Abraços...
Título: Re: Mach automatico
Enviado por: F.Gilii em 25 de Março de 2010, 17:30
Enoch,

Eu estou estudando um pouco esse assunto, então me perdoe se o que eu apresento é meio primário ou talvez não a melhor solução...

Eu pensei em fazer uma rotina chamando outra rotina.

Olhe o exemplo anexo: (repete o quadrado 5 vezes no mesmo lugar)
Código: [Selecionar]
O1000
(programa principal)
G00 X0 Y0 Z25
M98 P1001 L5 (<= executa subprograma 1001 por 5 vezes)
M30

O1001
(subprograma)
G0X25.000Y25.000Z25.000
G1Z-2.000F780.0
G1 X75.000 Y25.000 F2520
Y75.000
X25.000
Y25.000
G0Z25.000
M99
O programa principal chama o subprograma a quantidade que for inserida depois da palavra L*

Acredito que fazer o quadrado repetido na distancia desejada é questão de mesclar as técnicas, ou talvez usando algumas variáveis para X e Y...
Título: Re: Mach automatico
Enviado por: F.Gilii em 25 de Março de 2010, 17:51
Criei uma macro para gerar o código com todas as posições (X e Y) equidistantes configuradas pra X e para Y; vc sabe como se faz para inserir o esse código junto com a rotina?
Estas posições são as coordenadas da peça ou de uma operação (por exemplo "furar")

Teria como postar um exemplo do código e da sua macro?
Título: Re: Mach automatico
Enviado por: marc0 em 25 de Março de 2010, 19:32
Estas posições são as coordenadas da peça ou de uma operação (por exemplo "furar")
Pode ser de um furo ou um uma peça completa com muitos detalhes.
Eu tomei por base os quadrados do seu exemplo anterior, vc escreveu manualmente as coordenadas para chamar o quadrado,; a macro edita as coordenadas quantas vezes for necessário.
Acontece que ao editar o "write.tap" eu perco a rotina (fico só com o código das posições; eu queria unir os dois arquivos.

Citar
Teria como postar um exemplo do código e da sua macro?

Código: [Selecionar]
M3 F500
M5000
M30

O1
G0X25.000Y25.000Z25 .000
G1Z-2.000F780.0
G1 X75.000 Y25.000 F2520
Y75.000
X25.000
Y25.000
G0Z25.000
M99

M5000.m1s

Código: [Selecionar]
'***********************************
'**  Macro for mult-position CNC  **
'**         Experimental          **
'** Mult-P v0.01 - ECM 25/03/2010 **
'***********************************

X = InputBox ("Repetições em X")
XX = Abs(X)
If XX < 1 Then
 XX = 1
  MsgBox ("Valor Ilegal! Considerado = 1")
End If

DX = InputBox ("Espaçamento em X")
DXX = Abs(DX)
If DXX < 1 Then
 DXX = 1
  MsgBox ("Valor Ilegal! Considerado = 1")
End If

Y = InputBox ("Linhas em Y")
YY = Abs(Y)
If YY < 1 Then
 YY = 1
 MsgBox ("Valor Ilegal! Considerado = 1")
End If

DY = InputBox ("Espaçamento em Y")
DYY = Abs(DY)
If DYY < 1 Then
 DYY = 1
 MsgBox ("Valor Ilegal! Considerado = 1")
End If



OpenTeachFile "write.tap"

Code "Y0"
YD=DYY
For I=1 To YY
XD=0
For K=1 To XX
Code "G52 X"&XD
Code "M98 P1"
XD=XD+DXX
Next
Code "G52 Y"&YD
 
YD=YD+DYY
Next
Code "M30"
               
CloseTeachFile()
Call LoadTeachFile()
Título: Re: Mach automatico
Enviado por: F.Gilii em 26 de Março de 2010, 08:40
Enoch,

Eu fiz um arremedo de código que parece funcionar, mas há algumas restrições:
- O arquivo deve terminar com o comando "M99" no final, e deve se dar uma linha de espaço.
- O arquivo deve estar aberto na tela antes de rodar a macro

A macro - é uma adaptação do seu código, e deve funcionar melhor se dermos uma limpada nele.

Código: [Selecionar]
'***********************************
'**  Macro for mult-position CNC  **
'**         Experimental          **
'** Mult-P v0.01 - ECM 25/03/2010 **
'***********************************

File = Filename()

X = InputBox ("Repetições em X")
XX = Abs(X)
If XX < 1 Then
 XX = 1
  MsgBox ("Valor Ilegal! Considerado = 1")
End If

DX = InputBox ("Espaçamento em X")
DXX = Abs(DX)
If DXX < 1 Then
 DXX = 1
  MsgBox ("Valor Ilegal! Considerado = 1")
End If

Y = InputBox ("Linhas em Y")
YY = Abs(Y)
If YY < 1 Then
 YY = 1
 MsgBox ("Valor Ilegal! Considerado = 1")
End If

DY = InputBox ("Espaçamento em Y")
DYY = Abs(DY)
If DYY < 1 Then
 DYY = 1
 MsgBox ("Valor Ilegal! Considerado = 1")
End If

XTimes = XX
YTimes = YY
XInc = DXX
YInc = DYY
CurX = GetDRO(0)
CurY = GetDRO(1)
CurZ = GetDRO(2)
SafeZ = GetSafeZ()


OpenTeachFile( "1.tap" )


For y = 1 To YTimes Step 1
  For x = 1 To XTimes Step 1
    If (x > 1) Then
    code "G92 X0"
    End If
    code "M98(" & "-" & File & ")"
    code "G0 Z" & SafeZ
    If x < Xtimes Then
    code "G0 X" & XInc & " Y0"
    Else
    code "G0 X0 Y0"
    End If
  Next
    code "G92 X" & (Xinc * (Xtimes - 1))
    If y < Ytimes Then
    code "G0 X0 Y" & YInc
    code "G92 Y0"
    Else
    code "G92 Y" & (Yinc * (Ytimes - 1))
    code "G0 X0 Y0"
    End If
Next       
    code "M30"

CloseTeachFile
Call LoadTeachFile()
Note que o arquivo final ficará gravado como " 1.tap " na pasta de arquivosd Gcode do Mach3.

Eu sei que dá para fazer uma rotina de gravar um nome (Save as) desse novo arquivo gerado, mas preciso refinar o código porque não ficou consistente da maneira que eu fiz...
Título: Re: Mach automatico
Enviado por: marc0 em 26 de Março de 2010, 09:36
Fábio;
Desculpe a tosquice do "código" anterior. O importante é adquirir o conceito, eu não sei nada de VB, estou me valendo do pouco que lembro do Basic de 30 anos atrás.
Tentei usar a sua macro chamando ela no Gcode (M5000); entrou num looping infinito; curiosamente no editor Vb do Mach ela rodou.
Acho que esta no caminho...
Abraços...
Título: Re: Mach automatico
Enviado por: F.Gilii em 26 de Março de 2010, 09:50
Enoch,

Eu não sei nada de VB e meu BASIC é muito primário também...

Eu só testei este código no editor VB e funcionou, mas confesso que não experimentei como macro...

Eu lí que há uns comandos para VB que manipulam os arquivos:

OpenTeachFile, OpenSubroutineFile, AppendTeachFile

O segundo comando (Subroutine) tem informações desencontradas e não são claras.

O terceiro comando -= AppendTeachFile faz mais ou menos o que voce quer, mas o que eu entendí é que ele adiciona comandos a um arquivo aberto.

A sintaxe seria mais ou menos assim:

AppendTeachFile
Code "G01 X..."
Code "....."

Assim se adicionam linhas de código ao arquivo aberto, mas creio que só no tal "TeachFile" que deveria estar aberto na chamada "OpenTeachFile "1.tap" (por exemplo)

Não consegui fazer funcionar de outra forma.
Tentei adicionar um arquivo depois de outro, e o máximo que eu consegui foi anexar um arquivo gerado com as variáveis de repetição depois da parte de subrotina, e deveria ser o contrário (que não consegui)

Se souber de alguma novidade te lafo
Título: Re: Mach automatico
Enviado por: marc0 em 26 de Março de 2010, 17:06
Fábio;
Acho que consegui  ;)

Para usar precisar colocar o arquivo que se deseja fresar na pasta Subroutines no diretório do Mach3 e colocar M99 no final do código G.

Agora só falta acertar a perfumaria.


Código: [Selecionar]
'***********************************
'**  Macro for mult-position CNC  **
'**         Experimental          **
'**      Mult-P v0.02 - ECM       **
'**         26/03/2010            **
'***********************************

A$= InputBox ("Arquivo para fresar")
X = InputBox ("Repetições em X")
XX = Abs(X)
If XX < 1 Then
 XX = 1
  MsgBox ("Valor Ilegal! Considerado = 1")
End If

DX = InputBox ("Espaçamento em X")
DXX = Abs(DX)
If DXX < 1 Then
 DXX = 1
  MsgBox ("Valor Ilegal! Considerado = 1")
End If

Y = InputBox ("Linhas em Y")
YY = Abs(Y)
If YY < 1 Then
 YY = 1
 MsgBox ("Valor Ilegal! Considerado = 1")
End If

DY = InputBox ("Espaçamento em Y")
DYY = Abs(DY)
If DYY < 1 Then
 DYY = 1
 MsgBox ("Valor Ilegal! Considerado = 1")
End If

OpenTeachFile "writhe.tap"
XD=0
YD=0
Code "G0 X0 Y0 Z0"
For I=1 To YY
For K=1 To XX
Code "G52 X"&XD &"Y"&YD
Code "M98 ("&A$ &")"
XD=XD+DXX
Next
YD=YD+DYY
XD=0
Next
Code "G52 X0 Y0 Z0"
Code "G0 X0 Y0 Z0"
Code "M30"

CloseTeachFile()
Call LoadTeachFile()

Abraços...
Título: Re: Mach automatico
Enviado por: marc0 em 26 de Março de 2010, 18:44
Exemplo do uso:

Fresar arquivo de um pato:
Fazer 30 peças .

[attach=1]
[attach=2]
Título: Re: Mach automatico
Enviado por: F.Gilii em 26 de Março de 2010, 19:31
Enoch,

Ficou interessante, pois é parecido com a idéia que eu postei.

Só não entendí porque o arquivo a ser usado precisa estar na pasta subrotinas, já que não houve nenhuma chamada de uma subrotina.

Bem, o que interessa é que resolveu um problema...

Eu quero ver se me acerto com este VB, porque percebo que é muito potente mesmo, e pode ser muito bem aproveitado para resolver casos como este.
Título: Re: Mach automatico
Enviado por: marc0 em 27 de Março de 2010, 09:55
Fábio;

A Macro cria um código G que trata o arquivo principal, no caso o pato (pato.tap), como uma subrotina, usei a função [M98 (pato.tap)]; no caso direto (com a rotina no mesmo código G) a chamada necessita auxilio de "P e O"; no caso de chamar um arquivo externo (considerado uma rotina) a característica do Mach necessita que essa rotina esteja na pasta "Subroutine" e precisa adicionar no final a instrução de retorno (M99) substituindo M30. Desconheço alguma função que poderia chamar uma subrotina num diretório diferente.

Código G,  gerado pela macro no exemplo anterior:

Código: [Selecionar]
G0 X0 Y0 Z0
G52 X0Y0
M98 (pato.tap) ; (chama a subrotina)
G52 X2Y0
M98 (pato.tap)
G52 X4Y0
M98 (pato.tap)
G52 X6Y0
M98 (pato.tap)
G52 X8Y0
M98 (pato.tap)
G52 X10Y0
M98 (pato.tap)
G52 X0Y1
M98 (pato.tap)
G52 X2Y1
M98 (pato.tap)
G52 X4Y1
M98 (pato.tap)
G52 X6Y1
M98 (pato.tap)
G52 X8Y1
M98 (pato.tap)
G52 X10Y1
M98 (pato.tap)
G52 X0Y2
M98 (pato.tap)
G52 X2Y2
M98 (pato.tap)
G52 X4Y2
M98 (pato.tap)
G52 X6Y2
M98 (pato.tap)
G52 X8Y2
M98 (pato.tap)
G52 X10Y2
M98 (pato.tap)
G52 X0Y3
M98 (pato.tap)
G52 X2Y3
M98 (pato.tap)
G52 X4Y3
M98 (pato.tap)
G52 X6Y3
M98 (pato.tap)
G52 X8Y3
M98 (pato.tap)
G52 X10Y3
M98 (pato.tap)
G52 X0Y4
M98 (pato.tap)
G52 X2Y4
M98 (pato.tap)
G52 X4Y4
M98 (pato.tap)
G52 X6Y4
M98 (pato.tap)
G52 X8Y4
M98 (pato.tap)
G52 X10Y4
M98 (pato.tap)
G52 X0 Y0 Z0 ; (anula os efeitos de G52)
G0 X0 Y0 Z0
M30

Abraços...