Перейти к содержанию

Smith2007

ПРОФИ
  • Публикаций

    185
  • Зарегистрирован

  • Посещение

  • Победитель дней

    13

Весь контент Smith2007

  1. Вы серьезно? Но даже если это правда - 10 мм/сек - это слезы. И нержавка - это не чернуха и режется гораздо труднее. Если есть задача резать металл - нужно станок для резки металла. Я придерживаюсь такого мнения. В конечном счете цель - заработать. Но как можно зарабатывать когда у Вас себестоимость работы запредельная?
  2. Вам нужно 2 разных станка. Для резки неметаллов СО2 лазер. Для резки нержавки - волоконный лазер (1064 нм) И не верьте тем, кто говорит, что на СО2 можно резать металл. Себестоимость такого реза будет запредельной и не конкурентной даже близко к волоконным лазерам. Что бы резать с приемлемой скоростью 1 мм нержавки - достаточно 1 кВт лазера. зы. Сталь3 до 5мм можно порезать на 1 кВт в кислородной среде. Нержавку резать лучше в азотной среде.
  3. Дополню по опыту эксплуатации: Распределители бронзовые текут. При чем перепробовал разные. Все текут. Поставил краник как Павел приводил ссылку. Держит 3ий месяц. За время эксплуатации с апреля масло еще не доливал в бак. Примерно раз в 2 недели протираю направляющие от излишков масла. Вывод: Все получилось. Со смазкой теперь полный порядок.
  4. Фрезер дергался сильно. Не понимал причину. Просто обнулил стартовую скорость. Стал плавно работать. Не думаю, что это сильно на производительность повлияет. Ускорения достаточно высокие. Так же и в этом случае, возможно поможет. Хотя у меня гибриды.
  5. Вот еще можно попробовать. Но все же я больше склоняюсь к дефектным шкивам
  6. Это что за дробление такое? При очень малых микрошагах, крутящего момента может просто не хватить преодолеть трение в кинематике. Или там сервошаговые?
  7. Меня одного смущает это значение? Как его определили? Если автор уверяет, что геометрия станка норм, то эти значения нужно вычислить. Кроме того заявление о том, что в разных местах поля по разному ошибка проявляется - говорит все же о кривом портале. В 2Д можно проверить самим станком. Но нужны инструменты, что бы проверить параллельность направляющих. Я бы по сделал импульсы на фанере в точках прямоугольника с максимально возможными размерами (по размеру поля) и замерил диагонали. Сравнил их с вычисленными математически. Что касается значения "длина шага": Вычислить. ШД скорее всего 200 импульсов на оборот. Далее смотрим редуктор. Передаточное отношение можно посчитать по количеству зубьев. Умножить это все на дробление шага и рассчитать.
  8. Думаю не проще. Как минимум нужно было писать какой-то графический интерфейс, разбираться с форматом команд на модбас или uart. Я посчитал это лишней тратой времени. Тут все готовое. Только алгоритм дописать. Хотя возможно есть полноценные эмуляторы этих панелей. Я просто не интересовался.
  9. Постепенно подхожу к финалу... Как всегда - аппетит растет во время еды Жду MPG пульт. Когда тонко настраиваешь высоту не очень удобно использовать кнопки панели. Решил добавить управление с выносного пульта. А в будущем и координатный стол допилить X, Y и так же вывести на пульт. А там и до управления G кодами не далеко
  10. Всем привет! Есть идея добавить функцию автофокуса на автоматизированную колонну. Для точного определения расстояния, датчик (вероятно тоже лазерный) должен быть расположен строго перпендикулярно поверхности детали. Но перпендикулярно установить на линии центра сканатора не получится. Вопрос: Что если расположить датчик с некоторым смещением (X, Y относительно оси сканаторной головы)? Например на боковой стенка сканатора. Но в этом случае для определения высоты нужно будет сначала заготовку под этот датчик завести. Что думает сообщество?
  11. Эта проблема возникает на первом цикле выполнения программы Маркер M0 - при старте всегда False. Он не имеет памяти. Регистр D0 так же не имеет памяти. При страте = 0. Т.е если правильно читать код до D0 должен быть равен 0. Однако из-за ошибки первого цикла D0 = 1. И на последующих циклах D0 = 1 INC(EN, Var); - инкрементный счетчик. EN - сигнал разрешения инкремента Пример2 Синий INC(M8000, D3) M8000 - сигнал что ПЛК в режиме RUN Видно, что условие IF исполнилось на 1ом цикле. При этом D1 осталось равно 0, хотя тоже проверяет условия M0 D2 = 1 так ка на первом цикле маркер M8002 = true И последняя строка идет непрерывный инкремент
  12. Операторы IF, CASE при старте программы исполняются не верно. Следующий код, где условие равно FALSE - операция выполняется при старте программы IF (Условие) THEN Операция; END_IF; Но не все так плохо. Наличие различных функций содержащих встроенное условие позволяют практически отказаться от конструкций IF. Что собственно я и сделал. И пересобрал прошивку (******************************************************************************************* Входы/Выходы X0 - Сигнал датчику нуля оси Z Y0 - STEP. Выход на драйвер ШД Y4 - DIR. Выход на драйвер ШД Регистры M0 Bit Fix Запускает/останавливает движение по заданным координатам M1 Bit Act Ручное движение вверх M2 Bit Act Ручное движение вниз M3 Bit Fix Режим скорости ручного перемещения (0 - медленно S1, 1 - быстро S) M4 Bit Act Корректировка высоты заготовки M5 Bit Fix Поимк нулевой точки M8 Bit Fix Отключение лимитов при ручном движении D9 DWORD Уставка Z в импульсах D128 INT Высота стола (0.1 мм) D132 INT Высота заготовки (0.1 мм) D136 INT Количество импульсов на 1 мм перемещения по оси Z D140 INT Скорость движения по оси Z (мм/сек). Автоматический режим D142 INT Скорость движения по оси Z (мм/сек). Ручное управление D144 INT Текущая координата Axis Z (0.1 мм) D148 INT Текущая высота от заготовки до линзы Work Z (0.1 мм) D152 INT Текущий номер линзы Lens (1..4) D156 INT Фокусное расстояние линзы F1 (0.1 мм) D160 INT Фокусное расстояние линзы F2 (0.1 мм) D164 INT Фокусное расстояние линзы F3 (0.1 мм) D168 INT Фокусное расстояние линзы F4 (0.1 мм) D172 INT MaxZ. Максимальное значение Z D176 INT Фокусное расстояние выбранной линзы D8140 DWORD Текущее значение координаты Z в импульсах M8029 Bit Сигнал завершения позиционирования (в одном цикле) M8147 Bit 1 - происходит перемещение (Занято), 0 - ожидание команды ********************************************************************************************) (* Выполняется однократно при старте программы *) RST(M8002, M0); RST(M8002, M1); RST(M8002, M2); RST(M8002, M4); RST(M8002, M5); (* Вычисляем чатсоту импульсов *) dK := INT_TO_DINT(D136); (* K *) HiSpeed := INT_TO_DINT(D140); (* Hi Speed *) HiFreq := (dK * HiSpeed) / 10; LoSpeed := INT_TO_DINT(D142); (* Lo Speed *) LoFreq := (dK * LoSpeed) / 10; CASE D152 OF 1: (* Линза 1 *) D176 := D156; FLeanse := INT_TO_DINT(D156); 2: (* Линза 2 *) D176 := D160; FLeanse := INT_TO_DINT(D160); 3: (* Линза 3 *) D176 := D164; FLeanse := INT_TO_DINT(D164); 4: (* Линза 4 *) D176 := D168; FLeanse := INT_TO_DINT(D168); ELSE D176 := 0; FLeanse := 0; END_CASE; (* Вычисляем заданную координату Z в импульсах *) TableH := INT_TO_DINT(D128); (* Высота стола *) Mesure := INT_TO_DINT(D132); (* Высота заготовки *) MaxZ := INT_TO_DINT(D172 ); (* MaxZ смещение*) DestZ := MaxZ - (TableH + Mesure + FLeanse) ; (* Значение Z в 0,1 мм с учетом смещения MaxZ*) DestPulsZ := DestZ * (dK/10); (* Вычисляем количество импульсов для смещения *) DMOV( M8000, DestPulsZ , D9); (* Вычисляем текущую координату Z в 0,1 мм*) DMOV( M8000, D8140 , HardZ); AxisZ := MaxZ - (HardZ * 10) / dK; D144 := DINT_TO_INT(AxisZ); (* Вычисляем текущее расстояние от заготовки до линзы Z1 в 0,1 мм*) WorkZ := AxisZ - (TableH + Mesure); D148 := DINT_TO_INT(WorkZ); (* Soft Limit max *) RST((AxisZ > MaxZ), M0); (* Soft Limit min *) RST((AxisZ <= (TableH + Mesure)), M0); RST(((AxisZ <= (TableH + Mesure)) AND NOT M8), M2); (* По сигналам ручного управления отключить автоматическое M0 *) RST((M1 OR M2), M0); RST((M1 OR M2), M5); DDRVA( M0 , DestPulsZ, HiFreq, Y0 , Y4); (* Переключение скорости перемещения в ручном режиме *) IF M3 THEN HandSpeed := HiFreq; ELSE HandSpeed := LoFreq; END_IF; DDRVI( (M1 AND NOT X0) , -80000 , HandSpeed , Y0 , Y4 ); (* Если достигли датчика - прекратить движение вверх *) DDRVI( M2 , 80000 , HandSpeed , Y0 , Y4 ); Y7 := M8147; (* Поиск референтной точки/ мащинный 0 по датчику *) DZRN( M5 , HiFreq, MaxZ * dK, X0 , Y0 ); DMOV(X0, 0, D8140); RST(X0, M5); (* Корректировка высоты заготовки *) MOVP(M4, (D144 - D128 - D176), D132); (* Сброс M0 по оканчании позиционирования *) RST(M8029, M0); RST(M8029, M5); ============= END =============== Axis Z on fiber v8.gxw Axis Z on fiber7.dp2 Прикладываю файлы проекта в формате GXWorks2 для контроллера FX1N и OP320 Edit Tools для панели оператора OP320
  13. Изготовил панель приборов. Закрепил ее на дверце тумбы. Самое удобное для обслуживания место. Ни чему не мешает и доступ легкий. Закрепил элементы и подключил. Все завелось сразу. Теперь вопрос за монтажем панели оператора. А для этого придется переделать существующую на станке панель кнопок.
  14. Пришли комплектующие. Спасибо Александру, очень помог в подборе комплектующих. За кронштейн - отдельная благодарность.
  15. И так ... продолжение. Проснулся как-то я утров в выходной день и подумал, что где-то валяется ПЛК с панелью оператора и не законченной работой. И вот с новыми силами решился таки я погрузится в релейную логику и попытать счастье получить стабильную, заявленную частоту 100 кГц. Первое с чем столкнулся это опять с разрывом мозга. Ну не могу понять я эту релейную логику. Ладно. Набрался терпения и шаг за шагом начал постигать и вдруг... читаю в описании... судя по описанию это именно то, что мне необходимо. А что если поиском по хелпу? Опаньки! Нашел! Это оказывается не функциональный блок, а функция DRVA/DRVI Дай-ка я ее вызову как привык, из ST Бинго! Я получил стабильную частоту! Действительно 100 кГц! Пришлось правда подтяжку к +24В сделать в виде резистора 1 кОм иначе форма сигнала совсем не походила ни на что вразумительное. При этом сама функция получает 4 параметра: Выход импульсов (Это Y0) Выход направления Y4 Частоту следования импульсов Количество импульсов. И так же нужно отметить, что функция не сразу выдает 100 кГц. Сначала плавно нарастает, затем плавно снижает перед торможением. Воодушевившись я бросился писать прошивку. Из неудобств с которыми я столкнулся: Программирование ПЛК и подключение панели оператора через один и тот-же интерфейс, что делает отладку несколько сложнее. Ниже привожу листинг прошивки. (******************************************************************************************* Входы/Выходы X0 - Сигнал датчику нуля оси Z Y0 - STEP. Выход на драйвер ШД Y4 - DIR. Выход на драйвер ШД Регистры M0 Bit Запускает/останавливает движение по заданным координатам M1 Bit Ручное движение вверх M2 Bit Ручное движение вниз M3 Bit Режим скорости ручного перемещения (0 - медленно S1, 1 - быстро S) M4 Bit Корректировка высоты заготовки M5 Bit Поимк нулевой точки D9 DWORD Уставка Z в импульсах D128 INT Высота стола (0.1 мм) D132 INT Высота заготовки (0.1 мм) D136 INT Количество импульсов на 1 мм перемещения по оси Z D140 INT Скорость движения по оси Z (мм/сек). Автоматический режим D142 INT Скорость движения по оси Z (мм/сек). Ручное управление D144 INT Текущая координата Axis Z (0.1 мм) D148 INT Текущая высота от заготовки до линзы Work Z (0.1 мм) D152 INT Текущий номер линзы Lens (1..4) D156 INT Фокусное расстояние линзы F1 (0.1 мм) D160 INT Фокусное расстояние линзы F2 (0.1 мм) D164 INT Фокусное расстояние линзы F3 (0.1 мм) D168 INT Фокусное расстояние линзы F4 (0.1 мм) D172 INT MaxZ. Максимальное значение Z D176 INT Фокусное расстояние выбранной линзы D8140 DWORD Текущее значение координаты Z в импульсах M8029 Bit Сигнал завершения позиционирования (в одном цикле) M8147 Bit 1 - происходит перемещение (Занято), 0 - ожидание команды ********************************************************************************************) IF M8002 = 1 THEN (* Выполняется однократно при старте программы *) M0 := FALSE; M1 := FALSE; M2 := FALSE; M4 := FALSE; END_IF; (* Вычисляем чатсоту импульсов *) dK := INT_TO_DINT(D136); (* K *) HiSpeed := INT_TO_DINT(D140); (* Hi Speed *) HiFreq := (dK * HiSpeed) / 10; LoSpeed := INT_TO_DINT(D142); (* Lo Speed *) LoFreq := (dK * LoSpeed) / 10; CASE D152 OF 1: (* Линза 1 *) D176 := D156; FLeanse := INT_TO_DINT(D156); 2: (* Линза 2 *) D176 := D160; FLeanse := INT_TO_DINT(D160); 3: (* Линза 3 *) D176 := D164; FLeanse := INT_TO_DINT(D164); 4: (* Линза 4 *) D176 := D168; FLeanse := INT_TO_DINT(D168); ELSE D176 := 0; FLeanse := 0; END_CASE; (* Вычисляем заданную координату Z в импульсах *) TableH := INT_TO_DINT(D128); (* Высота стола *) Mesure := INT_TO_DINT(D132); (* Высота заготовки *) MaxZ := INT_TO_DINT(D172 ); (* MaxZ смещение*) DestZ := MaxZ - (TableH + Mesure + FLeanse) ; (* Значение Z в 0,1 мм с учетом смещения MaxZ*) DestPulsZ := DestZ * (dK/10); (* Вычисляем количество импульсов для смещения *) DMOV( TRUE, DestPulsZ , D9); (* Вычисляем текущую координату Z в 0,1 мм*) DMOV( TRUE, D8140 , HardZ); AxisZ := MaxZ - (HardZ * 10) / dK; D144 := DINT_TO_INT(AxisZ); (* Вычисляем текущее расстояние от заготовки до линзы Z1 в 0,1 мм*) WorkZ := AxisZ - (TableH + Mesure); D148 := DINT_TO_INT(WorkZ); (* Soft Limit max *) IF AxisZ > MaxZ THEN M0 :=FALSE; M1 := FALSE; END_IF; (* Soft Limit min *) IF (AxisZ <= (TableH + Mesure)) THEN M0 := FALSE; M2 := FALSE; END_IF; (* По сигналам ручного управления отключить автоматическое M0 *) IF M1 OR M2 THEN M0 := FALSE; M5 := FALSE; END_IF; DDRVA( M0 , DestPulsZ, HiFreq, Y0 , Y4); (* Переключение скорости перемещения в ручном режиме *) IF M3 THEN HandSpeed := HiFreq; ELSE HandSpeed := LoFreq; END_IF; DDRVI( M1 , -80000 , HandSpeed , Y0 , Y4 ); DDRVI( M2 , 80000 , HandSpeed , Y0 , Y4 ); Y7 := M8147; (* Поиск референтной точки/ мащинный 0 по датчику *) DZRN( M5 , HiFreq, MaxZ * dK, X0 , Y0 ); (* Сброс M0 по оканчании позиционирования *) IF M8029 THEN M0 := FALSE; M5 := FALSE; END_IF; После отладки прошивки решил добавить некоторые плюшки, а именно: корректировку высоты заготовки при выставлении оси Z. И для этого мне нужно было привязать один маркер М4 к выполнению кода вычисляющего эту саму корректировку IF M4 THEN D0 := код; END_IF; И на этих 3-х строках я потерял 10 часов. При старте ПЛК, последний упорно выполнял вычисления D0 := .... даже если непосредственно перед условием поставить M4 := FALSE; Перелопатил десятки форумов, включая буржуйские и наткнулся на описание подобной ошибки. Оказывается при компиляции ST при первом цикле создаются какие-то не верные ссылки как раз на условных операторах Добавил еще одну задачу на ПЛК, но уже описанной в виде функциональной логики (оно несколько ближе чем релейная). И о чудо! Условие стало выполнятся как положено! Собственно на этом разработка прошивки завершилась. Осталось дождаться прихода комплектующих и смонтировать все на станок.
  16. Посмотрите тут на форуме есть топик про управление воздухом (вытяжка и продувка). Как раз реализация на ПЛК, который подключается к 6445g и управляет ею. Там есть сигнал старт и сигнал об окончании обработки. При желании можно подключиться к ПЛК по modbus и дописав программу управлять им удаленно. Сигнал "Окончание обработки" появляется после того как завершено задание и голова находится в исходном положении.
  17. Подниму тему. А если возложить это на постпроцессор? Что бы не заниматься построением вспомогательных траекторий?в посте есть команда Rotation onона выполняется когда меняется ось А. Или в настройках nc файла: сначала поворот, затем переход
  18. Нет. Софтовым методом не получится. Я сделал только одну задачу с 1 строкой Y0 := NOT Y0; Частота что-то около 2,5 кГц и частота не стабильная. Внутри меня все сопротивляется такому подходу Это не просто разрывает принципы - это разрывает мозг! Надо разобрать как эти инструкции из ST вызывать. Должен же быть способ.
  19. Добрый день. Есть задача автоматизировать подъемную колонну волоконного маркера. С кинематикой все понятно. Есть ШД, есть переходная пластина и есть крепление на вал ШВП. Снимаю штурвал (ручной) и на его место прикручиваю ШД. Что бы сильно не заморачиваться с электроникой решил воспользоваться готовыми ПЛК и простенькой панелью оператора. В качестве ПЛК взял на пробу китайский клон FX1N и панель оператора OP320A. Судя по описанию FX1N поддерживает импульсный вывод с частотой до 100 кГц на выходах Y000, Y001. Два дня пытаюсь понять как запустить этот самый генератор импульсов но пока безрезультатно. Язык релейной логики мне как-то совсем не понятен, а в инете только о нем и упоминается в связке с термином DRVA. Вопрос: Как сие чудо заставить выдать пачку импульсов? Знаком с языком ST. Он отдаленно напоминает смесь бейсика паскаля и Си. Кто либо пробовал сделать нечто подобное? И как воспользоваться этой DRVA из ST? зы. С контроллерами СТМ32 знаком. Но на ПЛК есть уже своя среда.
  20. Потому что первым он именно с релюшками мне попался и я его сразу купил. Через неделю уже пришел с транзисторными выходами. Думаю разницы ни какой нет.
×
×
  • Создать...