На днях внедрял для своего проекта автосмену на myCNC. Может кому интересно будет, опишу данный процесс в подробностях.
 Сначала думал что настроить автосмену это очень сложно, но все намного проще чем кажется. 
 В софте myCNC есть помощник по написанию макросов для различных операций, таких как хоуминг, измерение длинны инструмента, поиск граней или центра окружности,  измерение поверхности и т.д. Одним из таких помощников есть написание макроса для АТС.
 Для примера приведу линейный тип смены инструмента, хотя можно настроить и другие типы сменщиков.
  С чего начать?
 Первым делом нужно узнать позиции держателей инструмента, это можно узнать из технической документации на станок или если таковой нет то найти координаты позиций держателей в ручную. Для этого принимаем базы по всем осям, устанавливаем цанговый патрон в шпиндель и очень медленно и аккуратно заезжаем в вилку держателя инструмента в ручном режиме. Когда цанговый патрон будет точно спозиционирован в держателе- записываем машинные координаты. Как записали координаты позиции держателя потом медленно выезжаем с держателя и записываем расстояние до полного высвобождение патрона с держателя. Это будет смещение для выгрузки инструмента. 
 Узнать нужно позицию  только первого инструмента, следующие держатели размещены как правило линейно и координаты по двум осям будут такие же как и у первого, по третей оси замеряем расстояния между держателями и добавляем это расстояние к значению первого держателя. И так для всех последующих держателей. 
 Далее переходим в настройки myCNC 
1) Системные настройки
2) Автоматическая смена инструмента
3) Положение держателя инструмента №1...
и записываем координаты держателей в соответствующие поля.
Таким образом мы сообщили myCNC где находятся держатели инструмента.
 Далее идем в конфигурацию:
1) Конфигурация
2) Macros
3) Макро Визард
4) Смена инструмента
переходим во вкладку "Смена инструмента" и там заполняем нужные поля
1) Тип автосмены - выбираем из раскрывающегося списка необходимый тип сменщика
2) Число инструмента в сменщике - указываем сколько держателей установлено в магазине сменщика
3) Ручная смена инструмента для остальных номеров- устанавливаем галочку если инструментов больше чем установлено держателей
4) Смещение для выгрузки инструмента- пишем смещение по нужной оси  и на нужное расстояние для вывода инструмента с вилки держателя
5) Speed XY Z - Скорости быстрых и медленных перемещений позиционирования и выгрузки инструмента
6) Последовательность команд для разжатия инструмента - пишем в это поле PLC M-код для разжатия инструмента в шпинделе
7) Команда для зажатия инструмента в сменщике  - пишем в это поле PLC M-код для фиксации инструмента в шпинделе
8) Кнопка генерации макроса по исходным данным
9) Кнопка сохранение макроса
Шапка Макроса и Концовка макроса по требованию, можно оставить пустым.
Имя файла макроса по стандарту М6
 
Вот в принципе и все, теперь при команде М6Т1...М6Т3... сменщик будет загружать указанный инструмент или выгружать текущий инструмент.
  
Так же можно в ручную вставить необходимые команды в сам макрос.
 Для примера разберем структуру и команды макроса который работает у меня.
  
 (для просмотра содержимого нажмите на ссылку)Код: Выделить всё
        (Tool change procedure) (Процедура автосмены инструмента)
    (5421...5428 - Working area Minimum point) (Минимальный предел рабочей зоны)
    (5431...5438 - Working area Maximum point)  (Максимальный предел рабочей зоны) 
    (5401...5409 - Current Tool Offset) (Смещение текущего инструмента)
    (5471...5479 - Tool Length Sensor position) (Позиция датчика измерения длинны инструмента)
    (6101...6109 - Toolchanger Position) (Позиция магазина)
    (5601...5609 - Toolchanger Unload offset) (Смещение для выгрузки инструмента с держателя)
    (5403 - Current Tool Z Offset) (Смещение текущего инструмента по Z)
    (7040 - Rapid/G0 speed) (Скорость позиционирования /G0 )
    (5400 - Current Tool number) (Номер текущего инструмента)
    (5409 - Next Tool Number) (Номер следующего инструмента)
    (5415 - Tool Holder Orientation) (Ориентация держателя инструмента)
    (6121...6128 Toolholder #1 position) (Позиция держателя инструмента #1)
    (...)
    (6181...6188 Toolholder #7 position)  (Позиция держателя инструмента #7)
    
    
    
    
      (Save Current Program Position in Registers 200,201,202)
      (Записать текущую позицию Х,Y,Z в регистры 200,201,202 соответсвенно)
    
    G10 L81 P200 Q5021
    G10 L81 P201 Q5022
    G10 L81 P202 Q5023
    
    
      (переменнные скоростей позиционирования смены инструмента)
      
    #100= 30000 (XY speed) (Ускоренные переезды XY)
    #110= 1000 (XY slow speed) (Медленные переезды XY)
    #150= 3000 (Z speed) (Ускоренные переезды Z)
    #160= 1000 (Z slow speed) (Медленные переезды Z)
    
      (Проверка типа сменщика)
      (Skip toolchanger procedure if changer type!=1 (Linear))
    IF [ #5600 NE 1 ] 400 (Linear)
    (Desired tool is the same as current)
    IF [ #5400 EQ #5409 ] 400
    IF [ #5409 LT 0 ] 400
    
    
      (Подъем на безопасную высоту)
    
    G53 G90 G0 Z [#5433 - 1.0 ] F#100  (Поднятся на безопасную высоту)
      (Проверка текущего инструмента)
       
    IF [ #5400 EQ 0 ] 200       (если текущий инструмент равен нулю, то пропускаем разгрузку и переходим в процедуру загрузки инструмента N200)
    IF [ #5400 GT 2 ] 180       (manual toolchange)  (если текущий инструмент больше 2, то переходим в процедуру ручной смен инструмента N180)
    
    
    
       (move to XY unload position) 
       (Выгрузка инструмента)
    
    G53 G90 G0 X[#[6111+[#5400*10]]+#5601] Y[#[6112+[#5400*10]]+#5602] F#100 
 
    M630P#5400    (Открыть крышку магазина и поднять держатель) (Pull toolholder)
    
    
      
    G53 G90 G0 Z[#[6113+[#5400*10]]] F#150  (опустить интструмент к держателю) (move down to unload/toolchanger height)
    G53 G90 G0 X[#[6111+[#5400*10]]] Y[#[6112+[#5400*10]]] F#110 (Двигатся в держатель) (move to toolchanger position)
    
    
    M631P#5400   (разжать инструмент) (Release Tool)
    
    
     
    G53 G90 G0 Z[#[6113+[#5400*10]]+#5603] F#160  (поднять шпиндель над инструментом)  (Move up above toolchanger position and leave the tool)
    
    
    M632P#5400  (опустить держатель)  (push toolholder)
    
    JUMP 200 (Перейти в процедуру загрузки инструмента N200)
    
         (Ручная смена инструмента от 2 до 20)
         (manual unload 2-20)
    
    N180 G53 G90 G0 X[#6181] Y[#6182] F#100 (двигатся в позицию смены инструмента) (move to XY unload position)
    M660  (ручная смена инструмента 2-20)
    
    
    
    
    
    
        (Загрузка инструмента)
    
    
    
    N200
    IF [ #5409 LE 0 ] 300 (exit if next tool<=0) (Если следующий инструмент = 0, то перемещение на начальную позицию)
    IF [ #5409 GT 2 ] 280 (manual change if next tool>2 ) (Если следующий инструмент больше 2, то переходим в процедуру ручной смен инструмента N180)
    
    
    
    M631P#5400   (разжать инструмент)
    M632P#5400   (опустить держатель) (push toolholder)
    
    
    
    
    G53 G90 G0 X#[6111+[#5409*10]] Y#[6112+[#5409*10]] Z[#[6113+[#5409*10]]+#5603] F#100  (перемещение в позицию следующего инструмента) (move to XY tool holder position above the holder +#5603)
    G53 G90 G0 Z[#[6113+[#5409*10]]+2] F#150 (опуститься на инструмент на большой скорости) 
    G53 G90 G0 Z[#[6113+[#5409*10]]] F#160  (опуститься на инструмент на малой скорости)
    
    
    
    M630P#5409  (Поднять держатель)  (pull toolholder)
    M635P#5409   (зажать инструмент)  (clamp tool)
    
    
    
    
    G10 L81 P5400 Q5409 (установить текущий инструмент в программе) (set current tool number)
    G53 G90 G0 X[#[6111+[#5409*10]]+#5601] Y[#[6112+[#5409*10]]+#5602] F#110 (съехать с держателя)
    G53 G90 G0 Z [#5433 - 1.0 ] F#100 (поднятся на безопасную высоту) (move up to safe position)
    M632P#5409  (опустить держатель) (push toolholder)
    
    
    JUMP 300    (Перейти в процедуру перещения в начальную позицию)
    
    
    N280
    N180 G53 G90 G0 X[#6181] Y[#6182] F#100 (Двигатся в позицию смены инструмента) (move to XY unload position)
    M660  (ручная смена инструмента 2-20)
    G10 L81 P5400 Q5409 (Установить в программе текущий номер инструмента)  (set current tool number)
    
          
    N300   (процедура перещения в начальную позицию)
    G10 L81 P5400 Q5409  (Установить в программе текущий номер инструмента)   (set current tool number)
    G53 G90 G0 X#200 Y#201 F#100 (перещение в начальную позицию)
    
    N400
 
 И для наглядности видео работы сменщика 
https://www.youtube.com/watch?v=k0KPQUW-85c
 А так же как сменщик работает в боевых условиях
https://youtu.be/LxlJE8xXgGk