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

Mach3 Авто смена инструмента

Рекомендуемые сообщения

Здравствуйте, моча особо не использовал. Но пришлось установить так как восстанавливал старый токарный ЧПУ, а у матча есть для токарки.

Заминка вот в чем:

Нужно подключить шпиндель и револьверную головку к матчу. По шпинделю информация еще есть, а по авто смене особо никто ничего не делает :sorry:

Кто столкнулся или знает как настроить авто смену?

А именно:

Как настроить порт?

Какой сигнал подается из порта?

 

На сколько я понимаю, подается сигнал шага, но вот какой и сколько так не знаю!

 

Для управления револьверной головкой использую контроллер на pic микросхеме.

Там датчиков позиции нет, просто выставляют все резцы по очереди подали сигнал - оно прокрутило на 1 позиции, еще 1 сигнал через 30 секунд (30 секунд пауза нужна для того чтобы револьверная головка покрутилась на 1 позицию, если подать до отключения вращения - механизм не отреагирует)

 

Код получится

М6 Т1

код паузы на 30 секунд (кстати кто знает подскажите и его, чтоб не искал :lol: )

а дальше контроллер включит револьверную головку и оно провернет на 1 позицию

 

Кто может, помогите ПОЖАЛУЙСТА :help:

Поделиться сообщением


Ссылка на сообщение

Пауза задается кодом "G4 P(время в сек)"

Пример:

g4 p30

Поделиться сообщением


Ссылка на сообщение
Дата: (изменено)

В Mach3 по команде смены инструмента исполняется скрипт, точнее 2 скрипта, в которые и нужно прописывать команды, или небольшую прогу на VB, обслуживающие устройство смены инструмента. Файлы лежат в папке \Mach3\macros\Mach3Turn\ M6Start.m1s и M6End.m1s. как точно это работает, пока не вникал, не дошло до этого дело.

Если кто знает поподробней, делитесь пожалуйста.

Может примеры какие есть.

Изменено пользователем gktuning

Поделиться сообщением


Ссылка на сообщение
Дата: (изменено)

Спасибо но я уже довольно давно разобрался с этим!

Использую макрос:

ActivateSignal( OUTPUT2 ) - включил сигнал

Sleep 1500 - 1,5 секунд сигнал включен

DeActivateSignal( OUTPUT2 ) - выключил

Code "G04 P2" - пауза на 2 секунд (нужна для установки инструмента)

 

 

Так ка в РВГ нет датчиков позиции, большего там ничего не нужно!

Для себя сделал смену инструмента с позициями!

Пик запрограммирован на длину сигнала

1 мсек - инструмент №1

2 мсек - инструмент №2

и так далие

Используется только 2 пина в порте

один выход и один вход для обратной связи

Номер инструмента считывает индуктивный датчик! поставил 3 штуки

Инструмент выбирается сочетанием, если 1 и 2 задействован - инструмент №8 и тому подобное!

Доведу до ума все сфотографирую и выложу кому будет интересно

Изменено пользователем Drake

Поделиться сообщением


Ссылка на сообщение

Спасибо, будет очень интересно посмотреть результат!

Поделиться сообщением


Ссылка на сообщение
Дата: (изменено)

дабы не плодить отдельные темы, пример автосмены инструмента на токарных станках 1700вф 30, 1700Ф30У, МС1200 и тому подобных.

 

на револьверной головке станка расположены 4 микропереключатели

 

3 из них указывают позицию (двоичная система) (Mach3 INPUT1,2,3 ) , Правый крайний для синхронизации (Mach3 input 4), (когда он активен считываем код позиции)

на левой стороне револьверки, микропереключатель зажима инструмента (Mach3 OEMTrig1) , срабатывает когда инструмент зажат (после реверса двигателя)

включение двигателя по схеме (mach 3 Output1)

реверс (mach 3 Output14)

9069978866_05ea7ab665_z.jpg

 

по команде изменить инструмент:

включаем двигатель револьверки. (Mach3 Output1 ->ON)

и проверяем положение переключателей позиции и синхронизации.

данные берем только тогда когда активен input 4 (синхронизация)

если нашли наш номер,

устанавливаем двигатель (Output 1 -> OFF)

вкл. Реверс и ждем пока не сработает переключатель зажима инструмента (Mach3 OEMTrig1)

 

для этого изменяем M6Start.m1s в директории mach3\macros\Mach3Turn\

 

лист программы ниже

'_____________________________________________________

'M6Start.M1s

' Remember Lathe tools are called from the code/mdi T0606 M6 (for tool 6, offset 6) then M6.

' output 5 -pirmyn

' output 14 atgal

Sub Main()

NewTool = GetSelectedTool()

OldTool = GetCurrentTool()

MaxToolNum = 6 'Max number of tools for the changer

While NewTool > MaxToolNum

NewTool = Question ("Enter New Tool Number up to " & MaxToolNum)

Wend

If NewTool = OldTool Or NewTool = 0 Then

Exit Sub

End If

If OldTool <> NewTool Then

While Slot <> NewTool

ActivateSignal(OUTPUT5) 'start rotating forward

If IsActive(INPUT1) And Not IsActive(INPUT2) And Not IsActive(INPUT3) And IsActive (INPUT4) Then

Slot = 1

End If

If Not IsActive(INPUT1) And IsActive(INPUT2) And Not IsActive(INPUT3) And IsActive (INPUT4) Then

Slot = 2

End If

If IsActive(INPUT1) And IsActive(INPUT2) And Not IsActive(INPUT3) And IsActive (INPUT4) Then

Slot = 3

End If

If Not IsActive(INPUT1) And Not IsActive(INPUT2) And IsActive(INPUT3) And IsActive (INPUT4) Then

Slot = 4

End If

If IsActive(INPUT1) And Not IsActive(INPUT2) And IsActive(INPUT3) And IsActive (INPUT4) Then

Slot = 5

End If

If Not IsActive(INPUT1) And IsActive(INPUT2) And IsActive(INPUT3) And IsActive (INPUT4) Then

Slot = 6

End If

Wend

Sleep(100)

DeActivateSignal(OUTPUT5) 'stop rotating forward, rotate backward now

End If

Sleep(500)

ActivateSignal(OUTPUT14) ' rotating backward

Sleep(500)

While IsActive(OEMTrig1) ' kol index aktyvus

ActivateSignal(OUTPUT5)

Wend

DeActivateSignal(OUTPUT5)

Sleep(500)

DeActivateSignal(OUTPUT14)

 

SetOEMDRO(824,NewTool)

Code "G4 P2" 'A pause time of 2 seconds to give your reverse turret time to seat

While IsMoving

Wend

 

End Sub

Main

'________________________________________________

Изменено пользователем Ricard

Поделиться сообщением


Ссылка на сообщение

:good: Вот это по взрослому! :hi:

Поделиться сообщением


Ссылка на сообщение

А кто-нибудь обладает информацией, подскажите, может ли Мач в реальном времени управлять скоростью вращения шпинделя (вариант для токарного станка), для того, чтобы поддерживать одинаковую окружную (линейную) скорость при обработке детали с изменяющимся радиусом? Кто-нибудь это реализовывал на практике?

Поделиться сообщением


Ссылка на сообщение

Писал макрос для другого поиска инструмента, по большому счету двоичный код по OUTPUT1-3, сигнал для начало поиска по OUTPUT4 и ожидания ответа по INPUT1

Если по отдельности то все работает, но вот автоматом код по Т не пашет. Подскажите как осуществить, кто может.

NewTool = GetSelectedTool()

OldTool = GetCurrentTool()

MaxToolNum = 6

Select Case ToolNumber

Case Is = 1

ActivateSignal(OUTPUT3)

Sleep 1000

DeActivateSignal(OUTPUT3)

Sleep 1000

ActivateSignal(OUTPUT4)

Sleep 1000

DeActivateSignal(OUTPUT4)

Case Is = 2

ActivateSignal(OUTPUT2)

Sleep 1000

DeActivateSignal(OUTPUT2)

Sleep 1000

ActivateSignal(OUTPUT4)

Sleep 1000

DeActivateSignal(OUTPUT4)

Case Is = 3

ActivateSignal(OUTPUT2)

ActivateSignal(OUTPUT3)

Sleep 1000

DeActivateSignal(OUTPUT2)

DeActivateSignal(OUTPUT3)

Sleep 1000

ActivateSignal(OUTPUT4)

Sleep 1000

DeActivateSignal(OUTPUT4)

Case Is = 4

ActivateSignal(OUTPUT1)

Sleep 1000

DeActivateSignal(OUTPUT1)

Sleep 1000

ActivateSignal(OUTPUT4)

Sleep 1000

DeActivateSignal(OUTPUT4)

Case Is = 5

ActivateSignal(OUTPUT1)

ActivateSignal(OUTPUT3)

Sleep 1000

DeActivateSignal(OUTPUT1)

DeActivateSignal(OUTPUT3)

Sleep 1000

ActivateSignal(OUTPUT4)

Sleep 1000

DeActivateSignal(OUTPUT4)

Case Is = 6

ActivateSignal(OUTPUT1)

ActivateSignal(OUTPUT2)

Sleep 1000

DeActivateSignal(OUTPUT1)

DeActivateSignal(OUTPUT2)

Sleep 1000

ActivateSignal(OUTPUT4)

Sleep 1000

DeActivateSignal(OUTPUT4)

End Select

While Not isActive(INPUT1)

sleep 100

Wend

Поделиться сообщением


Ссылка на сообщение

Мы тоже прикрутили к Mach3Turn револьверную голову (турель). Не без сложностей, но прикрутили.

 

Отмечу главное, на что нам пришлось выяснять путем проб и ошибок и потом бороться с этим:

 

1) команда Sub останавливает исполнение программы, почему так и неясно.

2) Exit Sub без вводной команды Sub РАБОТАЕТ

3) Естесственно, необходимо соблюдать синтаксис (типа, правописание), это для нас, не программистов,

было главной сложностью, так как синтаксис нечетко описан в мануалах. Мы использовали два мануала -

один по программированию для Mach3, другой по Cypress Enable, версии VВ, используемой в Mach3.

Оба - на англ., нужны кому? Выложу, если да.

4) Выявилось несоответствие номеров физических номеров выходов на плате MODBUS (пр-ва Purelogic)

описанию в документации, поэтому пришлось переустанавливать настройки входящих сигналов в Mach3

5) Хотя блок штатный датчиков положения турели имеет осевую регулировку, точно его выставить не удалось

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

Но(О, чудо!) мы смогли выставить компенсирующие паузы срабатывания останова вращения турели

программным способом (команда sleep() ).

6) логика опроса датчиков положения немного другая, нежели у коллеги Drake в вышеприведенном макросе,

использовались 6 комбинаций условий, когда лишь один датчик работает, остальные не работают.

7) наконец, главное, с чем не сразу разобрались - команда смена инструмента (m6 или m06) должна далее содержать

декларацию инструмента (через T), так вот, сразу после T идет ряд цифр, в простом варианте - 0, затем однозн номер

инструмента, затем опять 0, и числовое значение оффсета инструмента (например: T0402 - инструмент 4, оффсет 2).

Выяснилось, что неважно сколько цифр стоит после T, последние 2 цифры - всегда значение оффсета, а оставшиеся -

номер инстумента. Примеры: Т4509 - означает инструмент 45, оффсет 09. Т00890 - инструмент 8, оффсет 90.

Т15008 - инструмент 150, оффсет 8. Обратный пример: если номер инструмента 5, то команда будет выглядеть так:

- M6 T500 или M6 T0500 (последние два ноля - оффсет, следовательно мак3 правильно понимает, что требуемый

инструмент - 5 (05, что одно и тоже)...

Почему это все обьясняю? Да потому, что пока не дашь корректно команду M6T****, выполняться она не будет, макрос

m6start.m1s при вводе команды в формате "M6T4" не запускался у нас.....

 

В конце, после опр паузы, примерно 0,5 сек, мы включили в программу проверку состояния входов, для определения,

в правильном, нужном ли положении стоит турель и при несоответствии текущего программного (getcurrenttool()

инструмента и реального датчика турели, включается E-stop и выдается сообщение. Если соответсвие имеет

место быть - выход из макроса с извещением о корректности и номером положения турели.

 

Как-то так. Чуть позже выложу макрос и видео работы турели.

Изменено пользователем PeterPan

Поделиться сообщением


Ссылка на сообщение

Забыл написать, что логика реверса турели и его (реверса) отключения нами реализована помимо Mach3/

Мы использовали 2 магнитных пускателя, с набором как NO так и NC пар контактов. При выключении вращения

(это делает Mach3), один пускатель выключается, включая собой другой, через который фазы идут на тот же мотор

турели уже с переполюсовкой (включается реверс). Отключение реверса/зажима производится штатных концевиком,

по факту зажима турели. Все, система приходит в исходное состояние, Mach3 видит два входящих сигнала -

1) датчик положения турели 2) концевик зажима.

 

Концевик зажима применен с двумя независимыми парами контактов - одна NO (это датчик для Mach3),

другая NC (это выключатель реверса/зажима).

 

--------------------------------

*) NO - нормально разомкнуто, NC - нормально замкнуто

Поделиться сообщением


Ссылка на сообщение

Добрый день!!! Перечитал форум по данной теме, на счет макроса вроде как понятно более или менее, но на счет "железа" немного непонятно. Какой тип контроллера нужно установить, чтобы управлять 2 шаговыми двигателями (на осях) и при этом автоматизировать смену инструмента (револьверная головка)?

Поделиться сообщением


Ссылка на сообщение

PeterPan, Добрый день.

Можно пообщаться с Вами в личке?

Поделиться сообщением


Ссылка на сообщение

вот и я у себя замутил револьверную головку

для мелочевки в серии оказалась очень полезная вещь!

управление под mach3 ,использован скрипт выложенный выше форумчанином с ником Ricard,за что ему СПАСИБО!

правда пришлось скрипт чуть подправить(слава Богу сын в этом шарит!) ,у меня концевики положения резцов все заведены в дополнительный лпт порт

повторяемость деталек получилась по X +- пол сотки ,что меня очень порадовало

post-41013-092180500_1501492075_thumb.jpg

post-41013-096744100_1501492130_thumb.jpg

post-41013-075860200_1501492209_thumb.jpg

post-41013-053890100_1501492484_thumb.jpg

post-41013-028600700_1501492649_thumb.jpg

post-41013-053325500_1501492785_thumb.jpg

post-41013-047886900_1501492964_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Дата: (изменено)

Здравствуйте, подскажите, пожалуйста, а как прописать в макросе вращение револьверной головы не от АИРа или РД-шника, а от ШД. Поясню задачу. у меня точно такая же револьверная головка и блок управления 4-мя осями. Вместо РД-09 я установил ШД и подключил его к выходу оси "А", но теперь нарвался на проблему, что если я прописываю

If OldTool <> NewTool Then

While Slot <> NewTool

Code "G1 F80 A-2.5" 'start rotating forward

If IsActive(INPUT1) And Not IsActive(INPUT2) And Not IsActive(INPUT3) And IsActive (INPUT4) Then

он пока не прокрутит ось "А" на заданную величину (-2,5), дальше программу и условия "If" вообще не рассматривает. А как запустить вращение двигателя и, что бы, при этом выполнялись остальные условия программы (проверка слота) - не знаю.

Изменено пользователем Shurup89

Поделиться сообщением


Ссылка на сообщение

Что, не хотите отвечать???

Ну и не надо, тогда сам расскажу, как решил данную задачу, может кому пригодится

Использовал я пневматическую голову, установив на неё датчики следующим образом

IMG_E2874.JPG 

IMG_E2876.JPG 

IMG_E2877.JPG 

IMG_E2878.JPG 

IMG_E2879.JPG 

Поделиться сообщением


Ссылка на сообщение

Макрос получился следующий:

Sub Main()                                                                                                                                                

NewTool = GetSelectedTool()                                                                                      

OldTool = GetCurrentTool()                                                                                       

MaxToolNum = 6 'Max number of tools for the changer                                              

If NewTool > MaxToolNum Then                                                                                

Code "(Всего 6 инструментов, дебил)"                                                                   
Exit Sub                                                                                                                      

End If                                                                                                                           

If NewTool = OldTool Or NewTool = 0 Then                                                               

Exit Sub                                                                                                                     

End If                                                                                                                          

If OldTool <> NewTool Then                                                                                      


If IsActive(INPUT1) And IsActive(INPUT2) And IsActive(INPUT3) And IsActive (INPUT4) Then        

Slot = 1                                                                                                                                      

End If                                                                                                                                         

If Not IsActive(INPUT1) And IsActive(INPUT2) And IsActive(INPUT3) And IsActive (INPUT4) Then        

Slot = 2                                                                                                                                      

End If                                                                                                                                          

If Not IsActive(INPUT1) And Not IsActive(INPUT2) And IsActive(INPUT3) And IsActive (INPUT4) Then   

Slot = 3                                                                                                                                      

End If                                                                                                                                         

If IsActive(INPUT1) And Not IsActive(INPUT2) And Not IsActive(INPUT3) And IsActive (INPUT4) Then   

Slot = 4                                                                                                                                    

End If                                                                                                                                          

If IsActive(INPUT1) And IsActive(INPUT2) And Not IsActive(INPUT3) And Not IsActive (INPUT4) Then   

Slot = 5                                                                                                                                       

End If                                                                                                                                        

If IsActive(INPUT1) And IsActive(INPUT2) And IsActive(INPUT3) And Not IsActive (INPUT4) Then       

Slot = 6                                                                                                                                      

End If                                                                                                                                          

End If                                                                                                                                          

If Slot < NewTool Then                                                     

A1 = NewTool * 0.5 - Slot * 0.5                                        

Code "(1111)"                                                                    
End If                                                                                

If Slot > NewTool Then                                                      

A1 = MaxToolNum * 0.5 + NewTool * 0.5 - Slot * 0.5         

Code "(2222)"                                                                     

End If                                                                                  

ActivateSignal(Output4)                                                      
  Sleep (1000)                                                                    

If GetOemLed (825) <> 0 Then                                       
  Code "(Не сработал датчик язычка)"                          
  Code "M30"                                                                     
Else                                                                                   

Code "G1 G91 F80 A" & -1*A1'start rotating forward        

While IsMoving()                                                                

Wend                                                                                  

Code "G91 G1 F80 A0.2" ' rotating backward                    

While IsMoving()                                                                 

Wend                                                                                 

End If                                                                                   
DeActivateSignal(Output4)                                                 
  Sleep (2000)                                                                      

SetOEMDRO(824,NewTool)

End Sub                                                 

Поделиться сообщением


Ссылка на сообщение

текстовик с пояснениями прикрепить не получается, если кому-то нужен - пишите в личку, вышлю или смотрите поподробней на моей страничке https://vk.com/shurup_89ru

 

Поделиться сообщением


Ссылка на сообщение

Помогите разобраться с плагином

В последних его строчках прописан алгоритм, который работает так;

1-включается реле прямого вращения револьверной головки 

2-при нахождении № инструмента включается реверс головки

3-при достижении затяга головки обший выкл обоих реле

 

Проблема в том, что при  выключеном реле прямого вращения и в момент включения реле реверса головки

из за искрения контактов , возникает "эфект замыкания" и сетевые автоматы вылетают.

 

Можно ли реализовать (изменить) кусок программы для такого алгоритма:

 

1-выключение реле прямого вращения револьверной головки

2-при нахождении № инструмента ВЫКЛЮЧАЕТСЯ реле прямого вращения револьверной головки

3-включение реле реверса

4-ВКЛЮЧЕНИЕ реле прямого вращения

5-при достижении затяга головки обший выкл обоих реле

 

If Not IsActive(INPUT1) And IsActive(INPUT2) And IsActive(INPUT3) And IsActive (INPUT4) Then

Slot = 6

End If

Wend

Sleep(100)

DeActivateSignal(OUTPUT5) 'stop rotating forward, rotate backward now  

End If

Sleep(500)

ActivateSignal(OUTPUT14) ' rotating backward

Sleep(500)

While IsActive(OEMTrig1) ' kol index aktyvus

ActivateSignal(OUTPUT5)

Wend

DeActivateSignal(OUTPUT5)

Sleep(500)

DeActivateSignal(OUTPUT14)

 

Не знаю жива ли тема но буду благодарен отозвавшимся!

Поделиться сообщением


Ссылка на сообщение
Дата: (изменено)

 

14 часов назад, Jnker сказал:

If Not IsActive(INPUT1) And IsActive(INPUT2) And IsActive(INPUT3) And IsActive (INPUT4) Then

Slot = 6

В этой строке в  двоичном коде сравнивается назначеные вами входы,

на соответствие заданому значению.... в данном случае = 6, вам нужно прописать все состояния ваших входов 

далее ветвление проверка заданного с искоммым....

 ну и соответствие выходов состоянию (поиск/найдено , разжато/зажато) ....

пример смотрите выше ....

 

14 часов назад, Jnker сказал:

Проблема в том, что при  выключеном реле прямого вращения и в момент включения реле реверса головки

из за искрения контактов , возникает "эфект замыкания" и сетевые автоматы вылетают.

Значит нужно в цепи релюшек поставить диоды и увеличить временной интервал это команды SLEEP (500) в милисекундах ... пример SLEEP (1000) - это секунда, на обрабатывание вкл/откл реле

Изменено пользователем kama3er

Поделиться сообщением


Ссылка на сообщение
Дата: (изменено)

Спасибо за отклик!

Попробовал сегодня поиграть с паузами , не помогает это особо , влияет на то когда закоротит при довернутой головке или ранее))

Диоды и искрогасящие цепочки стоят конечно же.

Алгоритм работы моей резцедержки сейчас такой такой

1-вкл реле питания оно же реле прямого вращения (OUTPUT5)

2-при нахождении № инструмента срабатывает реле реверса (OUTPUT14)  -----(вот тут и возникает дуга замыкания)

3-при зажиме головки срабатывает сигнал (OEMTrig1)   и выключаются (OUTPUT5) и (OUTPUT14) 

------------------------------

Я бы хотел переделать алгоритм на такой

1-вкл реле питания оно же реле прямого вращения (OUTPUT5)-----------------головка вращается вперед

2-при нахождении № инструмента выключается реле (OUTPUT5)--------------стоп головка (питания снято)

3-при выключенном реле (OUTPUT5)  срабатывает (возможно через задержку времени Sleep(500)  ) реле реверса (OUTPUT14) ------вкл реле реверса

4-вкл реле питания оно же реле прямого вращения (OUTPUT5)-------------------питание подано,происходит реверс вращения головки

5-при зажиме головки срабатывает сигнал (OEMTrig1)   и выключаются (OUTPUT5) и (OUTPUT14)----------- -полный стоп

-----------------------------

Так как я "программист" примерно "никакой" , попробую угадать с переделкой листинга программы , точнее ее последнего фрагмента .

If Not IsActive(INPUT1) And IsActive(INPUT2) And IsActive(INPUT3) And IsActive (INPUT4) Then---я так понимаю это правило перебора инструмента

Slot = 6-- инструментов 6шт и это верно для №6

End If -

Wend

Sleep(100)-не знаю к чему эта пауза относится

DeActivateSignal(OUTPUT5) 'stop rotating forward, rotate backward now - выключение реле прямого вращения (хотя оно остается включеным почему то)

End If

Sleep(500)

ActivateSignal(OUTPUT14) ' rotating backward---включение реле реверса

Sleep(500)

While IsActive(OEMTrig1) ' kol index aktyvus---сигнал зажима головки

ActivateSignal(OUTPUT5)-включение реле прямого вращения (хотя оно и не выключалось)

Wend

DeActivateSignal(OUTPUT5)-выкл реле вращения

Sleep(500)

DeActivateSignal(OUTPUT14)-выкл реле реверса

 

SetOEMDRO(824,NewTool)--не знаю что это какая то пауза вероятно

Code "G4 P2" 'A pause time of 2 seconds to give your reverse turret time to seat

While IsMoving

-----------------------------------------

Переделка

Sleep(100)-не знаю к чему эта пауза относится

DeActivateSignal(OUTPUT5) 'stop rotating forward, rotate backward now - выключение реле прямого вращения

End If

Sleep(500)

ActivateSignal(OUTPUT14) ' rotating backward---включение реле реверса

Sleep(500)

ActivateSignal(OUTPUT5)-включение реле прямого вращения ----МОЯ ВСТАВКА

Wend

While IsActive(OEMTrig1) ' kol index aktyvus---сигнал зажима головки

ActivateSignal(OUTPUT5)-включение реле прямого вращения (хотя оно и не выключалось)

Wend

DeActivateSignal(OUTPUT5)-выкл реле вращения

Sleep(500)

DeActivateSignal(OUTPUT14)-выкл реле реверса

 

SetOEMDRO(824,NewTool)--не знаю что это какая то пауза вероятно

Code "G4 P2" 'A pause time of 2 seconds to give your reverse turret time to seat

While IsMoving

 

Вообщем не знаю будет ли это работать (скорее всего нет)

Но был бывсячески благодарен тому ,кто сможет поправить меня и выложить рабочий вариант проги

Головка такая

 

ScreenShot03984.jpg 

ScreenShot03985.jpg 

Изменено пользователем Jnker
нумерация не точна

Поделиться сообщением


Ссылка на сообщение

Здрасте! Данную инструментальную головку настроить можно, но с ней может быть проблема. А именно, она работает по следующему принципу: сначала мотор откручивает гайку затяжки, потом поворачивает на нужное расстояние, потом включается реверс и затяжка револьверки. Причём не знаю во всех ли версиях там стоит датчик нагрузки, но в тех головках, с которыми сталкивался я, револьверка именно по этому датчику определяла затянуась ли гайка или нет. А так же, они время от времени из строя выходят, эти датчики, но это если их водой залило или если головка настроена неверно.

Относительно макроса - это Вы, пожалуйста не наговаривайте, всё работает гуд, только варианты выбора инструмента нужно под Вас прописать и все дела. А вот, учитывая мотор, который у Вас там стоит, действительно, с макросом придётся крепко пошаманить

Поделиться сообщением


Ссылка на сообщение

Приветствую Shurup89 !

Да, она работает сначала откручиваясь а потом на реверсе закручиваясь.

Никакого датчика нагрузки там не стояло никогда

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

Кстати и датчики Холла пришлось заменить на герконы в связи с двойными и не четкими срабатываниями при механическом перекосе головки при вращении.

И пришлось еще спаять схему перевода сигнала с головки с 10 на 2 код на микрухе 156ив3

 

Да на и на макрос я не наговариваю )) все работает это точно . Я просто пытаюсь понять как перестроить алгоритм включения реле.

Чтобы контакты не замыкали в моменте переключения реверса.

 

 

Поделиться сообщением


Ссылка на сообщение
В 07.09.2021 в 00:10, Jnker сказал:

If Not IsActive(INPUT1) And IsActive(INPUT2) And IsActive(INPUT3) And IsActive (INPUT4) Then---я так понимаю это правило перебора инструмента

Slot = 6-- инструментов 6шт и это верно для №6

Это определение № позиции инстрмента по входам ... якобы бинарное считывание позиции .... тоесть это  код Грея https://ru.wikipedia.org/wiki/Код_Грея

Нужно описать все положения инструмента от состояния входов

В 07.09.2021 в 00:10, Jnker сказал:

Sleep(100)-не знаю к чему эта пауза относится

DeActivateSignal(OUTPUT5) 'stop rotating forward, rotate backward now - выключение реле прямого вращения (хотя оно остается включеным почему то)

End If

Sleep(500)

Пауза здесь для установления позиции и исключения дребезга контактов.... у вас может не совпадать (больше/меньше) времени на прохождение позиции ....

оцените на взгляд время перехода от одной позиции к другой.

 Реле у вас случайно не пневматику включают??? Ищите причину по которой у вас остается включеным реле на выходе 5

В 07.09.2021 в 00:10, Jnker сказал:

SetOEMDRO(824,NewTool)--не знаю что это какая то пауза вероятно

Code "G4 P2" 'A pause time of 2 seconds to give your reverse turret time to seat

While IsMoving

Это время на зажим головки ...

На схеме у вас только часть управляющая  электродвигателем а где считывание положения ??

Поделиться сообщением


Ссылка на сообщение

Парни, всем привет!

Может кому пригодится?

Модернизировал станок 16А20Ф3 со стандартной головой для того времени (Брежнев, Комсомол, бесплатная горчица)  - УГ9326 на 8 позиций.

Возился два дня, уже подумал, что тупой, но чудо все-таки произошло. Вуаля !!!

 

Предварительные ласки такие:

В головке установлены 8 датчиков (герконов) и датчик зажима.

Стало быть, нам необходимы 9 свободных входов. Подбирайте контроллеры исходя из этих данных:

головка - 9 шт., Home (X,Z) - минимум 2 шт, E-stop - 1 шт., ну и остальные ништяки, согласно потребностям.

Я дал этим датчикам имя в Mach3 (OEMTrig1 - OEMTrig9)

Обязательно подключайте эти входы к своим контроллерам через оптопары или реле (PoKeys57E пришлось сдать в утиль из-за наводок при зажиме диска).

Далее, я прикрутил 2 реле для управления двигателем головки, дабы исключить КЗ в реверсивных пускателях. Обозвал их в Маче (Output4 и Output5). 

 

788537326_-1.thumb.jpg.4e7427c0fc8efa860831f9a1a5ea29d6.jpg

 

Алгоритм вроде простой:

1. Включаем Output 4 (реле выбора направления вращения головки)

2. Подаем питание включением Output 5 (голова вращается)

3. Ждем срабатывания нужного нам датчика (геркона)

4. Отключаем Output 5 (голова останавливается)

5. Отключаем Output 4 (тем самым включаем реверс)

6. Подаем питание включением Output 5 (голова вращается в обратную сторону)

7. Ждем срабатывания датчика зажима.

8. Отключаем Output 5.

Все реле отключены, инструмент поменялся, зарабатываем бабло дальше.

Что же у меня было не так? Почему головка УГ9326 на 8 позиций два дня делала мне мозг? Да, потому что, я не читал инструкции. Ну, или как все, прочитал, когда уже все сделал.

Есть разница между IsActive и Not IsActive - только и всего. Помните об этом, когда в раскопках обнаружите токарный станок 16А20Ф3С32.

Даю вырезку из кода с объяснениями (обязательно поставьте галку (General config> Auto Tool Changer. Только тогда макрос M6start будет отрабатываться автоматически по команде Т101, Т202 и т.д. М6 набирать не нужно). Весь код прикреплю к сообщению. Заливайте и кайфуйте!!! Если, конечно поставите два реле для управления, как у меня, на схеме выше.

Sub Main()
  Code "G28"  (Перемещение головки (суппорта) в позицию под смену инструмента. Обычно это Home X,Z, ну или настраивается в Маче по коду G28. Можно просто удалить, и позицию указывать в G-коде)
  While IsMoving () (Следующие 3 строчки - ждем, когда приедет)
  Sleep (10)
  Wend                              
  MinToolNum = 1 (Задаем переменную минимального количества инструментов в головке) 
  MaxToolNum = 8 (Задаем переменную максимального количества инструментов в головке)
  NewTool = GetSelectedTool() (Смотрим выбранный инструмент)
  OldTool = GetCurrentTool() (Смотрим инструмент, который был установлен)

If NewTool > MaxToolNum Then (Если оператор выбрал номер инструмента больше, чем есть в головке, то)
  Code "M30" (Завершаем программу и выходим на начало программы. По мне, так самый оптимальный вариант - без кнопок стоп, резет и т.д.)
  MsgBox ("Select tool 1-8") (Выводим сообщение в отдельное окно с кнопкой "Ок", чтобы не висело в ошибках)
  Exit Sub (Ищем оператора, который умеет считать до восьми)
End If (Наливаем 100 грамм коньяка и прикуриваем)

If NewTool < MinToolNum Then (Если оператор выбрал номер инструмента меньше, чем есть в головке, то смотрим выше)
  Code "M30"
  MsgBox ("Select tool 1-8") 
  Exit Sub
End If

If NewTool = OldTool Then (Если оператор выбрал номер инструмента, который был установлен, то занимаемся своими делами, все хорошо)
  Exit Sub (Выходим из макроса)
End If

If NewTool = 1 Then (Если оператор все-таки выбрал нужный инструмент, в данном случае №1, то есть набрал команду "Т101", мы напрягаемся и действуем по алгоритму, описанному выше)
  ActivateSignal(OUTPUT4) (Включаем реле выбора направления вращения головки)
  Sleep (10) (Ждем одну сотую секунды, чтобы механика успела удовлетворить электронику. Здесь, и далее можете настраивать под свои возможности)
  ActivateSignal(OUTPUT5) (Подаем питание на реле выбора направления вращения головки (голова вращается)) 
  While Not IsActive(OEMTrig1) (Следующие 3 строчки - ждем, когда сработает датчик (геркон) №1)
  Sleep (10)
  Wend 
  DeActivateSignal(OUTPUT5) (Отключаем Output 5 (голова останавливается))
  Sleep (10)
  DeActivateSignal(OUTPUT4) (Отключаем Output 4 (тем самым включаем реверс))
  Sleep (10) 
  ActivateSignal(OUTPUT5) (Подаем питание на реле выбора направления вращения головки (голова вращается в обратную сторону))  
  While Not IsActive(OEMTrig9) (Следующие 3 строчки - ждем, когда сработает датчик зажима)
  Sleep (10)
  Wend 
  DeActivateSignal(OUTPUT5) (Отключаем питание от реле выбора направления вращения головки)
If Not IsActive(OEMTrig1) Then (Обязательно проводим самопроверку. При неправильной настройке магнита бывает, что инструмент не доходит до щелчка собачки и устанавливается предыдущий инструмент.) 
  Code "M30" (смотрите выше)
  MsgBox("Tool not installed") (смотрите выше)
  Exit Sub (Выходим из макроса)
End If   (Если все нормально, то наливаем 100 грамм коньяка)
End If   (Наливаем еще 100 грамм коньяка)

 

...

SetCurrentTool( NewTool ) (Устанавливаем новый, выбранный инструмент в Мач)

End Sub (Выходим из макроса)

 

Сам код для копирования. (Понимаю, что код можно оптимизировать. Если кто-то займется, то буду очень благодарен). Всем успехов в станкостроении !!!!

Sub Main()
  Code "G28"
  While IsMoving ()
  Sleep (10)
  Wend
  MinToolNum = 1  
  MaxToolNum = 8 
  NewTool = GetSelectedTool()
  OldTool = GetCurrentTool()

If NewTool > MaxToolNum Then
  Code "M30"
  MsgBox ("Select tool 1-8")
  Exit Sub
End If

If NewTool < MinToolNum Then
  Code "M30"
  MsgBox ("Select tool 1-8") 
  Exit Sub
End If

If NewTool = OldTool Then 
  Exit Sub
End If

If NewTool = 1 Then 
  ActivateSignal(OUTPUT4)
  Sleep (100)
  ActivateSignal(OUTPUT5)
  While Not IsActive(OEMTrig1)
  Sleep (10)
  Wend 
  DeActivateSignal(OUTPUT5)
  Sleep (10)
  DeActivateSignal(OUTPUT4)
  Sleep (10) 
  ActivateSignal(OUTPUT5)  
  While Not IsActive(OEMTrig9)
  Sleep (10)
  Wend 
  DeActivateSignal(OUTPUT5)
If Not IsActive(OEMTrig1) Then
  Code "M30"
  MsgBox("Tool not installed")
  Exit Sub
End If   
End If
  

If NewTool = 2 Then 
  ActivateSignal(OUTPUT4)
  Sleep (100)
  ActivateSignal(OUTPUT5)
  While Not IsActive(OEMTrig2)
  Sleep (10)
  Wend 
  DeActivateSignal(OUTPUT5)
  Sleep (10)
  DeActivateSignal(OUTPUT4)
  Sleep (10) 
  ActivateSignal(OUTPUT5)  
  While Not IsActive(OEMTrig9)
  Sleep (10)
  Wend 
  DeActivateSignal(OUTPUT5)
If Not IsActive(OEMTrig2) Then
  Code "M30"
  MsgBox("Tool not installed")
  Exit Sub
End If   
End If

If NewTool = 3 Then 
  ActivateSignal(OUTPUT4)
  Sleep (100)
  ActivateSignal(OUTPUT5)
  While Not IsActive(OEMTrig3)
  Sleep (10)
  Wend 
  DeActivateSignal(OUTPUT5)
  Sleep (10)
  DeActivateSignal(OUTPUT4)
  Sleep (10) 
  ActivateSignal(OUTPUT5)  
  While Not IsActive(OEMTrig9)
  Sleep (10)
  Wend 
  DeActivateSignal(OUTPUT5)
If Not IsActive(OEMTrig3) Then
  Code "M30"
  MsgBox("Tool not installed")
  Exit Sub
End If   
End If

If NewTool = 4 Then 
  ActivateSignal(OUTPUT4)
  Sleep (100)
  ActivateSignal(OUTPUT5)
  While Not IsActive(OEMTrig4)
  Sleep (10)
  Wend 
  DeActivateSignal(OUTPUT5)
  Sleep (10)
  DeActivateSignal(OUTPUT4)
  Sleep (10) 
  ActivateSignal(OUTPUT5)  
  While Not IsActive(OEMTrig9)
  Sleep (10)
  Wend 
  DeActivateSignal(OUTPUT5)
If Not IsActive(OEMTrig4) Then
  Code "M30"
  MsgBox("Tool not installed")
  Exit Sub
End If   
End If

If NewTool = 5 Then 
  ActivateSignal(OUTPUT4)
  Sleep (100)
  ActivateSignal(OUTPUT5)
  While Not IsActive(OEMTrig5)
  Sleep (10)
  Wend 
  DeActivateSignal(OUTPUT5)
  Sleep (10)
  DeActivateSignal(OUTPUT4)
  Sleep (10) 
  ActivateSignal(OUTPUT5)  
  While Not IsActive(OEMTrig9)
  Sleep (10)
  Wend 
  DeActivateSignal(OUTPUT5)
If Not IsActive(OEMTrig5) Then
  Code "M30"
  MsgBox("Tool not installed")
  Exit Sub
End If   
End If

If NewTool = 6 Then 
  ActivateSignal(OUTPUT4)
  Sleep (100)
  ActivateSignal(OUTPUT5)
  While Not IsActive(OEMTrig6)
  Sleep (10)
  Wend 
  DeActivateSignal(OUTPUT5)
  Sleep (10)
  DeActivateSignal(OUTPUT4)
  Sleep (10) 
  ActivateSignal(OUTPUT5)  
  While Not IsActive(OEMTrig9)
  Sleep (10)
  Wend 
  DeActivateSignal(OUTPUT5)
If Not IsActive(OEMTrig6) Then
  Code "M30"
  MsgBox("Tool not installed")
  Exit Sub
End If   
End If

If NewTool = 7 Then 
  ActivateSignal(OUTPUT4)
  Sleep (100)
  ActivateSignal(OUTPUT5)
  While Not IsActive(OEMTrig7)
  Sleep (10)
  Wend 
  DeActivateSignal(OUTPUT5)
  Sleep (10)
  DeActivateSignal(OUTPUT4)
  Sleep (10) 
  ActivateSignal(OUTPUT5)  
  While Not IsActive(OEMTrig9)
  Sleep (10)
  Wend 
  DeActivateSignal(OUTPUT5)
If Not IsActive(OEMTrig7) Then
  Code "M30"
  MsgBox("Tool not installed")
  Exit Sub
End If   
End If

If NewTool = 8 Then 
  ActivateSignal(OUTPUT4)
  Sleep (100)
  ActivateSignal(OUTPUT5)
  While Not IsActive(OEMTrig8)
  Sleep (10)
  Wend 
  DeActivateSignal(OUTPUT5)
  Sleep (10)
  DeActivateSignal(OUTPUT4)
  Sleep (10) 
  ActivateSignal(OUTPUT5)  
  While Not IsActive(OEMTrig9)
  Sleep (10)
  Wend 
  DeActivateSignal(OUTPUT5)
If Not IsActive(OEMTrig8) Then
  Code "M30"
  MsgBox("Tool not installed")
  Exit Sub
End If   
End If

SetCurrentTool( NewTool )
  
End Sub
Main 

Поделиться сообщением


Ссылка на сообщение

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.