Estava analisando o programa fiz uma alteração.
G0Z20.000 ( AQUI O Z DESCE 20)
G0X0.000Y0.000S1000 0M3
G0X40.094Y235.389Z5 .000 (AQUI DESCE MAIS 5)
Me desculpe, mas tenho que comentar um detalhe MUITO importante:
O posicionamento dos eixos é Absoluto e não incremental.
O que quero dizer é que o movimento deve ser encarado (e entendido) como posição real e absoluta isto é:
Na primeira cota, o "Z" estará na cota "20 positivo" e isso representaria 20mm acima da superfície a peça caso esta seja a origem para o "Z".
Na outra linha o "Z" NÃO desce mais cinco mm - ele só desce 15mm - vai para a cota 5mm acima da origem.
Durante o corte, ele vai originalmente a -3mm ou seja, 3mm abaixo do zero da origem...
Evitem pensar em cotas ou deslocamentos aditivos (incrementais) porque este erro de interpretação é a maior causa de colisões na indústria.
Da forma que o arquivo estava escrito está certo - não há nada de errado com os deslocamentos originais.
Uma possibilidade ainda que remota seria verificar se o programa de controle está ajustado para deslocamentos "absolutos" e não "incrementais".
De qualquer forma, me parece que um colega sugere que possa estar havendo alguma interferência quando das movimentações, e pode-se testar isso fazendo uma usinagem "em vazio" (sem ferramenta ou sem tocar na peça), com o motor da ferramenta ligado e desligado.
Outra possibilidade pode estar num problema de configuração do programa, ou mesmo num problema mecanico localizado e que impeça ou atrapalhe a movimentação livre do eixo "Z".
Um problema muito comum é de usar motores de passo pequenos no "Z" por causa da ilusão de que o eixo é leve - pode ser leve, mas tem a gravidade que atrapalha bem.