A Linoteck é especializada em aplicações com o LinuxCNC Códigos M Entradas Digitais que controla máquinas CNC. Ele pode controlar fresadoras, tornos, impressoras 3D, cortadores a laser, cortadores a plasma, braços robóticos, hexapods e muito mais.
LinuxCNC Códigos M Entradas Digitais é um sistema de software Linux gratuito e de código aberto que implementa capacidade de controle numérico usando computadores de uso geral para controlar máquinas CNC. Destina-se principalmente à execução em sistemas PC AMD x86-64. A Linoteck presta serviços de programação no LinuxCNC Códigos M Entradas Digitais aplicações em novos projetos e também no retrofit de máquinas
O que é Retrofit de Máquinas?
Retrofit é um termo específico utilizado principalmente em engenharia para designar o processo de modernização de algum equipamento já considerado ultrapassado ou fora de norma, como máquinas. A Linoteck conta com profisssionais altamente qualificados com mais de 25 anos de experiência que tem recursos para atender todo Brasil.
Um exemplo de retrofit é a modificação dos sistemas eletroeletrônicos, hidráulicos ou mecânicos de uma determinada máquina injetora, puncionadeira, sopradora, extrusora e de termoformagem. O Retrofit mais comum, que temos observado, é a troca de comando eletrônico, CLP e IHM.
Exemplo de retrofit: Máquina Puncionadeira Nisshinbo.
Tomando como exemplo uma máquina Puncionadeira, é possível identificar pontos chaves para a tomada de decisão com relação a escolha de um retrofit total, parcial ou até mesmo a decisão de descarte do equipamento. A analise está diretamente relacionada à produtividade do equipamento, ao nível tecnológico do comando, à robustez mecânica, ao estado de conservação do sistema hidráulico, do conjunto punções, do conjunto de recursos e ao possível aumento de performance com o retrofit.
Nossa empresa atua no ramo de manutenção industrial, com profissionais altamente qualificados com mais de 25 anos de experiência, tendo sua sede localizada na Região de Curitiba Paraná atendendo todo BRASIL. Temos uma equipe técnica e uma engenharia especializada e comprometida para os reparos ou consertos de equipamentos industriais e conserto de placa eletrônica. A nossa empresa está preparada para atender clientes de todos os portes e partes do Brasil, oferecendo sempre uma solução inteligente e econômica para quem precisa dos serviços oferecidos de manutenção. A empresa Linoteck Eletrônica é especializada em corrigir problemas de mais de 100 fabricantes. A satisfação e economia do cliente é a nossa prioridade. Os clientes tem a disposição os nossos anos de experiência no mercado e a nossa equipe especializada, cuja competência é reconhecida internacionalmente.
Retrofit com LinuxCNC Códigos M Entradas Digitais teste de perfuração Máquina Nissshibo Puncionadeira
Neste video é demostrado o Retrofit com Linux da máquina funcionando perfeitamente com os comandos do sistema LinuxCNC Códigos M Entradas Digitais.
Códigos M
1. Tabela de referência rápida do código M
| Código | Descrição |
|---|---|
Pausa do programa |
|
Fim do programa |
|
Pausa para troca de paletes |
|
Controle do fuso |
|
Troca de ferramenta |
|
Controle de refrigerante |
|
Fuso Orient |
|
Habilitar/Desabilitar Substituição de Alimentação e Fuso |
|
Controle de substituição de feed |
|
Controle de substituição do fuso |
|
Controle de alimentação adaptável |
|
Controle de parada de alimentação |
|
Definir número da ferramenta atual |
|
Controle de saída |
|
Controle de entrada |
|
Controle de saída analógica |
|
Controle de saída analógica |
|
Salvar estado modal |
|
Invalidar estado modal armazenado |
|
Restaurar estado modal |
|
Salvar estado modal de restauração automática |
|
Chamada e retorno do subprograma |
|
Códigos M definidos pelo usuário |
2. M0, M1 Pausa do programa
-
M0 - pausa um programa em execução temporariamente. O LinuxCNC permanece no Modo Automático, então MDI e outras ações manuais não são habilitadas. Pressionar o botão resume reiniciará o programa na linha seguinte.
-
M1 - pausa um programa em execução temporariamente se o interruptor de parada opcional estiver ligado. O LinuxCNC permanece no Modo Automático, então MDI e outras ações manuais não são habilitadas. Pressionar o botão de retomada reiniciará o programa na linha seguinte.
|
Observação
|
Não há problema em programar M0 e M1 no modo MDI, mas o efeito provavelmente não será perceptível, porque o comportamento normal no modo MDI é parar após cada linha de entrada. |
3. Fim do programa M2, M30
-
M2 - finaliza o programa. Pressionar
Cycle Start("R" na GUI do Axis) reiniciará o programa no início do arquivo. -
M30 - troca de pallet shuttles e finaliza o programa. Pressionar
Cycle Startiniciará o programa no início do arquivo.
Ambos os comandos têm os seguintes efeitos:
-
Mude do modo Automático para o modo MDI.
-
Os deslocamentos de origem são definidos como padrão (como G54 ).
-
O plano selecionado é definido como plano XY (como G17 ).
-
O modo de distância é definido como modo absoluto (como G90 ).
-
O modo de taxa de avanço é definido em unidades por minuto (como G94 ).
-
As substituições de avanço e velocidade são definidas como LIGADAS (como M48 ).
-
A compensação do cortador é desativada (como G40 ).
-
O fuso está parado (como M5 ).
-
O modo de movimento atual está definido para Alimentação (como G1 ).
-
O líquido de ventilação está desligado (como M9 ).
|
Observação
|
Linhas de código após M2/M30 não serão executadas. Pressione Cycle Start
para iniciar o programa no início do arquivo. |
|
Aviso
|
Usar % para encapsular o código G não faz a mesma coisa que um Program End . Veja a seção sobre Requisitos de Arquivo para mais informações sobre o que usar % não faz. |
4. Pausa para troca de paletas M60
-
M60 - troque os transportadores de paletas e então pause um programa em execução temporariamente (independentemente da configuração do interruptor de parada opcional). Pressionar o botão de início do ciclo reiniciará o programa na linha seguinte.
5. Controle do fuso M3, M4, M5
-
M3 [$n] - inicia o fuso selecionado no sentido posição na velocidade S.
-
M4 [$n] - inicia o fuso selecionado no sentido anti-horário na velocidade S.
-
M5 [$n] - para o fuso selecionado.
Use $ para operar fusos específicos. Se $ for omitido, os comandos padrão são operados no fuso 0. Use $-1 para operar em todos os fusos ativos.
Este exemplo iniciará os fusos 0, 1 e 2 simultaneamente em velocidades diferentes:
S100 $ 0 S200 $ 1 S300 $ 2 M3 $ -1
Este exemplo inverterá o fuso 1, mas deixará os outros fusos girando para frente:
M4 $ 1
E isso irá parar o fuso 2 e deixar os outros fusos girando:
M5 $ 2
Se o $ for omitido, o comportamento será exatamente o normal de uma máquina de fuso único.
É OK usar M3 ou M4 se a velocidade do fuso S estiver definida como zero. Se isso for feito (ou se o interruptor de cancelamento de velocidade estiver habilitado e definido como zero), o fuso não receberá a rotação. Se, mais tarde, a velocidade do fuso for definida acima de zero (ou o interruptor de override para terminado), o fuso receberá a rotação. É OK usar M3 ou M4 quando o fuso já estiver girando ou usar M5 quando o fuso já estiver parado.
6. Troca de ferramenta M6
6.1. Troca manual de ferramentas
Se o componente HAL hal_manualtoolchange for carregado, o M6 irá para o fuso e solicitará que o usuário troque uma ferramenta com base no último número T programado. Para mais informações sobre hal_manualtoolchange, consulte a seção Troca Manual de Ferramenta .
6.2. Trocador de ferramentas
Para alterar uma ferramenta no fuso da ferramenta atualmente no fuso para a ferramenta selecionada mais recentemente (usando uma palavra T - veja a seção Selecionar Ferramenta ), programe M6 . Quando a troca de ferramenta estiver concluída:
-
O fuso será parado.
-
A ferramenta que foi selecionada (por uma palavra T na mesma linha ou em qualquer linha após a troca de ferramenta anterior) estará no fuso.
-
Se a ferramenta selecionada não estava no fuso antes da troca de ferramenta, a ferramenta que estava no fuso (se houver) será colocada de volta no magazine do trocador de ferramentas.
-
Se configurado no arquivo INI, algumas posições de eixo podem se mover quando um M6 é emitido. Veja a seção EMCIO para mais informações sobre opções de troca de ferramentas.
-
Nenhuma outra alteração será feita. Por exemplo, o refrigerante continuará a fluir durante a troca de ferramenta, a menos que tenha sido desligado por um M9 .
|
Observação
|
A palavra T é um número inteiro que designa o número do bolso da ferramenta no carrossel (não seu índice). |
|
Aviso
|
O deslocamento do comprimento da ferramenta não é alterado por M6 , use G43 depois de M6 para alterar o deslocamento do comprimento da ferramenta. |
A troca de ferramenta pode incluir movimento do eixo. É OK (mas não é útil) programar uma mudança na ferramenta já no fuso. É OK se não houver ferramenta no slot selecionado; nesse caso, o fuso ficará vazio após a troca de ferramenta. Se o slot zero foi selecionado por último, definitivamente não haverá ferramenta no fuso após uma troca de ferramenta. O trocador de ferramentas terá que ser configurado para executar a troca de ferramenta no HAL e possivelmente no ClassicLadder.
7. Controle de refrigerante M7, M8, M9
-
M7 - liga a névoa do líquido de arrefecimento. M7 controla o pino iocontrol.0.coolant-mist.
-
M8 - liga o líquido de arrefecimento de inundação. M8 controla o pino iocontrol.0.coolant-flood.
-
M9 - desliga M7 e M8.
Conecte um ou ambos os pinos de controle de refrigerante em HAL antes que M7 ou M8 controlem uma saída. M7 e M8 podem ser usados para ligar qualquer saída via G-code.
Não há problema em usar qualquer um desses comandos, independentemente do estado atual do líquido de arrefecimento.
8. Eixo Orient M19
M1 9 R - Q - [ P - ] [ $- ]
-
Posição R para girar de 0, o intervalo válido é de 0 a 360 graus
-
Q Número de segundos para esperar até que orient seja concluído. Se spindle.N.is-oriented não se tornar verdadeiro dentro do tempo limite Q, ocorrerá um erro.
-
P Direção para girar para a posição.
-
0 rotação para o menor movimento angular (padrão)
-
1 sempre gire no sentido horário (mesmo sentido M3)
-
2 sempre gire no sentido anti-horário (mesmo sentido do M4)
-
-
$ O fuso a ser orientado (na verdade, apenas determina quais pinos HAL carregam os comandos de posição do fuso)
M19 é um comando do grupo modal 7, como M3, M4 e M5. M19 é liberado por qualquer um dos comandos M3, M4, M5.
A orientação do fuso requer um codificador de quadratura com um índice para detectar a posição do eixo do fuso e a direção de rotação.
Configurações INI na seção [RS274NGC]:
-
ORIENT_OFFSET = 0-360 (deslocamento fixo em graus adicionado à palavra M19 R)
-
Pinos HAL
-
spindle.N.orient-angle (out float) Orientação desejada do fuso para M19. Valor do parâmetro da palavra R de M19 mais o valor do parâmetro [RS274NGC]ORIENT_OFFSET INI.
-
spindle.N.orient-mode (out s32) Modo de rotação do fuso desejado. Reflete a palavra de parâmetro M19 P, padrão = 0.
-
spindle.N.orient (bit out) Indica o início do ciclo de orientação do fuso. Definido por M19. Desmarcado por qualquer um de M3, M4, M5. Se spindle-orient-fault não for zero durante spindle-orient true, o comando M19 falhará com uma mensagem de erro.
-
spindle.N.is-oriented (em bits) Reconhece o pino para spindle-orient. Conclui o ciclo orient. Se spindle-orient era verdadeiro quando spindle-is-oriented foi afirmado, o pino spindle-orient é limpo e o pino spindle-locked é afirmado. Além disso, o pino spindle-brake é afirmado.
-
spindle.N.orient-fault (em s32) Entrada de código de falha para ciclo de orientação. Qualquer valor diferente de zero fará com que o ciclo de orientação seja abortado.
-
spindle.N.locked (out bit) Pino completo de orientação do spindle. Desmarcado por qualquer um de M3,M4,M5.
-
9. Controle de sobreposição de velocidade e avanço M48, M49
-
M48 - habilita os controles de substituição da velocidade do fuso e da taxa de avanço.
-
M49 - desabilita ambos os controles.
Esses comandos também usam um parâmetro $ opcional para determinar em qual fuso eles operam.
Não há problema em habilitar ou desabilitar os controles quando eles já estiverem habilitados ou desabilitados. Veja a seção Feed Rate para mais detalhes.
Eles também podem ser alternados individualmente usando M50 e M51 , veja abaixo.
10. Controle de substituição de alimentação M50
-
M50 <P1> - habilita o controle de override da taxa de alimentação. O P1 é opcional.
-
M50 P0 - desabilita o controle da taxa de avanço.
Enquanto desabilitado, a substituição de avanço não terá influência, e o movimento será executado na taxa de avanço programada (a menos que haja uma substituição de taxa de avanço adaptável ativa).
11. Controle de substituição de velocidade do fuso M51
-
M51 <P1> <$-> - habilita o controle de override de velocidade do fuso para o fuso selecionado. O P1 é opcional.
-
M51 P0 <$-> - desabilita o programa de controle de substituição da velocidade do fuso.
Enquanto desabilitado, a substituição da velocidade do fuso não terá influência, e a velocidade do fuso terá o valor exato especificado pelo programa da palavra S (descrito na seção Velocidade do fuso ).
12. Controle de alimentação adaptável M52
-
M52 <P1> - use um feed adaptável. O P1 é opcional.
-
M52 P0 - pare de usar feed adaptável.
Quando o feed adaptável está habilitado, algum valor de entrada externo é usado junto com o valor de substituição do feed da interface do usuário e a taxa de feed comandada para definir a taxa de feed real. No LinuxCNC, o pino HAL motion.adaptive-feed é usado para esse propósito. Os valores em motion.adaptive-feed devem variar de -1 (velocidade programada em reverso) a 1 (velocidade máxima). 0 é equivalente a feed-hold.
|
Observação
|
O uso de alimentação adaptativa negativa para execução reversa é um novo recurso e ainda não foi muito bem testado. O uso pretendido é para cortadores de plasma e eroders de faísca de fio, mas não se limita a tais aplicações. |
13. Controle de parada de alimentação M53
-
M53 <P1> - habilita o interruptor de parada de alimentação. O P1 é opcional. Habilitar o interruptor de parada de alimentação permitirá que o movimento seja interrompido por meio do controle de parada de alimentação. No LinuxCNC, o pino HAL motion.feed-hold é usado para esse propósito. Um valor verdadeiro fará com que o movimento pare quando M53 estiver ativo.
-
M53 P0 - desabilita o interruptor de parada de alimentação. O estado de motion.feed-hold não terá efeito na alimentação quando M53 não estiver ativo.
14. M61 Definir ferramenta atual
-
M61 Q- - altera o número da ferramenta atual enquanto estiver no modo MDI ou Manual sem uma troca de ferramenta. Um uso é quando você liga o LinuxCNC com uma ferramenta atualmente no fuso, você pode definir esse número de ferramenta sem fazer uma troca de ferramenta.
|
Aviso
|
O deslocamento do comprimento da ferramenta não é alterado por M61 , use G43 depois de M61 para alterar o deslocamento do comprimento da ferramenta. |
É um erro se:
-
Q- não é 0 ou maior
15. Controle de saída digital M62 - M65
-
M62 P- - liga a saída digital sincronizada com o movimento.
-
M63 P- - desliga a saída digital sincronizada com o movimento.
-
M64 P- - liga a saída digital imediatamente.
-
M65 P- - desliga a saída digital imediatamente.
A palavra P especifica o número da saída digital. A palavra P varia de 0 a um valor padrão de 3. Se necessário, o número de E/S pode ser aumentado usando o parâmetro num_dio ao carregar o controlador de movimento. Veja a seção Movimento para mais informações.
Os comandos M62 e M63 serão enfileirados. Comandos subsequentes que se referem ao mesmo número de saída substituirão as configurações mais antigas. Mais de uma alteração de saída pode ser especificada emitindo mais de um comando M62/M63.
A mudança real das saídas especificadas acontecerá no início do próximo comando de movimento. Se não houver um comando de movimento subsequente, as mudanças de saída enfileiradas não acontecerão. É melhor sempre programar um código G de movimento (G0, G1, etc.) logo após o M62/63.
M64 e M65 acontecem imediatamente quando são recebidos pelo controlador de movimento. Eles não são sincronizados com o movimento e quebrarão a mesclagem.
|
Observação
|
O M62-65 não funcionará a menos que os pinos motion.digital-out- nn apropriados estejam conectados no seu arquivo HAL às saídas. |
16. M66 Aguarde a entrada
M66 P - | E - < L ->
-
P- - especifica o número de entrada digital de 0 a 3. (Ajustável a partir do argumento motmod num_dio)
-
E- - especifica o número de entrada analógica de 0 a 3. (Ajustável pelo argumento motmod num_aio)
-
L- - especifica o tipo de modo de espera.
-
Modo 0: IMEDIATO - sem espera, retorna imediatamente. O valor atual da entrada é armazenado no parâmetro #5399
-
Modo 1: RISE - aguarda que a entrada selecionada execute um evento de subida.
-
Modo 2: QUEDA - aguarda a entrada selecionada executar um evento de queda.
-
Modo 3: ALTO - aguarda a entrada selecionada ir para o estado ALTO.
-
Modo 4: BAIXO - aguarda a entrada selecionada ir para o estado BAIXO.
-
-
Q- - especifica o tempo limite em segundos para espera. Se o tempo limite for excedido, a espera será interrompida e a variável #5399 estará mantendo o valor -1. O valor Q é ignorado se a palavra L for zero (IMMEDIATE). Um valor Q de zero é um erro se a palavra L for diferente de zero.
-
O modo 0 é o único permitido para uma entrada analógica.
M66 P 0 L 3 Q 5 (aguarde até 5 segundos para que a entrada digital 0 ligue)
M66 espera por uma entrada interrompe a execução do programa até que o evento selecionado (ou o tempo limite programado) ocorra.
É um erro programar M66 com uma palavra P e uma palavra E (selecionando assim uma entrada analógica e uma digital). No LinuxCNC, essas entradas não são monitoradas em tempo real e, portanto, não devem ser usadas para aplicações críticas de tempo.
O número de E/S pode ser aumentado usando o parâmetro num_dio ou num_aio ao carregar o controlador de movimento. Veja a seção Motion para mais informações.
|
Observação
|
O M66 não funcionará a menos que os pinos motion.digital-in- nn ou motion.analog-in- nn apropriados estejam conectados no seu arquivo HAL a uma entrada. |
net signal-name motion.digital-in-00 <= parport.0.pin10-in
17. Saída analógica M67, sincronizada
M67 E - Q -
-
M67 - define uma saída analógica sincronizada com o movimento.
-
E- - número de saída variando de 0 a 3 (ajustável pelo argumento motmod num_aio)
-
Q- - é o valor a ser definido (definido como 0 para desligar).
A mudança real das saídas especificadas acontecerá no início do próximo comando de movimento. Se não houver um comando de movimento subsequente, as mudanças de saída enfileiradas não acontecerão. É melhor sempre programar um código G de movimento (G0, G1, etc.) logo após o M67. O M67 funciona da mesma forma que o M62-63.
O número de E/S pode ser aumentado usando o parâmetro num_dio ou num_aio ao carregar o controlador de movimento. Veja a seção Motion para mais informações.
|
Observação
|
O M67 não funcionará a menos que os pinos motion.analog-out- nn apropriados estejam conectados no seu arquivo HAL às saídas. |
18. Saída analógica M68, imediata
M68 E - Q -
-
M68 - define uma saída analógica imediatamente.
-
E- - número de saída variando de 0 a 3. (Ajustável pelo argumento motmod num_aio)
-
Q- - é o valor a ser definido (definido como 0 para desligar).
As saídas do M68 acontecem imediatamente quando são recebidas pelo controlador de movimento. Elas não são sincronizadas com o movimento e quebrarão a mistura. O M68 funciona da mesma forma que o M64-65.
O número de E/S pode ser aumentado usando o parâmetro num_dio ou num_aio ao carregar o controlador de movimento. Veja a seção Motion para mais informações.
|
Observação
|
O M68 não funcionará a menos que os pinos motion.analog-out- nn apropriados estejam conectados no seu arquivo HAL às saídas. |
19. M70 Salvar estado modal
Para salvar explicitamente o estado modal no nível de chamada atual, programe M70 . Uma vez que o estado modal tenha sido salvo com M70 , ele pode ser restaurado exatamente para esse estado executando um M72 .
Um par de instruções M70 e M72 normalmente será usado para proteger um programa contra alterações modais inadvertidas dentro de sub-rotinas.
O estado salvo consiste em:
-
configurações atuais G20/G21 (imperial/métrico)
-
plano selecionado (G17/G18/G19 G17.1,G18.1,G19.1)
-
estado de compensação da fresa (G40,G41,G42,G41.1,G42,1)
-
modo de distância - relativo/absoluto (G90/G91)
-
modo de alimentação (G93/G94,G95)
-
sistema de coordenadas atual (G54-G59.3)
-
status de compensação do comprimento da ferramenta (G43,G43.1,G49)
-
modo de retração (G98,G99)
-
modo de fuso (G96-css ou G97-RPM)
-
modo de distância de arco (G90.1, G91.1)
-
modo raio/diâmetro do torno (G7,G8)
-
modo de controle de caminho (G61, G61.1, G64)
-
alimentação e velocidade atuais ( valores F e S )
-
status do fuso (M3,M4,M5) - ligado/desligado e direção
-
estado de neblina (M7) e inundação (M8)
-
configurações de substituição de velocidade (M51) e substituição de alimentação (M50)
-
configuração de alimentação adaptável (M52)
-
configuração de retenção de alimentação (M53)
Observe que, em particular, o modo de movimento (G1 etc.) NÃO é restaurado.
nível de chamada atual significa:
-
executando no programa principal. Há um único local de armazenamento para o estado no nível do programa principal; se várias instruções M70 forem executadas por vez, apenas o estado salvo mais recentemente será restaurado quando um M72 for executado.
-
executando dentro de uma subrotina de código G. O estado salvo com M70 dentro de uma subrotina se comporta exatamente como um parâmetro nomeado local - ele pode ser referenciado somente dentro desta invocação de subrotina com um M72 e quando a subrotina sai, o parâmetro vai embora.
Uma invocação recursiva de uma sub-rotina introduz um novo nível de chamada.
20. M71 Invalidar estado modal armazenado
O estado modal salvo com um M70 ou por um M73 no nível de chamada atual é invalidado (não pode mais ser restaurado).
Um M72 subsequente no mesmo nível de chamada falhará.
Se executado em uma sub-rotina que protege o estado modal por um M73 , um return ou endsub subsequente não restaurará o estado modal.
A utilidade desse recurso é duvidosa. Não se deve confiar nele, pois pode desaparecer.
21. M72 Restaurar estado modal
O estado modal salvo com um código M70 pode ser restaurado executando um M72 .
O manuseio de G20/G21 é tratado de forma especial, pois os avanços são interpretados de forma diferente dependendo de G20/G21: se as unidades de comprimento (mm/pol.) estiverem prestes a ser alteradas pela operação de restauração, 'M72' restaurará primeiro o modo de distância e, em seguida, todos os outros estados, incluindo o avanço, para garantir que o valor do avanço seja interpretado na configuração de unidade correta.
É um erro executar um M72 sem nenhuma operação de salvamento M70 anterior naquele nível.
O exemplo a seguir demonstra como salvar e restaurar explicitamente o estado modal em torno de uma chamada de subrotina usando M70 e M72 . Observe que a subrotina imperialsub não está "ciente" dos recursos M7x e pode ser usada sem modificações:
O<showstate> sub (DEBUG, imperial= #<_imperial> absoluto= #<_absoluto> feed= #<_feed> rpm= #<_rpm> ) O<showstate> endsub O<imperialsub> sub g20 (imperial) g91 (modo relativo) F5 (baixo avanço) S300 (baixo rpm) (depurar, na subrotina, estado agora:) o<showstate> chamar O<imperialsub> endsub ; programa principal g21 (métrico) g90 (absoluto) f200 (velocidade rápida) S2500 (alta rotação) (depurar, no principal, estado agora:) chamada o<showstate> M70 (salvar o estado do chamador em nível global) O<imperialsub> chama M72 (restaurar explicitamente o estado) (depurar, voltar ao principal, estado agora:) o<showstate> chamar m2
22. M73 Salvar e restaurar automaticamente o estado modal
Para salvar o estado modal dentro de uma sub-rotina e restaurar o estado na sub-rotina endsub ou em qualquer caminho de retorno , programe M73 .
Abortar um programa em execução em uma sub-rotina que tenha uma operação M73 não restaurará o estado.
Além disso, o fim normal ( M2 ) de um programa principal que contém um M73 não restaurará o estado.
O uso sugerido é no início de uma subrotina de palavra O, como no exemplo a seguir. Usar M73 dessa forma permite projetar subrotinas que precisam modificar o estado modal, mas protegerão o programa de chamada contra alterações modais inadvertidas. Observe o uso de parâmetros nomeados predefinidos na subrotina showstate .
O<showstate> sub (DEBUG, imperial= #<_imperial> absoluto= #<_absoluto> feed= #<_feed> rpm= #<_rpm> ) O<showstate> endsub O<imperialsub> sub M73 (salva o estado do chamador no contexto de chamada atual, restaura no retorno ou no fim do sub) g20 (imperial) g91 (modo relativo) F5 (baixo avanço) S300 (baixo rpm) (depuração, na subrotina, estado agora:) chamada o<showstate> ; nota - nenhum M72 é necessário aqui - o seguinte endsub ou um ; 'return' explícito restaurará o estado do chamador O<imperialsub> endsub ; programa principal g21 (métrico) g90 (absoluto) f200 (velocidade rápida) S2500 (alta rotação) (depuração, no principal, estado agora:) o<showstate> chamada o<imperialsub> chamada (depuração, de volta no principal, estado agora:) o<showstate> chamada m2
23. M98 e M99
O interpretador suporta programas principais e subprogramas no estilo Fanuc com os códigos M M98 e M99 . Veja Programas no estilo Fanuc .
23.1. Restaurando seletivamente o estado modal
Executar um M72 ou retornar de uma sub-rotina que contém um M73 restaurará todos os estados modal salvos .
Se apenas alguns aspectos do estado modal devem ser preservados, uma alternativa é o uso de parâmetros nomeados predefinidos , parâmetros locais e instruções condicionais. A ideia é lembrar os modos a serem restaurados no início da subrotina e restaurá-los antes de sair. Aqui está um exemplo, baseado no snippet de nc_files/tool-length-probe.ngc :
O<measure> sub (ferramenta de referência de medida) ; #<absoluto> = #<_absoluto> (lembra na variável local se G90 foi definido) ; g30 (acima do interruptor) g38.2 z 0 f15 (medida) g91 g0 z .2 (fora do interruptor) #1000 = #5063 (salva o comprimento da ferramenta de referência) (imprime, o comprimento de referência é #1000) ; O<restore_abs> if [ #<absoluto> ] g90 (restaura G90 somente se ele foi definido na entrada:) O<restore_abs> endif ; O<measure> endsub
24. Comandos definidos pelo usuário M100-M199
M1 -- < P - Q ->
-
M1-- - um número inteiro no intervalo de 100 a 199.
-
P- - um número passado para o arquivo como o primeiro parâmetro.
-
Q- - um número passado para o arquivo como segundo parâmetro.
|
Observação
|
Depois de criar um novo arquivo M1nn, você deve reiniciar a GUI para que ela reconheça o novo arquivo, caso contrário, você receberá um erro de código m desconhecido . |
O programa externo denominado M100 a M199 (sem extensão, M maiúsculo, encontrado no diretório apontado pelo parâmetro [DISPLAY] PROGRAM_PREFIX do arquivo INI) é executado com os valores opcionais P e Q como seus dois argumentos.
A execução do arquivo G-code pausa até que o programa externo saia. Qualquer arquivo executável válido pode ser usado. O arquivo deve estar localizado no caminho de pesquisa especificado na configuração do arquivo INI. Veja a seção Display para mais informações sobre caminhos de pesquisa.
Após criar um novo programa M1nn, a GUI deve ser reiniciada para que o novo programa seja levado em consideração, caso contrário, ocorrerá um erro de código M desconhecido .
|
Aviso
|
Não use um processador de texto para criar ou editar os arquivos. Um processador de texto deixará códigos não vistos que causarão problemas e podem impedir que um arquivo bash ou python funcione. Use um editor de texto como o Geany no Debian ou o Notepad++ em outros sistemas operacionais para criar ou editar os arquivos. |
O erro Código M desconhecido usado denota um dos seguintes:
-
O comando definido pelo usuário especificado não existe
-
O arquivo não é um arquivo executável
-
O nome do arquivo tem uma extensão
-
O nome do arquivo não segue este formato Mnnn onde nnn = 100 a 199
-
O nome do arquivo usou um M minúsculo
Por exemplo, para abrir e fechar um collet closer que é controlado por um pino de porta paralela usando um arquivo de script bash usando M101 e M102. Crie dois arquivos chamados M101 e M102. Defina-os como arquivos executáveis (normalmente clique com o botão direito/propriedades/permissões) antes de executar o LinuxCNC. Certifique-se de que o pino da porta paralela não esteja conectado a nada em um arquivo HAL.
#!/bin/bash
# file to turn on parport pin 14 to open the collet closer
halcmd setp parport.0.pin-14-out True
exit 0
#!/bin/bash
# file to turn off parport pin 14 to open the collet closer
halcmd setp parport.0.pin-14-out False
exit 0
Para passar uma variável para um arquivo M1nn você usa a opção P e Q assim:
M1 00 P 123.456 Q 321.654
#!/bin/bash
voltage=$1
feedrate=$2
halcmd setp thc.voltage $voltage
halcmd setp thc.feedrate $feedrate
exit 0
Para exibir uma mensagem gráfica e parar até que a janela de mensagem seja fechada, use um programa de exibição gráfica como Eye of Gnome para exibir o arquivo gráfico. Quando você fechá-lo, o programa continuará.
#!/bin/bash
eog /home/john/linuxcnc/nc_files/message.png
exit 0
Para exibir uma mensagem gráfica e continuar processando o arquivo de código G, adicione um "e" comercial ao comando.
#!/bin/bash
eog /home/john/linuxcnc/nc_files/message.png &
exit 0
