1. Изучение программной части робота FANUK R200iB/165F
2. Исследование регистров
3. Научиться программировать, используя подпрограммы
Во время практики в лаборатории кафедры «Мехатроника и робототехника», мною было проведено исследование промышленного манипулятора FANUK R200iB/165F(Рис.1).
Рис.1. Манипулятор FANUK R200iB/165F
В частности исследование касалось программной части робота. Работа велась по темам подпрограммы и регистры. Целью работы было изучение регистров и программирования с использованием подпрограмм.
Регистры.
Служат для хранения чисел. Обозначается R[i]. Например R[1] = 1, число 1 записано в регистр 1.
Доступно 200 регистров (количество может быть увеличено)
Возможна прямая и косвенная адресации регистра.
При прямой адресации индекс регистра задается как номер - R[2] = 5 В данном случае инструкция присваивает регистру номер 2 значение 5, при этом старое значение регистра будет удалено.
При косвенной адресации индекс регистру задается не как номер, а косвенно, с помощью другого регистра т.е. R[R[3]] = 5. В данном случае инструкция содержит внутренний регистр R[3] и внешний регистр R[R[3]]. Если, например значение регистра R[3] равно 2, внешний регистр будет адресован с индексом 2 - (R[2] = 5).
Возможны следующие арифметические операции:
R[…] = …+… подсчет (суммирование)
R[…] = …-… вычитание
R[…] = …*… умножение
R[…] = …/… деление
R[…] = …DIV… целочисленное деление
R[…] = …MOD… остаток после деления.
Замечание. В рамках одной инструкции позволено несколько арифметических операций, но с ограничениями (не смешивать операции (АND/OR) использовать не более 5 операторов.
Добавление инструкции по работе с регистром
Для присвоения регистру значения (код R[1]=0), с помощью F1 (INST) вызвать окно (Рис.2).
Рис.2. Меню Instruction
Выбрать пункт Registers. Откроется окно (Рис. 3).
Рис.3. Меню регистров
В нем выбрать R[ ]=(…) (многоточия заменяются константой аналогично выбору системы координат(UFRAME_NUM или UTOOL_NUM) и написать R[1] = 1.
Для написания выражения с присвоением (R[1]=R[1]+1)нажатьF1 (INST) вызвать окно, изображенное на рисунке 1. Выбрать меню Registers и откроется окно (Рис. 4).
Рис.4. Меню шаблонов
В нем выбрать шаблон выражения в котором заменить многоточия на нужные выражения.
Операторы безусловного перехода
Для создания циклов и ветвлений программы используются операторы безусловного перехода (JMP_LBL). Вид инструкции:
JMP_LBL[i], где i – номер метки, в которую необходимо осуществить переход.
LBL[i] – инструкция описывающая метку, i – номер метки.
Пример 1:
Рассмотрим пример использования регистра в качестве счетчика, а так же операторов безусловного перехода.
Пусть имеется программа
1: J P[1] 100% FINE
2: J P[2] 100% FINE
3: J P[3] 100% FINE
[END]
Добавим в программу следующие операторы
В данном примере –R[1] – регистр выступающий в качестве счетчика. Начальное значение регистра ноль.
Инструкция JMP_LBL[1] (безусловный переход) – переводит выполнение программы в метку 1 (строка 2). Таким образом блок кода реализующий обход трех точек (строки 3, 4, 5) будет выполняться бесконечное количество раз. Причем в регистре номер 1 будет содержаться число выполненных итераций.
1: R[1] = 0
2: LBL[1]
3: J P[1] 100% FINE
4: J P[2] 100% FINE
5: J P[3] 100% FINE
6: R[1] = R[1] + 1
7: JMP_LBL[1]
[END]
Добавление инструкции безусловного перехода
Для перемещения к метке например JMP LBL[4]или установки метки нужно нажать F1 (INST) и выбрать в открывшемся меню - JMP/LBL. Откроется меню (Рис.5).
Рис.5. Меню меток
Оператор IF
Условный оператор IF служит для ветвления программы.
Пример 2:
Для примера 1 из предыдущей главы написать условие при котором выход из цикла осуществляется после 3й итерации.
7: IF (R[1] <> 3), JMP_LBL[1] // условный переход в метку LBL[1]
8: J P[4] 100% FINE // движение в точку P[4]
[END]
Из примера видно, что в 7 строке происходит ветвление кода, то есть, в зависимости от значения регистра 1 может выполниться либо блок кода обхода трех точек, либо переход в точку P[4].
Позиционный регистр
Служит для хранения координат точек. Обозначается PR[i]
В инструкции с позиционным регистром выполняется арифметическая операция или смещение позиции - является переменной, содержащей позиционные данные.
Доступно 100 регистров.
Возможны следующие арифметические операции
PR[…] = …+… подсчет (суммирование)
PR[…] = …-… вычитание
PR[…] = …*… умножение
PR[…] = …/… деление
PR[…] = …DIV… целочисленное деление
PR[…] = …MOD… остаток после деления.
Кроме того операции:
· Смещения – PR[i]-(регистр), например PR[n]=PR[m];
· смещение по отдельной оси - PR[i,j]=(регистр)(оператор)(регистр), например PR[1,2]=1500.
· Арифметическая операция для оси PR[i,j]=()параметр)(оператор)(параметр), например PR[1,2]=PR[1,2]+100.
i - номер позиционного регистра
j – обозначение координаты.
j=1 X
j=2 Y
j=3 Z
j=4 W
j=5 P
j=6 R
Например PR[2,3]= 100 – это присвоение значения 100 координате Z находящейся во втором позиционном регистре.
Пример 1:
Рассмотрим программу, которая обходит 3 точки в плоскости XOY 6й пользовательской системы координат, образующие прямоугольный треугольник с катетами 40 и 60.
Предполагаем, что в позиционном регистре номер 10 записаны координаты точки на плоскости XOY (в системах UF=6, UT=4).
1: UFRAME_NUM=6 ;
2: UTOOL_NUM=4 ;
3: J PR[10] 100% FINE ; // двигаться в позиционный регистр 10 (ПР10)
4: PR[10,1]=PR[10,1]-60 ; // вычесть 60 из значения координаты Х ПР10
5: L PR[10] 500mm/sec FINE ; //двигаться в ПР10
6: PR[10,2]=PR[10,2]+40 ; //прибавить 40 к значению координаты У ПР10
7: L PR[10] 500mm/sec FINE ;//двигаться в ПР10
8: PR[10,1]=PR[10,1]+60 ; //вернуть координате Х ПР10 начальное значение
9: PR[10,2]=PR[10,2]-40 ; //вернуть координате У ПР10 начальное значение
10: L PR[10] 500mm/sec FINE ;//двигаться в ПР10
Отметим так же, что позиционный регистр хранит лишь числовые значения координат X Y Z W P R, поэтому один и тот же регистр можно использовать в разных системах координат.
Пример 2:
Рассмотрим программу, которая рисует треугольник из примера 1 в двух разных пользовательский системах координат:
Предполагаем что регистр PR[11] хранит значения точки на плоскости XOY (координата Z равна нулю).
1: UFRAME_NUM=6 ; // активная пользовательская система координат
2: UTOOL_NUM=4 ; // активная система координат инструмента
3: R[100]=0 ; //регистр-счетчик
4: LBL[1] ; //метка LBL[1], начало цикла
5: PR[10] = PR[11] ; //начальная точка
6: J PR[10] 100% FINE ; //движение в PR[10]
7: PR[10,1]=PR[10,1]-60 ; // смещение PR[10] по оси X на 60
8: L PR[10] 500mm/sec FINE ; //движение в PR[10]
9: PR[10,2]=PR[10,2]+40 ; // смещение PR[10] по оси Y на 40
10: L PR[10] 500mm/sec FINE ; //движение в PR[10]
11: PR[10,1]=PR[10,1]+60 ; // смещение PR[10] по оси X на 60
12: PR[10,2]=PR[10,2]-40 ; // смещение PR[10] по оси Y на 40
13: L PR[10] 500mm/sec FINE ; //движение в PR[10]
14: UFRAME_NUM=7 ; // смена активной пользовательской системы координат
15: R[100]=R[100] + 1 ; // прибавление к регистру-счетчику единицы
16: IF (R[100] <> 2) JMP_LBL[1] // условный переход в метку LBL[1]
В результате выполнения данной программы, блок кода для рисования треугольника (строки 4-16) будет выполнен дважды (регистр R[100] выступает в роли счетчика, а оператор IF на 16 строке обеспечивает выход из цикла после второй итерации). Причем в первый раз данный блок кода будет выполняться при активной системе координат UF6 (строка 1), второй раз треугольник будет нарисован в плоскости XOY системы координат UF7 (строка 14).
Подпрограммы
Для программирования движений робота кроме основных исполнительных программ, используются подпрограммы. Имена создаваемых подпрограмм, так же как и имя исполнительной программы могут быть настраиваемым в зависимости от используемых на предприятии стандартов. Рассмотрим один из стандартов, в котором используются следующие основные подпрограммы.
UP -подпрограмма, не может быть запущена самостоятельно, но также как и исполнительная программа может использовать инструкции перемещения и т.д.
MAKRO –подпрограмма, которая не может быть запущена самостоятельно, и не может использовать инструкции перемещения.
Создание имени подпрограммы
Для задания имени, создаваемой программы необходимо выполнить следующую последовательность действий.
1. Нажать на пульте управления SELECT F2 (CREATE)
В результате появиться окно написания программы (Рис.6).
Рис.6. Окно написания программы.
2. С помощью функциональных клавиш F1 – F5 ввести имя создаваемой программы
Например, если нажатьF2 - UPто в имени программы появиться тип создаваемой подпрограммы (Рис.7).
Рис.7. Создание подпрограммы
Затем в меню Alpha input выбрать:
uppercase (заглавные символы),
lowercase(строчные символы).
И с помощью клавиш F1 – F5 набрать комментарий.
Набрать цифры можно непосредственно набирая на клавиатуре.
Если нажать Options, то появиться клавиатура (Рис.8)
Рис.8. Клавиатура.
На которой можно непосредственно ввести имя подпрограммы.
Введем, например 070 и нажмем ENTER. В результате введем имя подпрограммы UP070, как показано на (Рис.9).
Рис.9. Ввод имени подпрограммы
Для ввода кода подпрограммы необходимо нажать ENTER. В результате появиться соответствующее окно (рис.10).
Рассмотрим пример подпрограммы рисования линии определенной длины.
Добавление кода
В общем случае задание систем координат в подпрограмме не обязательно, поскольку, как было указано выше, подпрограмма не может быть запущена самостоятельно, а только посредством основной программы. В свою очередь задание систем координат в основной программе обязательно, которые являются глобальными (сточки зрения программирования), то есть по умолчанию подпрограмма должна использовать заданные системы координат. Однако рекомендуется задание систем координат в подпрограммах поскольку:
Случай 1: если в подпрограмме присутствуют инструкции перемещения, не использующие позиционных регистров, то данные инструкции могут быть не выполнены (ошибка Invalid uframe num), в случае если координаты их точек записаны в системе координат отличной от той, что определены в основной программе.
Случай 2: если в подпрограмме присутствуют инструкции перемещения, использующие позиционные регистры, то данные инструкции могут быть выполнены не корректно, поскольку позиционные регистры не привязаны к конкретным системам координат, и хранят лишь цифровые значения.
Таким образом, при написании подпрограммы рекомендуется задавать системы координат, используемые в добавляемых системах координат.
Пример 3:
Напишем подпрограмму которая рисует горизонтальную линию длиной 50 мм:
1. Перед написанием программы в 17-й позиционный регистр записать координаты точки, отстоящей от начальной точки отрезка на 20 мм от плоскости XOY.
2. Добавим следующий код в подпрограмму UP070 (Рисунок 11).
Рис.11. Код подпрограммы UP070
Рассмотрим код подпрограммы:
Строка 1 – определение активной пользовательской системы координат (в данном случае ранее определенная система координат UF6, привязанная к доске)
Строка 2 – определение активной системы координат инструмента ( TCP инструмента -UT=4)
Строка 4 – двигаться TCP инструмента в PR[17], с координатами точки, отстоящей от доски на 20 мм
Строка 6 – изменить значение координаты Z позиционного регистра PR[17], сместив тем самым TCP его на поверхность XOY СК UF6
Строка 8 – двигаться в новую позицию PR[17]
Строка 10 – изменить значение координаты Х позиционного регистра PR[17]
Строка 12 – двигаться в новую позицию PR[17], нарисовав таким образом горизонтальную линию
Строка 14 – изменить значение координаты Z, т.е. отступив от XOY обратно на 20 мм.
Строка 16 – двигаться в новую позицию PR[17]
Теперь данную подпрограмму можно вызывать из программы или из других подпрограмм. Рассмотрим пример использования данной подпрограммы:
Пример 4:
Напишем программу, которая рисует на плоскости XOY пунктирную линию:
1: UFRAME_NUM=6 ;//определение активной пользовательской системы координат
2: UTOOL_NUM=4 ;//определение активной системы координат инструмента
3: R[100]=0 ;// регистр, выполняющий роль счетчика
4: LBL[1] ;// метка LBL[1], начало цикла
5: CALL UP070 ;// вызов подпрограммы UP070
6: PR[17, 1] = PR[17,1] + 10 ;// смещение начальной точки по оси X на 10 мм
7: IF (R[100] <10), JMP_LBL[1] ;// условный переход к началу цикла (метка LBL[1])
Данная программа 10 раз вызовет UP070, причем каждый раз после вызова смещая позиционный регистр 17 по координате X на 10. Таким образом будет нарисована пунктирная линия.