Cмена инструмента, это отдельная параметрическая макро-программа записанная на карту памяти, где хранится ladder, и ваши NC-файлы. Её суть производить полный спектр присущных ему действий таких как - взять инструмент, перевести координаты машины в референтную точку с указанием макро# переменных для смены инструмента, произвести ориентанцию m19, открыть шпиндель и закрыть (для фрезерных станков) всё зависит от типа станков. Обычно УП - собирает информацию о модальности кодов: и записывает их в отдельные пользовательские переменные - #4201- какой код ориентации работал, #4203- какая система программирования (g90/g91) была, ну и т.д., чтобы после смены инструмента их вернуть назад. После станок проверяет совпадает ли инструмент стоящий в шпинделе #4320 с тем, который меняют, если да то описывается смена IF [#инструмент eq 1] goto 10 , IF [#инструмент eq 2] goto 20, после чего в блоках N10, N20 идет смена, и M99. Так вот в начале программы обычно в системную или пользовательскую переменную записывают #999 = 1 (начало смены инструмента), а когда он поменялся в блоках N10, N20, идет#999 = 0 (конец смены инструмента). Т.к. вы нажали reset во время смены, то #999 еще равен = 1, т.е. станок считает что инструмент не поменялся корректно. Что касается расположения машинных осей, то это может быть вызвано тем что при смене инструмента работает код G10 L2 P0 X0.Y0.Z0. с SHIFT AMOUNT (офсетом раб. координат), при сбое станок может начудить и там. Так как никто из нас не телепат, что решать задачку по месту только Вам. Удачи!