Como o assunto é complexo, não sei se a nossa comunicação será efetiva, mas vamos lá ....
Acho que não me fiz entender. O bem prócimo que me referí é o ponto onde a máquina parou, e tendo o Gcode eu sei qual linha do Gcode a máquina deverá reiniciar.
Há duas coisas, o ponto onde o programa parou e onde a máquina efetivamente parou...
No exato momento da falha da energia elétrica algumas coisas ocorrem e efetivamente contribuem para a movimentação, sem a energia da rede:
(1) As fontes de alimentação (do PC e dos motores) ainda tem alguma energia elétrica residual armazenada (sou eletrônico e sei de que estou falando) devido aos capacitores das fontes. A depender da capacidade das fontes e de quão estão carregadas, esta quantidade "excedente" de carga poderá ser maior ou menor. Mas poderia ser suficiente para mover alguns passos algum motor.
(2) Há a inércia de movimentação da máquina, que dependerá da velocidade em que se deslocava, do peso -> massa da parte móvel máquina e dos atritos da máquina. Ou seja, me refiro à energia cinética (de movimento) da máquina logo antes da falta de energia, que poderia fazê-la se mover (alguns passos) se a energia elétrica dos motores for bruscamente cortada.
(3) Motores de passos perdem o torque de retenção quando sem energia elétrica e os eixos do CNC podem ser mover mais livremente.
A partir das condições listadas acima, o PC (o programa Mach3, LinuxCNC, ....) poderia estar gerando passos, mas o(s) motor(es) pode(m) ter parado antes ou então, o programa (o PC) parou antes, ou seja, a posição da parada é a mesma do programa.
Concluindo, o ponto onde a máquina efetivamente parou foi quando os motores perderam torque e a inércia da movimentação foi dissipada, e não é necessariamente o ponto onde o programa parou, correto?
Devo salientar que o X0, Y0, e Z0 para min é posição correta, de acordo com minhas marcações antes de iniciar a fresagem.
Exemplo, depois de fixar os eixos nos zeros (três eixos), eu ligo a máquina e com as setas coloco a fresa bem próximo (este é o próximo que estamos falando) do ponto que parou, anoto as coordenadas que o mach3 apresenta, mando a máquina ir para os x0, y0 e z0, edito o gCode , vou até em um posto antes em que a máquina parou (isso no arquivo Gcode) e elimino todas as linhas anteriores até uma das primeiras em que consta o primeiro comando para o Z levantar Salvo o arquivo com outro nome e dou start.
Xo, Yo são as coordenadas anteriores ao comando (em código G) que foi interrompido pela falta de energia, ou seja, se a máquina estava indo de Xo, Yo para X1, Y1, irá parar num ponto intermediário, correto?
Sendo assim, o programa e algum comando deveria ser "quebrado", ou melhor "refeito à mão", para tentar fazer a máquina partir exatamente de onde parou. Como esses comandos são gerados por um programa (exemplo: Smartcam, ....) de maneira otimizada, conforme uma trajetória definida, dificilmente à mão alguém conseguiria reproduzir exatamente o que estava acontecendo no instante da falha (a posição exata, a velocidade exata e a trajetória = a direção de movimentação exata).
Não duvido de sua experiência, mas a coisa não é simples, como você já percebeu...
O problema das marca é que nos quadros, Só pessoas que já fizeram esse tipo de trabalho sabem, fatalmente ficará um risco no trabalho. Pois, Não sou físico, mas desconfio que se deve à dilatação dos corpos, a fresa antes de parar estava quente, assim como o spindle, e outras partes envolvidas e quando reiniciamos essas mesmas partes estão frias e mais contraídas, Talvez seja por isso que os riscos geralmente estão mais alto que a posição anterior. Não sei se isso acontece com o Cientista também, do risco ser mais alto quando do reinício. Seria uma questão de pesquisar.
Se a energia se normaliza segundos depois, a temperatura não deve ter mudado tanto assim.
Acho que há outras causas possíveis para os riscos, falta de rigidez mecânica do CNC, o ponto de reinício não é exatamente o mesmo, .... Como estamos falando de riscos e não de "talhos", são pequenas diferenças (alguns passos apenas) que podem ter ocorrido no posicionamento inexato no re-início do programa.
Um teste poderia ajudar a conhecer melhor, seria interromper um programa de usinagem 3D numa linha conhecida do código G e recomeça-lo na linha seguinte, mas antes, deslocar ligeiramente as coordenadas alguns passos (para simular um erro de avaliação de posicionamento durante a falta de energia).
O teste pode ser repetido sem o deslocamento de coordenadas, para confirmar se seria um problema de deformação do CNC.
Para confirmar o que leva aos riscos aparecerem.
Finalmente, ao invés de "riscos aparecerem", poderiam ser os "ricos aparecerem", aí todos ficariam mais felizes...