Ответ
 
Опции темы Поиск в этой теме
Старый 29.08.2020, 18:07   #21
ProductManager
Гуру
 
Регистрация: 15.03.2014
Сообщения: 145
Сказал Спасибо: 0
Сказали Спасибо 18 раз(а) в 15 сообщении
По умолчанию

доброго времени суток.

тз на программу можете написать? что робот должен делать?
идёт от точки к точке. возникает прерывание робот отходит, что то происходит, по команде возвращается в точку прерывания, возобновляет процесс и доходит до следующей точки траектории и далее?
ProductManager вне форума   Ответить с цитированием
Старый 29.08.2020, 19:00   #22
Ignis
Мастер
 
Регистрация: 03.03.2019
Сообщения: 49
Сказал Спасибо: 2
Сказали Спасибо 11 раз(а) в 11 сообщении
По умолчанию

Сообщение от sheppard Посмотреть сообщение
не понял от слова совсем ))

---
Тут все ясно:

DECL E6POS MyPoint ;объявляем переменную
E6POS MyPoint={X 0,Y 0,Z 0,A 0,B 0,C 0,S 0,T 0,E1 0.0,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0}

...

Если на все вопросы "да", тогда все совершенно понятно Вот только все-таки хотелось бы расшифровку ABCST...

Виноват, мой косяк, XP1 надобно заменить на MyPoint

MyPoint.X=MyPoint.X+10 используя оператор выборки "." Как обращение к полю или методу экземпляра класса.

XYZ - координаты точки, но этого мало, так как в этой точке TCP (tool center point) может находиться в бесконечном многообразии вариантов.
Дополнительно используют углы вращения ABC которые однозначно определяют в пространстве положение самого инструмента. Ну вроде как недовектор у него есть конец координат и направление, но нет координат начала.

Е1 - Е6 это положение внешних осей, в данном случае они отсутствуют поэтому можно на них немножко подзабить.

$POS_ACT системное автоотслеживание текущих координат? Не вдаваясь в подробности, что-то вроде того.
Ignis вне форума   Ответить с цитированием
Старый 29.08.2020, 22:53   #23
sheppard
Гуру
 
Регистрация: 19.04.2020
Сообщения: 215
Сказал Спасибо: 4
Сказали Спасибо 3 раз(а) в 3 сообщении
По умолчанию

Отлично ))

А вот пространственное положение tool'а меня не интересует. Наоборот, мне нужно, чтобы оно оставалось неизменным.

То есть, по идее я могу просто не трогать их, а использовать исключительно MyPoint.X..Z.

Тогда все прекрасно ) в понедельник повеселюсь... Хотя и так уже видно, просто в моем случае одно прерывание работает "отлавливая" инфракрасным датчиком палку и двигаясь к ней, затем возвращаясь на траекторию. Но нужно чтобы второй датчик отловил момент нужного сближения - теперь все ясно, как решить этот момент :

https://www.facebook.com/henry.shepp...73295332708628
sheppard вне форума   Ответить с цитированием
Старый 31.08.2020, 09:04   #24
sheppard
Гуру
 
Регистрация: 19.04.2020
Сообщения: 215
Сказал Спасибо: 4
Сказали Спасибо 3 раз(а) в 3 сообщении
По умолчанию

Не вытанцовывается каменный гладиолус!

Суть проста: башка робота двигается по главной траектории. На ней два датчика. Прерывание 5 вызывается при срабатывании первого и пусть просто робот запоминает в currentXYZ текущее значение $POS_ACT. И начинает двигаться по мелкой доп.траектории. Предварительно активируется прерывание 4 (когда срабатывает второй датчик), которое просто должно "наплевать" на выполнение текущей доп.траектории и вернуть голову в currentXYZ, выйти из прерывания 4 и затем сразу же из 5 и продолжить главную траекторию.

Но я даже не могу запомнить currentXYZ = $POS_ACT - ошибка. Вроде "нельзя сохранять в главной программе данные, связанные со временем исполнения".

Вот грубо навскидку - выкинул все, что не относится к проблеме.

===
&ACCESS RV
DEF b01( )

E6POS currentXYZ;

;FOLD INI
;FOLD BASISTECH INI
GLOBAL INTERRUPT DECL 5 WHEN $MEAS_PULSE[3]==TRUE DO found()
INTERRUPT ON 5
GLOBAL INTERRUPT DECL 4 WHEN $MEAS_PULSE[1]==TRUE DO stop_heat()
INTERRUPT ON 4
BAS ( #INITMOV,0 )
;ENDFOLD (BASISTECH INI)
;FOLD USER INI
;ENDFOLD (USER INI)
;ENDFOLD (INI)

$BASE = $NULLFRAME;
$TOOL = $NULLFRAME;
$IPO_MODE = #BASE;

$OV_PRO=100

LOOP

PTP {A1 0, A2 -90, A3 90, A4 90, A5 0, A6 0}

LIN_REL {Z -2000}; main trajectory
LIN_REL {Z 2000}

ENDLOOP

END

def found()
BRAKE F
$OV_PRO=100
INTERRUPT OFF 5 ; founded - 1st trigger is ON
INTERRUPT ON 4 ; closeup check on - activate INT for 2nd trigger
currentXYZ = $POS_ACT
PTP_REL {X 200}; added trajectory
INTERRUPT OFF 4
INTERRUPT ON 5
$OV_PRO=80
end


def stop_heat()
BRAKE F
PTP currentXYZ
end
===
sheppard вне форума   Ответить с цитированием
Старый 02.09.2020, 13:31   #25
Pavel_T
Гуру
 
Регистрация: 04.08.2016
Сообщения: 81
Сказал Спасибо: 0
Сказали Спасибо 29 раз(а) в 19 сообщении
По умолчанию

Привет !
Тут есть пара вещей:
1. Декларация для: E6POS currentXYZ
выбрана неверно. В данном случае, как локальная переменная в
процедуре DEF b01( ), а используется в процедуре прерывания
def found(). Для правильной работы, переменную currentXYZ,
надо объявить или в файле b01.dat, или в файле $config.dat
(т.е глобально). Так же нужно ее проинициализировать до входа в
главный цикл, например currentXYZ = $NULLFRAME

2. Теперь сами прерывания. Тут мне с логикой не все понятно.
Робот двигается вверх вниз. Срабатывает первым прерывание 5. Робот
двигается вперед на 200 мм. и все. Если второе прирывание, которое его теоритически
должно вернуть на первоначальную траекторию, например запаздывает или не походит,
то робот зависает после команды PTP_REL {X 200}.
Мне кажется, что правильно было бы после команды PTP_REL {X 200} сразу дабавить
команду возврата на первоначальную траекторию PTP $POS_RET, а от прерывания 4 отказаться.
Т.е.
def found()
BRAKE F
$OV_PRO=100
INTERRUPT OFF 5 ; founded - 1st trigger is ON
INTERRUPT ON 4 ; closeup check on - activate INT for 2nd trigger
currentXYZ = $POS_ACT
PTP_REL {X 200}; added trajectory
PTP $POS_RET
INTERRUPT OFF 4
INTERRUPT ON 5
$OV_PRO=80
end
Pavel_T вне форума   Ответить с цитированием
Старый 03.09.2020, 06:05   #26
sheppard
Гуру
 
Регистрация: 19.04.2020
Сообщения: 215
Сказал Спасибо: 4
Сказали Спасибо 3 раз(а) в 3 сообщении
По умолчанию

Ага...

С первым пунктом разобрался ) просто я по древней ассемблерной привычке все кодирую прямо в ноутпаде, поэтому бывают старые замашки в программировании резидентных программ эдакий перехват 5го, 9го и особенно 13h прерываний под ДОС

А вот логика второго пункта...

Суть в том, чтобы голова робота ехала вперёд, но не дальше 200мм. Но если срабатывает второй датчик, то нужно чтобы голова немедленно вернулась - то есть я вторым датчиком ищу поверхность. Если нахожу, то возвращаюсь на столько мм, сколько успел проехать вперёд по этому 200отмиллиметровому пути. Иначе я башкой робота просто протараню эту поверхность.

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

Вот такие пирожки с котятами... ))
sheppard вне форума   Ответить с цитированием
Старый 03.09.2020, 06:26   #27
sheppard
Гуру
 
Регистрация: 19.04.2020
Сообщения: 215
Сказал Спасибо: 4
Сказали Спасибо 3 раз(а) в 3 сообщении
По умолчанию

и ещё момент. в чем разница между $pos_act и $pos_int? а то тут пока рыгорыч глушит Dns и погуглить толком не удается )) а тут как раз, насколько смутно помню, именно тот случай.
sheppard вне форума   Ответить с цитированием
Старый 03.09.2020, 06:57   #28
Pavel_T
Гуру
 
Регистрация: 04.08.2016
Сообщения: 81
Сказал Спасибо: 0
Сказали Спасибо 29 раз(а) в 19 сообщении
По умолчанию

Тогда попробуй так:
def found()
BRAKE F
$OV_PRO=100
INTERRUPT OFF 5 ; founded - 1st trigger is ON
currentXYZ = $POS_RET
INTERRUPT ON 4 ; closeup check on - activate INT for 2nd trigger
PTP_REL {X 200}; added trajectory
INTERRUPT OFF 4
PTP $POS_RET
INTERRUPT ON 5
$OV_PRO=80
end

Про системные переменные реалтайма есть инфа во всех мануалах по прерываниям и
описания системных переменных (с картинками, там все видно).
Pavel_T вне форума   Ответить с цитированием
Старый 03.09.2020, 07:08   #29
ProductManager
Гуру
 
Регистрация: 15.03.2014
Сообщения: 145
Сказал Спасибо: 0
Сказали Спасибо 18 раз(а) в 15 сообщении
По умолчанию

Сообщение от sheppard Посмотреть сообщение
и ещё момент. в чем разница между и ? а то тут пока рыгорыч глушит Dns и погуглить толком не удается )) а тут как раз, насколько смутно помню, именно тот случай.
$pos_act - текущая позиция, в любом месте программы можно вставить. С момента прерывания до считывания этой переменной робот может проехать по инерции некоторое расстояние. См. рис.
$pos_int - позиция в момент прерывания.
Изображения:
Тип файла: jpg 002.jpg (88.4 Кбайт, 4 просмотров)
ProductManager вне форума   Ответить с цитированием
Старый 03.09.2020, 07:26   #30
sheppard
Гуру
 
Регистрация: 19.04.2020
Сообщения: 215
Сказал Спасибо: 4
Сказали Спасибо 3 раз(а) в 3 сообщении
По умолчанию

ага! как и догадывался... спасибище ))
sheppard вне форума   Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +2, время: 20:20.

vBulletin v3.6.2, Copyright ©2000-2024, Jelsoft Enterprises Ltd.
Русский перевод: zCarot, Vovan & Co