Rui grande trabalho, eu gostei!
Ao escrever um programa paramétrico, precisa considerar o comando em uso. Você notou, depois de várias tentativas, as diferenças entre os vários CNC.
Eu gostaria de reiterar algumas coisas que podem ajudar os outros utilizando a paramétrica. Fanuc, mc2, Mach3, usbcnc são alguns controles que foram mencionados. Escrevendo uma rotina paramétrica a logica é a mesma para todos os comandos, o que muda é o interpretador básico: eu vou explicar. (Vou examinar o Fanuc e usbcnc)
- Funções. Estas dependem do comando, podemos utilizar, se não existe uma função não podemos fazer nada.
- Símbolos. Cada função é representada por uma palavra ou por um símbolo alfanumérico. Estes não são iguais em todos os comandos, em seguida, temos de ajustar ao tipo em uso. Escrever #1LT#2 em um controle usbcnc não garante que funcione pois o símbolo usado pelo usbcnc é o seguinte (<).
Portanto, embora a lógica seja igual, os símbolos pertencem a cada comando.
- A mais importante diferencia (eu acho) é a atribuição, que cria muitos problemas. (#1 = #2 + #3) Esta expressão está correta ou errada?
Querendo por o valor de [#2+#3] na #1 o interprete do comando age de forma diferente.
Para Fanuc não é um erro pois interpreta a escrita assim: tudo o que fica na direita do símbolo = vai ser atribuído à variável ou expressão que fica à esquerda.
Usb interpreta de maneira diferente: antes vai ser executada a expressão
#1=#2 a qual vai ser usada e depois vai ter a suma com #3.
Então você precisa usar parênteses para obter o mesmo resultado do Fanuc.
Em todas as expressões é bom usar parênteses (como na matemática) para obter o resultado que queremos.
Rui, o seu primeiro programa por isso não rodava por falta de conhecimento do interprete de cada comando.
Experimentando você o descobriu!
Análise do programa Gear3.0.cnc
Há alguns aspectos que gostaria de enfatizar, escrevo sem ordem de preferência.
X [#106 * -1]
quando você quer usar um valor negativo ou oposto, você pode prefixar a variável usando o simbolo (-), fica mais fácil de entender e escrever X [-#106]
G2 X [# 104 * -1] Y0 R [# 104] (meio círculo inferior dar furo central)
G2 X [# 104] Y0 R [# 104] (semi-círculo do furo central superior)
a expressão de um círculo pode ser feita com uma única linha de código
G2 X#104 I#104
Em geral, a fórmula é a seguinte G2/G3 X I ou G2/G3 Y J dependendo do ponto de partida do círculo (X ou Y). Todos os comandos deveriam aceitar esta forma, fazem parte do G-code.
#113 = [[#102/2] - #111] (Raio do do Pé) (Raio primitivo - "a")
#114 = [[#102/2] + #112] (Cabeça de Raio) (Raio primitivo + "d")
Eu acho que as expressões estão erradas: não deve ser d> a? então
#113 = [[#102/2] - #112] (Raio do do Pé) (Raio primitivo - "d")
#114 = [[#102/2] + #111] (Cabeça de Raio) (Raio primitivo + "a")
Penso assim porque a garantia que não há nenhuma fricção entre as engrenagens esta no fato de ser d>a.
A primeira parte do programa pode ser melhorada.
Posicionamentos diferentes não ajudam, a execução de um perfil deve exigir o mínimo de movimento, às vezes é melhor executar várias operações em
vez de usar apenas uma ferramenta por exemplo, uma perfuração e um perfil.
Um dos seus problemas é o uso da compensação de raio (que gerou o post, mas não encontrou uma solução adequada ).
Se você não a usa é obrigado a repetir o programa cada vez que mudar de ferramentas ou mudar o perfil.
Esta função é muito poderosa e importante, lamento que você não a usa.
Eu noto que no “hobby” geralmente está trascurada, talvez porque não se conhece ou talvez porque usa-se sistemas CAM. Trabalho todos os dias com compensação de raio, se não houvesse seria um grande problema. Compensação permite a substituição rápida de ferramentas sem recalcular o perfil.
Um aspecto importante é a introdução de uma rotina capaz de realizar passadas em z. Você não pode pensar em remover todo o material de uma só vez.
O procedimento mais simples é escrever um duplo loop: um loop para a descida em Z, outro para o perfil.
while[ condição loop ] (loop Z)
while[ condição loop] (loop perfil)
perfil
endwhile(fim loop perfil)
endwhile(fim loop Z)
#140=5
while[#140<>0]
------
while[#130<360]
perfil
endwhile(fim perfil)
----( condição de retorno )
endwhile
Você terá que mudar algumas linhas de código, mas vale a pena
Quando eu escrevo programas paramétricos sempre tento separar a parte de cálculo pelo movimento real, porque eu nunca sei qual será o comportamento do CNC, quer dizer, evitar desaceleração inesperada devido ao cálculo o que pode deixar a peça marcada. Eu diria uma coisa semelhante
while[#130<360]
#130=[#130+#125] (cálculo dos ângulos)
#131=[#130+#119-#125]
#132=[#131+#118]
#133=[#132+#123]
#134=[#133+#118]
#135=[#134+#119-#125]
#136=[#135+#125]
#137=[#136+#124]
G2X[#116*cos[#130]]Y[#116*sin[#130]]R[#121]
G3X[#117*cos[#131]]Y[#117*sin[#131]]R[#113]
G1X[#114*cos[#132]]Y[#114*sin[#132]]
G3X[#114*cos[#133]]Y[#114*sin[#133]]R[#114]
G1X[#117*cos[#134]]Y[#117*sin[#134]]
G3X[#116*cos[#135]]Y[#116*sin[#135]]R[#113]
G2X[#113*cos[#136]]Y[#113*sin[#136]]R[#121]
G3X[#113*cos[#137]]Y[#113*sin[#137]]R[#113]
#130=#137 (restaurar a condição primitiva)
endwhile
Um aspecto pouco considerado por aqueles que criam programas paramétricos é a análise de erros, esperados e inesperados.
É importante introduzir uma linhas para avaliar possíveis erros. Por exemplo, pode controlar o número de dentes mínimo que a rotina pode realizar.
Você pode verificar se a ferramenta em uso permite que você execute o perfil. Muitas vezes pensamos ter escrito um excelente programa, alguém tenta executá-lo obtendo falha, um fracasso, e não porque o programa não funciona, mas porque foi usado incorretamente (porque nós o permitimos).
Com uma análise de erro adequada seu programa será melhor: você pode controlar tudo!
A entrada da fresa para a execução do perfil não está correta. E' melhor entrar do lado do perfil, realizar uma abordagem de interpolação circular, o que garante uma usinagem sem problemas. Deste jeito você não terá nenhum problema de descida ou controle ferramenta .
Eu vou parar agora. Li com atenção o seu programa achei muito bom, e com algumas mudanças tornar-se grande. Minha análise (espero seja de ajuda) não quer diminuir o seu trabalho. Estas são apenas sugestões de quem gosta de escrever programas. Obrigado por compartilhar suas experiências com todos nós e mais uma vez: excelente trabalho.
Eu analisei o programa considerando apenas o aspecto da programação. E' natural que, na realidade, deve ser considerada uma série de fatores reais que podem levar a determinadas escolhas. Fazer engrenagens exige um estudo específico, consideram-se muitos outros fatores.
Claro, se queremos construir jogos para crianças podemos desconsiderar os aspectos técnicos que podem restringir o nosso trabalho.
Então eu só quis analisar um programa sem considerar a realidade.
Eu realmente gosto da ideia de estimular a criatividade de crianças usando engrenagens: você quer nos dizer mais?