Перейти к публикации
  • Привет. Кажется, ты используешь AdBlock. Наш форум развивается и существует за счет доходов от рекламы. Добавь нас в исключения =) КАК ДОБАВИТЬ?
  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

  • Похожие публикации

    • Автор: PavelK
      Постпроцессор на 3 оси на основе Фанука для PowerMill 2020 и старше.  Под LinuxCNC.
      Из постпроцессора вырезаны вывод циклов, сверловка и куча всего остального (пока что).
      Предназначен для Aman 3040. Для других станков нужно изменять размеры кинематики. 
      Можно использовать вместе с моделью станка: 
       
       
    • Автор: PavelK
      Постпроцессор на 4 оси на основе Фанука для PowerMill 2018 и старше. 
      Поворотка вдоль Y!
      Из постпроцессора вырезаны вывод циклов, сверловка и куча всего остального (пока что).
      Предназначен для Aman 3040. Для других станков нужно изменять размеры кинематики. 
      Можно использовать вместе с моделью станка: https://stankoforum.net/files/file/1199-модель-станка-aman-3040-с-поворотной-осью-для-powermill/
       
    • Автор: PavelK
      Приветствую!
      Подготовка файлов к фрезеровке у меня идёт в программе PowerMill, а в ней есть замечательная возможность показать, как будет происходить обработка с учётом станка - то есть все перемещения шпинделя, проверка столкновений, выход за пределы рабочей плоскости и т.д. В моём случае было важно положение заготовки:
       
      Сейчас покажу как можно самостоятельно сделать модель станка.
      Разумеется, нужно сначала смоделировать сам станок в любой CAD программе (да хоть в Blender или 3DS Max) в упрощённой версии, но что бы все размеры и позиции максимально совпадали.
      Я это сделал в привычном FreeCad 0.19, на примере станка Aman 3040 800W:

      Исходник:  Machine-Aman3040.zip (FreeCad 0.19 и должен быть установлен верстак A2Plus).
      Он немного не совпадает с реальным станком, т.к. я вносил свои изменения в конструкцию.
      Вы можете самостоятельно переделать, если что-то будет сильно не совпадать или пишите - по возможности сделаю 1:1.
      Дальше необходимо разбить станок на составляющие части, а именно на неподвижные (станина), и подвижные (оси X, Y, Z).
      В PowerMill при создании станка есть два понятия: "head" (головка) и "table" (стол).
      Инструмент крепится к головке и перемещается вместе с ней (соответственно и перемещаются все оси). 
      Заготовка же располагается на столе и, грубо говоря, стол является системой координат.
      Нюанс в том, что стол то же может перемещаться - например, в случае наличия поворотного устройства (ось A), или же стол это ось Y,
      а следовательно будет перемещаться координатная система.
      В моём случае поворотного устройства нет и стол так же неподвижен.
      Теперь нужно сделать отдельные файлы для неподвижных и подвижных частей:  станина, ось Y, ось X, ось Z (вместе со шпинделем).
      Вот так выглядят по отдельности:
         
      То есть станина и каждая ось - весь набор составляющих.
      Важно: не перемещайте составляющие при сохранении - для них всех должна сохранятся единая система координат (точка отсчёта).
      Сохраняем каждый файл в формате *.STEP (в случае FreeCAD) или, к примеру, в SolidWorks  *.sldprt.
      Теперь нужно каждый файл сконвертировать в составляющую станка для PowerMill (файл в формате dmt).
      Запускаем PowerMill, в верхнем меню File -> Import model (можете в списке типов файлов посмотреть поддерживаемые для экспорта из вашей CAD) и ничего не меняя сразу делаем экспорт File -> Export Model,  в типе файла выбираем "Autodesk Manufacturin Triangles (*.dmt)", и выбираем какую-нить папку. Так проделываем со всеми файлами.
      У меня вот так:

      Все эти файлы я буду в дальнейшем называть "части станка".
      Теперь нам нужно описать для PowerMill где какие части станка и что они могут.
      Кстати, подробная документация (MTDUserManual) в конце поста.
      Сначала поясню, что нам нужно определиться с тем,  какие перемещения от каких зависят.
      В случае моего станка ось Z зависит от оси X, а она в свою очередь зависит от оси Y, а они зависят от положения head (головки)
      Зависимость выясняется просто - что вместе с чем "ездит" от того и зависит. То есть, к примеру, при перемещении оси Y на 100 миллиметров - вместе с ней поедет по Y и ось X, а вместе с ними поедет и ось Z (можно на реальном станке поперемещать, что бы понять, что имел ввиду перемещение оси Z  по оси X и Y).
      Если был бы 5и координатный станок, то было бы так же, но дополнительно ось U зависела бы от W, а они зависели бы от положения table (стола), так как заготовка крепится к нему.
      Ладно, по ходу может станет понятнее.
      Создаём в папке, в которую сохраняли файлы на предыдущем шаге,  пустой текстовый файл и сразу меняем у него расширение на "*.mtd" и открываем его на редактирование. Кстати, удобнее всего это делать в Notepad++.
      Файл пишется в формате xml. 

      Кто не вкурсе, то в кратце и упрощённо: всё состоит из "блоков".
      <name>  начинает блок name
         вложенные блоки
      </name> заканчивает блок name
      name - просто название блока. Каждый блок должен быть начат и закончен как на примере выше.
      В блок может быть вложен другой блок. Так же у блоков могут быть параметры: 
      <name  param="value">
         вложенные блоки
      </name>
      Где param - название параметра, а value - его значение. Параметры прописываются только в начале блока.
      Если в блоке нет содержимого, то можно воспользоваться "короткой записью":
      <name param="value" />   То есть начали блок, объявили параметр (не обязательно) и закончили блок.

      Блоки считываются и обрабатываются программой PowerMill и каждый блок (и параметр) имеет для неё значение.

      Мы так же можем указать комментарий - то, что будет проигнорировано программой:
      <!--  весь этот текст будет проигнорирован  -->
      Таким образов в файле я буду писать комментарии для вас.
      Так, пока что этих понятий должно хватить.
      Пишем:
      <?xml version="1.0" ?>      <!-- Даём понять, что документ в xml формате -->
      <machine xmlns="x-schema:PowermillMachineTool" POST="SimPost.">    <!-- Начинаем описание станка. Задаём постпроцессор симуляции. -->
         <machine_part>  <!-- неподвижные комоненты-->
            <model_list>
               <dmt_file>
                  <path FILE="Frame.dmt" />
                  <rgb R="100" G="100" B="200" />
               </dmt_file>
            </model_list>
         </machine_part>
      Блок machine_part описывает какую-либо часть станка. В нашем случае это станина целиком, т.к. она неподвижна.
      Вложенный блок dmt_file говорит, что мы сейчас укажем файл, откуда брать часть станка.
      Во вложенном блоке path  мы указываем путь до файла с этой частью и его название. Так как файл с описанием у нас лежит в той же папке, что и файлы частей станка, то путь указывать не нужно (путь относительный текущей папки, в которой наш файл с описанием станка).Во вложенном блоке rgb мы можем указать цвет детали в формате RGB (можно взять значения из палитры Фотошопа), в моём случае для станины указал сиреневый.
      Да, блоков dmt_file, то есть составляющих одной части, может быть несколько
      <dmt_file>
      .....
      <dmt_file>
      <dmt_file>
      .....
      <dmt_file>
      Это если вам нужно, к примеру, по разному раскрасить каждую составляющую станины. Мне же, пока что, ни к чему.
      Прописываем стол:
         <machine_part NAME="table" > <!-- Стол у нас не двигается. Если двигался бы, то делаете по аналогии с блоком head, он чуть ниже  -->
         </machine_part>
      Здесь мы указали часть, отвечающую за стол. Да, она пустая, так как стол у нас неподвижен.
      Чуть дальше мы укажем систему координат стола и её расположение.
      Теперь же прописываем оси:
          <!-- Описания осей -->  
          <machine_part>
              <axis>   <!-- указываем PowerMill, что эта часть станка является "осью" -->  
                  <control_info ADDRESS="Y" MIN="0" MAX="400" VALUE="260" />    <!-- указываем, какой именно, где она сейчас и ограничения перемещений -->
                  <simple_linear I="0" J="1" K="0" />   <!-- указываем тип перемещения а так же как она направлена в пространстве (как будет перемещаться) -->
              </axis>    
              <model_list>   <!-- Укажем, из каких файлов состоит эта часть станка -->
                  <dmt_file>
                      <path FILE="AxisY.dmt" />
                      <rgb R="200" G="200" B="200" />
                  </dmt_file>
              </model_list>
                      
              <machine_part>  <!-- Вложенный блок части станка, так как от оси Y зависит ось X -->
                  <axis>
                      <control_info ADDRESS="X" MIN="0" MAX="300" VALUE="170" />
                      <simple_linear I="1" J="0" K="0" />
                  </axis>    
                  <model_list>
                      <dmt_file>
                          <path FILE="AxisX.dmt" />
                          <rgb R="200" G="200" B="200" />
                      </dmt_file>
                  </model_list>            
                  <machine_part>  <!-- Вложенный блок части станка, так как от оси X зависит ось Z -->
                      <axis>
                          <control_info ADDRESS="Z" MIN="0" MAX="80" VALUE="20" />
                          <simple_linear I="0" J="0" K="-1" />
                      </axis>    
                      <model_list>
                          <dmt_file>
                              <path FILE="AxisZ.dmt" />
                              <rgb R="200" G="200" B="200" />
                          </dmt_file>
                      </model_list>
                  
                     <!-- Вложенный блок виртуальной части станка head. Тем самым мы указываем PowerMill где по зависимостям находится головка. И, к примеру, если нужно  будет головку переместить по Y на 100 мм, то так же по Y на 100 мм будут перемещены предыдущие machine_parts   -->
                      <machine_part NAME="head">
                      </machine_part>    
                      
                  </machine_part>
              </machine_part>    
          </machine_part>        
       
      Надеюсь, понятно про вложенность.
      Пояснение по поводу: <control_info ADDRESS="Z" MIN="0" MAX="80" VALUE="20" /> 
      В параметрах MIN и MAX мы указываем пределы перемещений для оси (в мм). 
      Параметр VALUE указывает где сейчас расположена часть станка в CAD редакторе относительно нуля по расстоянию (когда ось доехала до минимума). Поэтому проще всего перед экспортом переместить в соответствующее место и что бы положение части станка оказалось таким же, как и на реальном станке. За ноль я считаю положение при срабатывании концевого датчика.

      Кстати, можно так же указать параметр HOME и задать какое-либо значение - тогда, при нажатии кнопки Home в управлении станком PowerMill оси будут перемещены в это значение.
      Пояснение по поводу: <simple_linear I="0" J="0" K="-1" /> 
      Название блока говорит о том, что это просто линейное перемещение.
      В параметрах I, J, K мы задаём вектор направления, в котором будет перемещаться часть станка. В данном случае по Z будет сверху вниз отсчёт вестись. Да, возможно перемещение и под углом (установив, к примеру, 0.5 в K и J).
      Для поворотного нужно название simple_rotary (в параметрах нужно также будет указать координаты X Y Z - центр вращения).
       
      Указываем положение глобальной системы координат:
      <table_attach_point PART="table" X="-154" Y="7" Z="54.5"  I="0" J="0" K="1" />
      В этом блоке мы указываем, где для PowerMill будет начинаться глобальная система координат и как она будет ориентирована и к какой части станка привязана (что бы она перемещалась вместе с ней).
      Вот про что речь:

      Относительно глобальной системы координат располагается заготовка.
      Где она должна располагаться? Рекомендую в том месте, куда станок приходит в ноль (домашняя позиция) при поиске начал и откуда идёт увеличение координат по X и Y. 
      НО, учитывая, что на Aman 3040 нет концевых датчиков (которые всё же лучше поставить самостоятельно для удобства), то за 0 можно принять положение, когда каждая ось отогнана "до упора" (вручную на станке).
      Значения берёте из вашей CAD программы относительно всё той же системы координат, в которой сохраняли. Ориентацию так же нужно будет поставить, что бы направление системы координат PowerMill соответствовала то, что на станке (в управляющей станком программе).
      Скачав исходник моего станка можете глянуть координаты компонента HomePointer что бы более понятно стало. 
       
      Указываем точку привязки инструмента:
      <head_attach_point PART="head" X="19.5" Y="267.0" Z="141.5" I="0" J="0" K="1" />    
      Это координаты и ориентация, где будет инструмент (фреза) и куда направлена. В нашем случае логично, что на выходе из шпинделя сверху вниз. Соответственно из CAD, в которой делали станок, берём эти координаты, относительно глобальных.
      НО тут есть проблема с тем, что шпиндель с ручной сменой инструмента и положение цанги при закручивании может гулять туда-сюда (и сам вылет инструмента заодно). 
      ВАЖНО:
      Блоки table_attach_point  и head_attach_point  должны располагаться первыми внутри блока machine. В исходниках всё правильно. В посте указал в таком порядке для более лёгкого осмысления что за чем.
      Постпроцессор:
      Так же можно и нужно указать постпроцессор симуляции для этого станка в блоке machine:
      <machine  xmlns="x-schema:PowermillMachineTool"   POST="SimPost." >
      В данном случае это штатный PowerMill постпроцессор для симуляции. Есть ещё  "pmpMultiaxis.*", но про них крайне мало информации, так что если удастся разобраться подробнее, допишу этот параграф.
      Дополнительно:
      Можно указать ещё процесс смены инструмента.  Но т.к. он у всех разный описывать здесь не буду. В документации, есть что-то про это.
      Что бы была проверка на столкновения, то у блоков machine_part нужно указать параметр NAME со значением на ваше усмотрение.
       
      Ну и в общем то на этом всё.
      Теперь, как тестировать наш "станок":
      1. В PowerMill создаёте новый проект. 
      2. В левой панели Станки -> импорт станка:

      3. Выбираете наш файл Aman3040.mtd
      4. Будет ошибка "Постпроцессор установлен но не может быть сконфигурирован":

      Что бы её не было нужно указать постпроцессор, как именно написал выше в соответствующем параграфе.
      5.  Станок импортировался.
      6. Можем перемещать оси в ручном режим, для этого правой кнопкой на станке и в контекстной менюшке нажать "Положение":

      7. Дальше как обычно - импортируем какую-либо тестовую модель, создаём какую-либо обработку, выбираем инструмент и запускаем симуляцию траектории. Профиль патрона, пока что, можно не создавать. 
      8. Инструмент встанет куда нужно и сможем увидеть, правильно ли всё сделали.
      Примечания: PowerMill может проверять на столкновения, поэтому, чем больше будет составляющих и частей станка, тем более производительный компьютер нужен. Не увлекайтесь с точностью повторения станка - только самое главное, что может повлиять на работу или за что может задеть инструмент. Так же могут быть ложные срабатывания - тогда в CAD нужно будет подправить модель, к примеру, если сделали каретки подвижными на валах, то нужно увеличить диаметр отверстия в каретке (на пару соток достаточно обычно).
      Все исходники: Machine-Aman3040.zip
      Отдельно готовый станок для импорта:  
       

      Готовый станок с повороткой вдоль Y:  
       
      Постпроцессор для LinuxCNC:

      Документация по разработке: MTDUserGuide.pdf
      ВАЖНО:  После скачивания распаковать архив и импортировать станок как написано выше. Модель станка не точная копия Aman3040 и могут быть отличая в расположении/размерах, т.к. я вносил изменения в свой станок. Если что-то будет сильно отличаться - измерьте и напишите, внесу изменения. Либо можете всё сделать самостоятельно исходники все в архиве.
    • Автор: PavelK
      Приветствую!
      Померла материнка на копе, который фрезерным станком управляет. В моём случае станочек всё тот же Aman 3040 800W. 
      Проблема в том, что нынче материнок с LPT портами достать трудновато, да к тому же все они под старые процессоры и память, так что квест по поиску мощного компа с LPT достаточно знатный.
      Выходом было бы купить контроллер с управлением по USB, но я лично обхожу стороной их из-за неудачного опыта с несколькими представителями.
      В общем, решил купить вот такую плату расширения, которая вставляется в свободный PCIe X1 (с X16 тоже будет работать) слот:

      Название ему DEXP 2COM+LPT.  Сделан на основе чипа WCH CH382L. 
      Заработал "из коробки" с Linux kernel 4.19 (Debian 10, LinuxCNC 2.8), с более ранними скорее всего не будет, т.к. с ядром до 4.9 точно не подхватывался.
      И, как говориться, есть один нюанс:  проблема в том, что у него на выходе, вместо стандартных для LPT порта +5 Вольт, только +3.3 Вольта.
      Хорошо хоть входы толерантны к +5 Вольтам.
      Из-за этого управление шпинделем не работало от слова совсем - при запуске ПК шпиндель начинал вращение внезависимости от управления из LinuxCNC.
      Виной тому плата управления (если её можно так назвать) "Mach 3 Interface Board":

      Точнее её схема, а именно проблема в подтяжке оптопары управления инвертором  к внутренним +5 Вольтам, поэтому разницы между 3.3 Вольтами вполне хватает для её полного открытия (1.2 Вольта).
      Чтож, будем исправлять.  Находим на плате разъём от инвертора шпинделя,  сразу над ним видим ту самую оптопару PC817:

      Перевернув плату, можем легко найти её подтягивающий резистор.
      Я не придумал ничего проще, чем разрезать дорожку от него до оптопары и последовательно припаять диод, что бы на нём упало напряжения и разница была меньше 1.2 Вольта.
      В общем, вот так:

      На остальные провода не смотрите - это доделки для подключения концевиков.

      В красном овале резистор. Слева от него припаянный диод. Под ним разрезал прежнюю дорожку от резистора до оптопары.

      В моём случае диод хз какой. В принципе, подойдёт любой (только не Шотки, т.к. на них падение маленькое),
      к примеру 1n4007, лучше парочку последовательно, так как в среднем падение на диоде 0.6 Вольта.
       
      Настройка LinuxCNC:
      1. В BIOS проверьте, что бы LPT порт был отключён (да же если на материнке его нет, в BIOS может быть настройка)
      2. В консольке/терминале вбиваем:
      sudo apt install pciutils
      sudo lspci -v
      3.1. В выводе последней команды ищем что-нить про "Parallel controller" или "Serial controller"
      и смотрим у него адреса после "I/O Ports  at ...." и запоминаем.
      3.2. Если ничего не нашлось, можно попробовать
       sudo dmesg | grep parport
      Должно быть что-то вида: "parport0: PC-style at 0xec00, irq 19 [PCSPP,TRISTATE]"
      Запоминаем адрес после "at", в моём случае 0xEC00. 
      4. Открываем файл "/home/<имя пользователя>/linuxcnc/<название станка>/<название станка>.hal", ищем строку, похожую на 
      "loadrt hal_parport cfg="0 out"  и вместо 0 указываем адрес нашего LPT порта, в моём случае 0xec00. Начинаться должен всегда с "0x" , т.к. шестнадцатеричное число. Либо можно оставить 0, что значит найти первый попавшийся.
      Вот и всё. В остальном плата работает без нареканий уже больше месяца, но жду с Алишки другую, дабы попробовать и про запас.
    • Автор: СЛОН
      Здравствуйте!
      Делаю бесконтактный кромкоискатель по осям X Y. Так как он оптического типа, то срабатывает в том числе тогда, когда просто проходит НАД заготовкой, поэтому возникает ошибка "probe tripped during a jog".
      Перерыл документацию и не могу найти, как можно отключить обработку такой ошибки? Подскажите, пожалуйста. В Линукс и в ЧПУ - чайник. Пока что освоил только основную настройку LinuxCNC.
×
×
  • Создать...