
Inicialmente, planejei me limitar a dois posts (
um ,
dois ) sobre minhas experiências com o CNC. Mas, o tópico acabou sendo interessante para muitos, portanto, ainda estou revelando um pouco. Neste post, falaremos sobre a criação de software caseiro para o controle de CNC amador.
Prefácio
Não sei se consegui motivar alguém com as primeiras postagens, mas alguns comentários eu próprio dei uma boa reflexão. Agradecimentos
especiais a
@evilruff pela foto de seu
laboratório e pelo vídeo com um
coreano legal . Depois de assistir a ambos, meu porta-luvas no porão não parecia mais tão aconchegante.
Reunindo forças, no fim de semana, ele trouxe algo que lembra vagamente a ordem e finalmente fez duas coisas que ele faria metade de um ano atrás.
Primeiro, ele substituiu um pedaço de madeira compensada que servia de mesa de sacrifício. Usei esse compensado desde o momento da compra da máquina, aparafusando peças em branco com parafusos e construindo todo tipo de desenhos malucos a partir de paus e cunhas. Tudo para que a peça não entre em um vôo imprevisível durante a fresagem.
Talvez alguém precise de um golpe na vida: eles fizeram uma nova mesa com uma tábua de deck de plástico (vendida em Castorama):

Aparafusou as tábuas diretamente na mesa nativa de alumínio. O bônus foram ranhuras convenientes para os grampos da peça de trabalho e a rápida instalação da mesa de enchimento. Tudo sobre tudo levou algumas horas e ~ 1100r.
Em segundo lugar, finalmente, ele escreveu um software mais ou menos utilizável para gerenciar funções CNC não padronizadas. Esta será a história principal.
Declaração do problema
O código G para as operações descritas na
segunda parte é o mais simples. No entanto, o próprio processo de instalação não pode ser chamado rapidamente.
Como isso aconteceu
Por exemplo, para o aditivo, era necessário: conhecer a largura do painel, calcular quantos furos deveriam ter, calcular a distância exata entre eles, criar um arquivo, escrever o código g, carregá-lo no Mach3. Tudo isso leva, na melhor das hipóteses, cerca de 15 a 20 minutos.Neste sentido, as vantagens de uma máquina digital são significativamente diminuídas em comparação com uma ferramenta manual, que ao mesmo tempo pode fazer vários buracos.
O que eu queria conseguir
No caso do mesmo aditivo, eu queria obter um programa em que, em uma interface muito simples, inserisse a largura e a espessura do painel e pressione o botão para iniciar o processo de perfuração do número desejado de furos de preenchimento na mesma distância um do outro.
Procure uma solução
A primeira coisa que veio à mente foi escrever um programa autônomo que interagisse diretamente com uma porta paralela. Uma rápida pesquisa no Google mostrou que a tarefa de escrever para o lpt é bastante solucionável, mas o diabo, como você sabe, está escondido em detalhes. Com um estudo mais aprofundado da questão, percebi que você pode ficar preso aqui a sério e por um longo tempo. Além disso, essa solução não seria flexível: para outra máquina, por exemplo, com USB, não funcionaria.
Havia uma opção para lidar com o Mach3 SDK. No processo de coleta de informações sobre a criação de mach-plugins, me deparei com uma solução interessante. Ele descreveu como, usando os mecanismos OLE, você pode obter o Mach3 de um aplicativo de terceiros. Não sou especialista em tecnologias da Microsoft, mas depois de visualizar a diagonal de um manual no Mach3 SDK, se entendi corretamente a idéia principal, não há uma bala de prata, os plugins usam os mesmos métodos públicos dos objetos COM do Mach3. Como eu não iria redesenhar a interface do Mach3, a única diferença para o usuário entre o plug-in e o aplicativo autônomo é que o plug-in é acessível no menu do Mach3 e o aplicativo através do ícone na área de trabalho do XP.
Um aplicativo separado parecia preferível para mim. Nesse caso, teoricamente, eu poderia iniciar imediatamente meu programa depois de carregar o computador, que carregaria o Mach3 com uma locomotiva a vapor (em vez de carregar o Mach3 primeiro e depois procurar no menu para iniciar o plug-in).
Pegue um sabre
A última vez que tive que escrever um aplicativo de desktop nativo para Windows foi em um ano, em 2006, e no Delphi. Desde então, as tecnologias da web com o Linux me consumiram completamente. Portanto, agora eu não tinha preferências particulares em qual idioma esculpir um programa do Windows. O exemplo simples encontrado foi escrito em C #, esse idioma foi escolhido como um coelho experimental.
Não publicarei todo o código do aplicativo resultante aqui (se desejar, você pode encontrá-lo no github usando o link na parte inferior do post). Vou explicar as coisas básicas. Todas as experiências que fiz em uma máquina virtual com WinXP SP3, VS 2003 e Mach3 versão R3.043.062. Para quem acredita que é melhor ver o
link para o vídeo no Youtube uma vez, o que eu entendi. Abaixo está uma transcrição dos destaques.
Preparação
- Para o Visual Studio coletar corretamente o componente Mach3, ele deve estar registrado corretamente no registro. Para fazer isso, baixe o arquivo Mach3Registry.reg
- Inicie o Mach3Registry.reg
- Iniciamos o VS, criamos o projeto de um aplicativo de janela em C #
- No bloco Solution Explorer, clique com o botão direito do mouse em References, selecione Add Reference no menu. Na janela que se abre, clique em Procurar e procure por Mach3.exe

Se tudo estiver correto, uma linha deve aparecer na lista de Referências, que pensaria que o Mach4 ... - 5. Em seguida, desenhe a interface do usuário, desligue os manipuladores, implemente os algoritmos ...
Interação com Mach3
Conectamos as bibliotecas necessárias, declaramos variáveis (Form1.cs)
... using System.Runtime.InteropServices; using Mach4;
Uso:
GetMachInstance();
Os códigos dos botões e dos valores dos parâmetros podem ser visualizados no wiki:
OEM_DROs e
OEM_Buttons (eles não possuem um wiki, os valores dos parâmetros não são exibidos na tabela,
consulte a guia "View source").
A primeira versão do programa funcionou assim: de acordo com os parâmetros definidos, o código g foi gerado, quadro a quadro (isto é, linha a linha), executado pelo método
_mInst.Code . E esse foi o meu erro. Em um ambiente de depuração em uma máquina virtual, tudo funcionou bem. No Mach3, os números corretos nas coordenadas foram executados. Mas houve problemas ao transferir para um computador de máquina. O carro se moveu corretamente, mas o eixo-árvore não ligou.
Parece que o gerenciamento do roteador e do eixo em Mach funciona em diferentes segmentos. Verificou-se que os comandos de movimento (G ...) foram executados sequencialmente quando chegaram ao método _mInst.Code em um thread e os comandos de controle do eixo (M3, M5), independentemente do primeiro, foram executados em outro segmento. Como resultado, o eixo-árvore ligou (M3) e desligou-se imediatamente (M5), enquanto movia o carro seguia seu curso normal.
Tentei opções diferentes, atrasos conectados, tentei conduzir todo o controle do código g em uma linha e enviá-lo em uma única peça para _mInst.Code. Como resultado, decidi pela solução “na testa”: simplesmente conduzo o código gerado em um arquivo, abro esse arquivo programaticamente no Mach3 e pressiono o botão “Iniciar” programaticamente. Trecho de código de trabalho:
_mInst.LoadFile("C:\\tmp\\gcode.txt"); System.Threading.Thread.Sleep(2000); _mInst.DoOEMButton(1000);
É necessária uma pausa entre o download de um arquivo e o pressionamento de um botão para que Mach abra o arquivo. Talvez haja alguma maneira mais elegante. Se alguém souber, escreva nos comentários.
Um bônus adicional desta solução é que agora você pode observar a visualização do processo de processamento na interface Mach.
O que finalmente aconteceu
Além disso, em poucas palavras, sobre a aplicação resultante. Separadamente, falarei sobre a interface do usuário para cada operação.
Cut

Tudo é bem transparente aqui. O parâmetro S é necessário para compensar o tamanho L se a peça de trabalho não estiver fixa no ponto zero ao longo de X (ou ao longo de Y ao cortar).
Aditivo
Para aditivo, são possíveis 2 configurações de encaixe. O primeiro com um moedor para perfurar furos finais. E o segundo com o fuso usual para perfurar o plano da blindagem (por algum motivo eu o chamei de "aditivo frontal").
Face aditiva

Com o aditivo final, é importante definir com precisão zero no canto inferior direito da peça de trabalho (eu tenho o ângulo do batente lateral e a mesa lá). Com uma broca na madeira, isso não é difícil de fazer - há uma ponta afiada que você precisa para entrar neste canto. Fixando a peça sobre a mesa, eu apenas a coloco na broca.
Sem alterar o equipamento da mesma maneira, faço furos recíprocos fixando a peça na vertical:
O parâmetro X é necessário para conectar painéis de larguras diferentes (por exemplo, quando os painéis inferior e superior do gabinete são mais largos que os painéis laterais pela espessura das portas).
Aditivo frontal

O equipamento para a frente é um eixo regular. Esse tipo de aditivo é usado quando você precisa fazer furos em uma superfície horizontal, não apenas ao longo das bordas, mas também em algum lugar no meio. Por exemplo, se houver vários compartimentos no gabinete e além das paredes laterais, existem internos. Se o painel for maior que o comprimento da máquina, o aditivo poderá ser fabricado em 2 conjuntos com uma rotação de 180 graus da peça. Nesse caso, o parâmetro X também é útil.
Torneamento

Para mim, a principal dificuldade na preparação de um código-G com um caminho de viragem não era exagerar na profundidade máxima de imersão do disco. O fato é que, na saída do Inkscape, uma linha é obtida e o giro ocorre em uma passagem. Por causa disso, tive que criar um código separado para cilindrar a peça de trabalho e somente depois disso a passagem principal que criou o formulário foi lançada. E havia algumas restrições nesse formulário. Em particular, era necessário garantir que a trajetória não fosse muito profunda. Tentei não exceder 10 - 15 mm do nível do cilindro original.
Todos esses problemas foram resolvidos no novo programa. Funciona assim: carregue o código g “bruto” obtido no Inkscape, defina o tamanho da lateral da barra da peça de trabalho e indique a profundidade máxima de processamento em 1 passagem (quanto mais dura a madeira, menor será essa profundidade). Com base no código-fonte e nos parâmetros-fonte, o programa calcula um caminho seguro e o envia ao CNC.
Planos futuros
O programa simplificou bastante a rotina, mas ainda está longe de ser perfeita. Em primeiro lugar, será necessário otimizar o algoritmo para a perfuração de furos profundos (a broca está entupida de cavacos e superaquecimentos, é necessário girar para frente e para trás). Em segundo lugar, surgiu a idéia de criar uma biblioteca de formas de transformação. I.e. várias formas padrão (como cilindro, cone, rolo etc.) com a capacidade de ajustar dimensões sem a necessidade de criar trajetórias em programas de terceiros.
Referências
→
Mach3Registry.reg→
Mach3 SDK e outros programas→
Repositório do projeto no Github (peço desculpas ao sharpoviks por batentes arquitetônicos com antecedência - este é o meu primeiro programa em C #).