# PowerMill

# Создание лэйаута в PowerMIll

Данная статья посвящена созданию лэйаута и кинематической модели в CAD программе PowerMill. На примере робота KUKA KR6 R900 на подвижной тележке, используемого в офисе RISE automation в Москве.

 1. Для создания кастомного лэйаута необходимо выбрать референс для дальнейшего редактирования.

Поскольку наш кастомный лэйаут предполагает использование робота KUKA, выберем подходящий референс из стандартной библиотеки роботов. В нашем случае внешние оси (позиционеры, треки) не используются, по этому выбираем стандартный лэйаут робота KUKA KR300

[![image.png](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/scaled-1680-/image.png)](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/image.png)

Находим .mtd и .robconfig файлы выбранного стандартного лэйаута и копируем их в отдельную папку, в которой будут храниться файлы нашего кастомного лэйаута. Предположим папка KR6 R900

[![image.png](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/scaled-1680-/Wh5image.png)](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/Wh5image.png)

2\. Далее необходимо найти CAD 3д модель. В случае с роботами KUKA 3д модели можно найти на сайте KUKA Xpert. Скачиваем архив, в котором находим файлы сборки робота KUKA KR6 R900 и всех осей по отдельности. Файлы моделей осей роботов нужно сохранить в формате STP, или другом формате, который откроется при импорте модели в PowerMill.

Импортируем модели осей по отдельности в PowerMill. Экспортируем оси по отдельности в формате .dmt и сохраняем в папку KR6 R900.

Как правило официальные cad 3д модели роботов сохранены в мировой системе координат робота.

Робот KUKA KR6 R900 установлен на подвижной тележке.

[![image.png](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/scaled-1680-/k8jimage.png)](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/k8jimage.png)

3д модель тележки так же импортируем в PowerMill. Для того чтобы в дальнейшем интегрировать тележку в лэйаут, необходимо на этой стадии правильно подогнать 3д модель тележки относительно мировой системы координат робота.

Для того чтобы спозиционировать тележку, подведем инструмент робота к краям столешницы с двух сторон или к какой либо другой отчетливо видной грани тележки и зафиксируем координаты инструмента относительно мировой СК в этой точке.

[![image.png](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/scaled-1680-/hGmimage.png)](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/hGmimage.png)[![image.png](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/scaled-1680-/jLEimage.png)](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/jLEimage.png)

[![image.png](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/scaled-1680-/CPuimage.png)](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/CPuimage.png)[![image.png](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/scaled-1680-/oNBimage.png)](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/oNBimage.png)

Далее используя инструмент Измерение и Трансформируя стол, подгоняем грани столешницы к значениям с реального робота

[![image.png](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/scaled-1680-/oQOimage.png)](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/oQOimage.png)

[![image.png](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/scaled-1680-/qT6image.png)](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/qT6image.png)

[![image.png](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/scaled-1680-/FU4image.png)](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/FU4image.png)

[![image.png](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/scaled-1680-/eidimage.png)](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/eidimage.png)

Таким образом мы подогнали 3д модель стола под необходимые координаты по осям Y и Z. В данном случае ограничимся этими осями. Для того чтобы подогнать положение по оси X, нам бы потребовалось найти еще одну грань с ярко выраженной точкой на оси X.

Далее экспортируем модель тележки в формате .dmt

Помимо 3д модели робота, нам понадобится Datasheet на модель KR6 R900. Находим его там же на сайте KUKA Xpert или просто в гугле.

[![image.png](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/scaled-1680-/H8Mimage.png)](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/H8Mimage.png)

3\. В папке KR6 R900 открываем файл KR300.mtd используя текстовый редактор по типу NotePad++.

[![image.png](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/scaled-1680-/GKJimage.png)](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/GKJimage.png)

В первую очередь необходимо отредактировать блоки Machine part, в них содержится информация о осях робота, их кинематике и структуре взаимодействия.

На примере разберем блок RobotAxis2, в котором содержится информация о второй оси робота

[![image.png](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/scaled-1680-/pNkimage.png)](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/pNkimage.png)

&lt;control\_info ADDRESS="A" (Уникальный айди данной оси) MIN="-185" MAX="185" (Лимиты перемещения оси, берутся из datasheet) PRIORITY="AUTO" (Дефолтная настройка приоритета оси, можно настроить в софте) HOME="0" (домашнее положение оси) /&gt;

&lt;simple\_rotary X="350.0" Y="0.0" Z="675.0" (Координаты расположения оси вращения оси, берутся из datasheet) I="0" J="1" K="0" (Направление СК вращения оси, в данном случае оставляем как есть) /&gt;

[![image.png](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/scaled-1680-/72rimage.png)](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/72rimage.png)

&lt;dmt\_file&gt;  
 &lt;path FILE="KR300-R2500/BC.dmt" (Здесь указывается имя файла 3д модели нужной оси. Файл должен иметь расширение .dmt и находиться в одной папке с файлом KR300.mtd) /&gt;  
 &lt;rgb R="255" G="110" B="0" (Здесь можно задать цвет 3д модели. В данном случае оставляем стандартный цвет KUKA) /&gt;  
 &lt;/dmt\_file&gt;

 &lt;dmt\_file&gt;  
 &lt;path FILE="KR300-R2500/BCMotor.dmt" /&gt;   
 &lt;rgb R="50" G="50" B="50" /&gt;  
 &lt;/dmt\_file&gt; (в данном сегменте добавляется 3д модель двигателя 2 оси робота. В нашем случае такой 3д модели нет, по этому данный сегмент необходимо удалить)

[![image.png](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/scaled-1680-/3GAimage.png)](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/3GAimage.png)

Далее описываются правила взаимодействия гидравлического балансира робота, а в частности объектов piston и cylinder. Эти объекты присутствуют на роботе KUKA KR300, лэйаут которого мы взяли за основу. В нашем роботе KR6 R900 балансир отсутствует, по этому данные блоки необходимо удалить.

[![image.png](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/scaled-1680-/mXjimage.png)](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/mXjimage.png)

Итоговый вид блока RobotAxis2.

По такой же логике проходимся по остальным блокам RobotAxis.

Модель тележки мы добавляем выше описания робота. Блок с описанием тележки будет выглядеть следующим образом:

[![image.png](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/scaled-1680-/vmrimage.png)](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/vmrimage.png)

После этого мы можем загрузить получившийся лэйаут в библиотеку PowerMill и открыть его. Для этого добавляем лэйаут в окне библиотека роботов, задаем название и указываем путь к .mtd файлу KR6R900

[![image.png](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/scaled-1680-/SeHimage.png)](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/SeHimage.png)

В папке CustomSchemas находим наш лэйаут из двойным нажатием открываем его.

Если в .mtd файле допущены ошибки, то PowerMill покажет уведомление с указанием строки где допущена ошибка.

[![image.png](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/scaled-1680-/fkTimage.png)](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/fkTimage.png)

После успешного открытия обнаруживаем что система координат инструмента отсутствует.

Возвращаемся в .mtd файл и находим блоки head\_attach\_point и table\_attach\_point в начале документа.

[![image.png](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/scaled-1680-/Uykimage.png)](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/Uykimage.png)

В строке head\_attach\_point указывается точка крепления инструмента. Для шпинделя эта точка будет находится на патроне для фрезы. в нашем случае к 6 оси робота крепится инструмент с карандашом.

Взглянем на координаты откалиброванной точки tcp на роботе.

[![image.png](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/scaled-1680-/2f2image.png)](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/2f2image.png)

Видим, что длина инструмента равна 99.7 мм, а смещение по оси X = -1.4 мм

В соответствии с этими данными можем выставить head\_attach\_point в центре фланца робота со смещением по оси Х.

Координаты центра фланца относительно мировой СК берем так же из datasheet [![image.png](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/scaled-1680-/72rimage.png)](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/72rimage.png)

Координаты центра фланца 6 оси соответственно Х=435 Y=0 Z=880

Для того чтобы применить смещение по Х, необходимо выяснить направление осей СК нулевого инструмента на роботе, чтобы понимать в какую сторону относительно мировой СК применить данное смещение. Выясним направление FlangeFrame при помощи VisualComponents.

[![image.png](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/scaled-1680-/wxIimage.png)](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/wxIimage.png)

В нашем случае ось Х нулевого инструмента направленно соосно Z оси мировой СК. Соответственно координаты head\_attach\_point с учетом смещения будет равно Х=435 Y=0 Z=878.6

[![image.png](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/scaled-1680-/3lzimage.png)](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/3lzimage.png)

[![image.png](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/scaled-1680-/uFBimage.png)](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/uFBimage.png)

Получаем такой результат.

При добавлении инструмента, PowerMill всегда создает инструмент по оси Z в направлении минус. Возможно это можно каким-то образом изменить, но я не разобрался :)

По этому нам необходимо развернуть СК head\_attach\_point и откалибровать инструмент на роботе таким образом, чтобы ось Z была направлена во фланец робота.

[![image.png](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/scaled-1680-/WwNimage.png)](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/WwNimage.png)

Меняя вот эти значения вертим СК и проверяем в PowerMill.

Методом подбора находим нужное значение.

[![image.png](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/scaled-1680-/wXAimage.png)](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/wXAimage.png)

[![image.png](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/scaled-1680-/1hXimage.png)](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/1hXimage.png)

создаем инструмент с длиной 100 и получаем следующий результат:

[![image.png](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/scaled-1680-/bZ4image.png)](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/bZ4image.png)

Далее создадим СК столешницы, для удобства дальнейшего импорта обрабатываемых моделей. Для этого обратимся к строке table\_attach\_point

При помощи знакомого инструмента "Измерение" определим координаты точки абстрактного угла рабочей плоскости столешницы.

[![image.png](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/scaled-1680-/hF6image.png)](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/hF6image.png)

Далее занесем эти координаты в строку table\_attach\_point

[![image.png](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/scaled-1680-/N0Gimage.png)](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/N0Gimage.png)

И получаем следующий результат:

[![image.png](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/scaled-1680-/TAximage.png)](https://docs.rise-automation.ru/uploads/images/gallery/2025-10/TAximage.png)

Базово на этом все, удачных эксперементов :D