Настройка автосмены инструмента.

frezeryga
Posts: 3
Joined: Mon Jun 11, 2018 8:36 pm

Настройка автосмены инструмента.

Post by frezeryga » Mon Jun 11, 2018 9:24 pm

Доброго дня. Построил станок 400х300х150 с автосменой.
Контроллер ет7+tikenboard

Нужна помощ в создании макросов автосмены.
Список входов,выходов,желаемый алгоритм работы.


входы

хоум датчик атс C 0-NC (INPUT_HOME_C)
хоум датчик ось Z 1-NC (INPUT_HOME_Z)
хоум датчик ось Y 2-NC (INPUT_HOME_Y)
хоум датчик ось X 3-NC (INPUT_HOME_X)
Е стоп 5-NC (INPUT_ESTOP)
наличие инструмента 6-NO (INPUT_TOOL)
захват инструмента 7-NO (INPUT_ZAXVAT)
давление воздуха 8-NO (INPUT_DAVLENIE)
открытие крышки 9-NO (INPUT_KRISKA)
датчик инструмента 10-NO (INPUT_TOOL_SETTER)
3д сканер 11-NO (INPUT_SENSOR_PROBE)




выходы
сила 0 (OUTPUT_POWER)
помпа 11 (OUTPUT_MIST)
обдув фрезы 12 (OUTPUT_FLOOD)
крышка 13 (OUTPUT_KRISKA)
захват инструмента 14 (OUTPUT_ZAXVAT)
обдув подшипника 15 (OUTPUT_PODSIPNIK)

подход к магазину

захват оправки X543.5 Z-168
выход из барабана X507

автосмена

по команде м6

1) Запомнить текущую систему координат, переключить систему координат в машинные
2) подьем шпинделя на максимальную высоту на скорости G0.
3) определить была ли команда м7 либо состояние выхода 12 (OUTPUT_FLOOD) и записать
4) остановка шпинделя,проверка давления (INPUT_DAVLENIE) активен=продолжаем. не активен=стоп+вывод сообщения "низкое давление воздуха"
5) перемещение в точку X507 ZMAX,открыть крышку (OUTPUT_KRISKA) включить
6) проверка открытие крышки (INPUT_KRISKA) активен=продолжаем. не активен=стоп+вывод сообщения "проверьте крышку ATC"
7) проверка наличие инструмента (INPUT_TOOL) активен=продолжаем. не активен стоп+вывод сообщения "инструмент отсутствует"
8) перемещение в точку Z-168 (опускание в колодец)
9) перемещение в точку X543.5 (заход в вилку)
10) разжим инструмента (OUTPUT_ZAXVAT) включить.
11) проверка разжима (INPUT_ZAXVAT) активн=продолжаем. не активен стоп+вывод сообщения "проверьте захват инструмента"
12) перемещение в точку Z-68
13) закрыть захват (OUTPUT_ZAXVAT) выключить.
14) проверка наличия инструмента (INPUT_TOOL) не активен=продолжаем. активен=стоп+вывод сообщения "проверьте инструмент"
15) вращение барабана ось B в нужную позицию. 15 позиций с шагом 24град. желательно крутить по короткому пути.
16) разжим захвата (OUTPUT_ZAXVAT) включить.
17) проверка разжима (INPUT_ZAXVAT) активн=продолжаем. не активен стоп+вывод сообщения "проверьте захват инструмента"
18) перемещение в точку Z-168 (опускание в колодец)
19) зажим захвата (OUTPUT_ZAXVAT) выключить.
20) проверка зажима (INPUT_ZAXVAT) не активн=продолжаем. активен стоп+вывод сообщения "проверьте захват инструмента"
21) перемещение в точку X507 выход из вилки.
22) подьем на Z MAX.
23) проверка наличия инструмента (INPUT_TOOL) активен=продолжаем. не активен стоп+вывод сообщения "инструмент отсутствует"
24) закрыть крышку (OUTPUT_KRISKA) выключить.
25) прочитать сохраненное состояние в пункте 2.
26) переключить систему координат обратно,запустить шпиндель,привести м7 в прочтенное состояние,продолжить выполнение уп.

mycnc
Posts: 140
Joined: Thu May 10, 2018 2:42 pm

Re: Настройка автосмены инструмента.

Post by mycnc » Tue Jun 12, 2018 10:17 pm

Попробую по шагам расписать.

frezeryga wrote:
Mon Jun 11, 2018 9:24 pm
по команде м6

1) Запомнить текущую систему координат, переключить систему координат в машинные
Текущая система координат хранится в регистре #5220.
Чтобы сохранить ее, например, в регистре 200, надо дать команду G10 с соответствующими параметрами

Code: Select all

G10 L81 P200 Q5220
Хотя, скорее всего это не надо, так как сменять систему координат (G54-G59) во время автосмены нет никакой надобности.
Переход на машинные координаты осуществляется кодом

Code: Select all

G53
Его надо давать в каждой строке, где нужны машинные координаты.
frezeryga wrote:
Mon Jun 11, 2018 9:24 pm
2) подьем шпинделя на максимальную высоту на скорости G0.
Границы рабочей зоны хранятся в регистрах -

Code: Select all

#define GVAR_SOFT_LIMITS_MIN         5421    //+8 Положение Минимум
#define GVAR_SOFT_LIMITS_MAX        5431    //+8 Положение Максимум
Подъем на максимальную частоту будет выглядеть как

Code: Select all

G53 G90 G0 Z [ #5433 -1 ] (Доехать до верхнего положения минус 1мм)
frezeryga wrote:
Mon Jun 11, 2018 9:24 pm
3) определить была ли команда м7 либо состояние выхода 12 (OUTPUT_FLOOD) и записать
Достаточно давно в PLC процедурах M3 M4 M5 M7 M8 M9 заведены флаги (в глобальных регистрах), которые взводятся при включении соответствующих выходов и сбрасываются при выключении.

Например для M7 это так

Code: Select all

#include pins.h
main()
{
  gvarset(7373,1);
  portset(OUTPUT_MIST);
  exit(99);	//normal exit 
};
То есть флаг находится в переменной 7373 и на значение этой переменной можно смотреть для определения необходимости включения M7 в данном месте
frezeryga wrote:
Mon Jun 11, 2018 9:24 pm
4) остановка шпинделя,проверка давления (INPUT_DAVLENIE) активен=продолжаем. не активен=стоп+вывод сообщения "низкое давление воздуха"
Для подготовительных операций проще всего сделать PLC процедуру, например M601, и вставить все проверки туда.
Будет примерно так

Code: Select all

#include pins.h
main() //M601
{
portclr (OUTPUT_SPINDLE);   //Выключить шпиндель
a=portget(INPUT_DAVLENIE); //Считать значение датчика
if (a==0)
{
  //Послать сообщение 501 из контроллера в софт
  parameter=PLC_MESSAGE_USER;
  value=501;
  message=PLCCMD_REPLY_TO_MYCNC;
  timer=20; do{timer--;}while (timer>0); //delay

  //Дать команду прервать выполнение УП	
  message=PLCCMD_MOTION_BREAK;
  timer=2; do{timer--;}while (timer>0);//wait till motion started
  exit(99);
};
};
frezeryga wrote:
Mon Jun 11, 2018 9:24 pm
5) перемещение в точку X507 ZMAX,открыть крышку (OUTPUT_KRISKA) включить
6) проверка открытие крышки (INPUT_KRISKA) активен=продолжаем. не активен=стоп+вывод сообщения "проверьте крышку ATC"
7) проверка наличие инструмента (INPUT_TOOL) активен=продолжаем. не активен стоп+вывод сообщения "инструмент отсутствует"

Code: Select all

G53 G90 G0 X507 
M602
M602 - PLC процедура, которая открывает крышку, подождет некторое время, потом проверит - открылась ли. Наличие инструмента туда же.

Code: Select all

#include pins.h
main()//M602
{
  portset(OUTPUT_KRISKA);
  timer=300; do{timer--;}while (timer>0); //Задержка 0.3 сек
  a=portget(INPUT_KRISKA);
  if (a==0)
  {
    //Послать сообщение 502 из контроллера в софт
    parameter=PLC_MESSAGE_USER;
    value=502;
    message=PLCCMD_REPLY_TO_MYCNC;
    timer=20; do{timer--;}while (timer>0); //delay

    //Дать команду прервать выполнение УП	
    message=PLCCMD_MOTION_BREAK;
    timer=2; do{timer--;}while (timer>0);//wait till motion started
    exit(99);
  };

  a=portget(INPUT_TOOL);
  if (a==0)
  {
    //Послать сообщение 503 из контроллера в софт
    parameter=PLC_MESSAGE_USER;
    value=503;
    message=PLCCMD_REPLY_TO_MYCNC;
    timer=20; do{timer--;}while (timer>0); //delay

    //Дать команду прервать выполнение УП	
    message=PLCCMD_MOTION_BREAK;
    timer=2; do{timer--;}while (timer>0);//wait till motion started
    exit(99);
  };

   exit(99);
};

Продолжение следует....

frezeryga
Posts: 3
Joined: Mon Jun 11, 2018 8:36 pm

Re: Настройка автосмены инструмента.

Post by frezeryga » Wed Jun 13, 2018 9:38 am

Опишите также устройство основной части макроса. А также где можно почитать список всех регистров,макросов,плс процедур и их назначение.

mycnc
Posts: 140
Joined: Thu May 10, 2018 2:42 pm

Re: Настройка автосмены инструмента.

Post by mycnc » Thu Jun 14, 2018 12:31 am

Я и описываю по шагам основную часть макроса с отступлениями на PLC вставки для включения выходов и для проверки входов.
frezeryga wrote:
Mon Jun 11, 2018 9:24 pm
8) перемещение в точку Z-168 (опускание в колодец)
9) перемещение в точку X543.5 (заход в вилку)

Code: Select all

G53 G90 G0 Z-168 
G53 G90 G0 X543.5
frezeryga wrote:
Mon Jun 11, 2018 9:24 pm
10) разжим инструмента (OUTPUT_ZAXVAT) включить.
11) проверка разжима (INPUT_ZAXVAT) активн=продолжаем. не активен стоп+вывод сообщения "проверьте захват инструмента"
Добавляем M603 для этого

Code: Select all

#include vars.h
#include pins.h

main()
{
  portset(OUTPUT_ZAXVAT);
  timer=300; do{timer--;}while (timer>0); //Задержка 0.3 сек
  a=portget(INPUT_ZAXVAT);
  if (a==0)
  {
    //Послать сообщение 503 из контроллера в софт
    parameter=PLC_MESSAGE_USER;
    value=503;
    message=PLCCMD_REPLY_TO_MYCNC;
    timer=20; do{timer--;}while (timer>0); //delay

    //Дать команду прервать выполнение УП	
    message=PLCCMD_MOTION_BREAK;
    timer=2; do{timer--;}while (timer>0);//wait till motion started
    exit(99);
  };
   exit(99);
};
Продолжаем
frezeryga wrote:
Mon Jun 11, 2018 9:24 pm
12) перемещение в точку Z-68
13) закрыть захват (OUTPUT_ZAXVAT) выключить.
14) проверка наличия инструмента (INPUT_TOOL) не активен=продолжаем. активен=стоп+вывод сообщения "проверьте инструмент"

Code: Select all

M603
G53 G90 G0 Z-68
M604

И код для М604, который практически М603 наоборот

Code: Select all

#include vars.h
#include pins.h

main()//M604
{
  portclr(OUTPUT_ZAXVAT);
  timer=300; do{timer--;}while (timer>0); //Задержка 0.3 сек
  a=portget(INPUT_TOOL);
  if (a==0)
  {
    //Послать сообщение 504 из контроллера в софт
    parameter=PLC_MESSAGE_USER;
    value=504;
    message=PLCCMD_REPLY_TO_MYCNC;
    timer=20; do{timer--;}while (timer>0); //delay

    //Дать команду прервать выполнение УП	
    message=PLCCMD_MOTION_BREAK;
    timer=2; do{timer--;}while (timer>0);//wait till motion started
    exit(99);
  };
   exit(99);
};
frezeryga wrote:
Mon Jun 11, 2018 9:24 pm
15) вращение барабана ось B в нужную позицию. 15 позиций с шагом 24град. желательно крутить по короткому пути.
Текущее положение можно получить, считав регистры
17020-17029 (Машинные координаты в размерности PLC, то есть 0.01единицы)
Для поворотной оси B это будет 0,01градуса


Номер нового инструмента расположен в регистре 5409.
Желаемая координата определяется как
(t-1)*2400

Код будет примерно таким

Code: Select all

  t=gvarget(5409); //Получить номер следующего инструмента.
  b0=gvarget(17004); 
  b1=(t-1)*2400; //Вычислить координату поворота

  b=b1-b0; //Вычислить разницу
  
  //Убрать целое число оборотов и вычислить направление
  bx=18000; 
  while (b>bx}{b=b-36000;};
  bx=0-bx;
  while (b<bx){b=b+36000;};

  gvarset(7080,360);	//задать скорость вращения
  g0moveA(0,0x10,b);	//Провернуть ось B

Этот код имеет смысл добавить внутрь М604. Получится примерно так

Code: Select all

#include vars.h
#include pins.h

main()//M604
{
  portclr(OUTPUT_ZAXVAT);
  timer=300; do{timer--;}while (timer>0); //Задержка 0.3 сек
  a=portget(INPUT_TOOL);
  if (a==0)
  {
    //Послать сообщение 504 из контроллера в софт
    parameter=PLC_MESSAGE_USER;
    value=504;
    message=PLCCMD_REPLY_TO_MYCNC;
    timer=20; do{timer--;}while (timer>0); //delay

    //Дать команду прервать выполнение УП	
    message=PLCCMD_MOTION_BREAK;
    timer=2; do{timer--;}while (timer>0);//wait till motion started
    exit(99);
  };

  t=gvarget(5409); //Получить номер следующего инструмента.
  b0=gvarget(17004); 
  b1=(t-1)*2400; //Вычислить координату поворота

  b=b1-b0; //Вычислить разницу
  
  //Убрать целое число оборотов и вычислить направление
  bx=18000; 
  while (b>bx}{b=b-36000;};
  bx=0-bx;
  while (b<bx){b=b+36000;};

  gvarset(7080,360);	//задать скорость вращения
  g0moveA(0,0x10,b);	//Провернуть ось B



   exit(99);
};





Собственно, самое интересное закончилось, далее все то же самое, только в обратном порядке.
frezeryga wrote:
Mon Jun 11, 2018 9:24 pm
16) разжим захвата (OUTPUT_ZAXVAT) включить.
17) проверка разжима (INPUT_ZAXVAT) активн=продолжаем. не активен стоп+вывод сообщения "проверьте захват инструмента"
18) перемещение в точку Z-168 (опускание в колодец)
19) зажим захвата (OUTPUT_ZAXVAT) выключить.
20) проверка зажима (INPUT_ZAXVAT) не активн=продолжаем. активен стоп+вывод сообщения "проверьте захват инструмента"
21) перемещение в точку X507 выход из вилки.
22) подьем на Z MAX.
23) проверка наличия инструмента (INPUT_TOOL) активен=продолжаем. не активен стоп+вывод сообщения "инструмент отсутствует"
24) закрыть крышку (OUTPUT_KRISKA) выключить.
25) прочитать сохраненное состояние в пункте 2.
26) переключить систему координат обратно,запустить шпиндель,привести м7 в прочтенное состояние,продолжить выполнение уп.

Приведенный пример написан с нуля и не проверялся на правильность кода и ошибки компиляции.
Дальше надо уже на машине собирать все в кучу и включать.

mycnc
Posts: 140
Joined: Thu May 10, 2018 2:42 pm

Re: Настройка автосмены инструмента.

Post by mycnc » Thu Jun 14, 2018 3:03 am

frezeryga wrote:
Wed Jun 13, 2018 9:38 am
А также где можно почитать список всех регистров,макросов,плс процедур и их назначение.
Списки регистров есть тут и тут
Описание регистров добавляется по мере сил.

Списка всех ПЛЦ процедур и макросов не существует.
Есть небольшое количество базовых (стандартных) макросов-процедур, которые можно, например, сгенерить в визарде.
Но в остальном это все совершенно произвольное.
В описанном примере просто использовали коды M601, M602, M603 и тд, но с таким же успехом можно было использовать и другие номера, например М964 М366 и тд.

Kiriller
Posts: 18
Joined: Thu Jun 14, 2018 9:51 am

Re: Настройка автосмены инструмента.

Post by Kiriller » Thu Jun 14, 2018 9:53 am

Почему в некоторый плц-процедурах есть ф-я main(), а в некоторых нет? В чем различие таких процедур?

mycnc
Posts: 140
Joined: Thu May 10, 2018 2:42 pm

Re: Настройка автосмены инструмента.

Post by mycnc » Thu Jun 14, 2018 11:45 am

Функция main() должна быть во всех PLC процедурах.
Если это про описанный пример автосмены, то я сказал, что все это написано с нуля без всяких проверик и оптимизаций.
Вероятно, опечатка.

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

PS: я поправил описание и добавил main() где нашел.

Kiriller
Posts: 18
Joined: Thu Jun 14, 2018 9:51 am

Re: Настройка автосмены инструмента.

Post by Kiriller » Thu Jun 14, 2018 12:29 pm

Тогда не очень понятно...
У профиля есть папка plc. В ней есть src, hard и soft. Я так понимаю программировать надо в hard или soft? Компилится будет все, что в этих папках?
Зачем тогда src, в которой все плц без main()?

mycnc
Posts: 140
Joined: Thu May 10, 2018 2:42 pm

Re: Настройка автосмены инструмента.

Post by mycnc » Thu Jun 14, 2018 2:48 pm

Развитие софта myCNC прошло достаточно длинный путь.
Первая реализация PLC для myCNC была в виде внешней программы компилятора и скрипта, который компилил все исходники и собирал их в образ PLC диска для контроллера. Работало это только под Linux. Исходники располагались в каталоге "src".
На тот момент компилятор не требовал выделение функции main()

Через несколько лет мы сделали PLC компилятор мультиплатформенным и встроили его внутрь myCNC в виде PLC Builder.
Кроме того добавилась возможность определять внешние процедуры и запускать их из основного тела PLC. В тот момент и появилась необходимость оборачивать основное тело в main().

Это произошло года 3 назад. Миграция со старого PLC на PLC-Builder требует некоторого времени на правку исходников (обернуть все функции в main как минимум) и тестирование, поэтому это было сделано для "живых" профилей, которые мы поддерживаем. В старых профилях работает пре-компилированный PLC.

PLC-Builder берет исходники из "hard" папки для Hardware-PLC
и из "soft" папки для Software-PLC.

Вы, вероятно, смотрите один из профилей, где или миграция не сделана на PLC Builder или исходная папка "src" оставлена "на всякий случай".

В совсем новых профилях стараемся подчищать и "src" удалять.

Kiriller
Posts: 18
Joined: Thu Jun 14, 2018 9:51 am

Re: Настройка автосмены инструмента.

Post by Kiriller » Sun Jun 17, 2018 5:44 pm

Почему при вызове из макроса М6 Т...
G10 L81 P5400 Q5409
не происходит смены текущего инструмента? Что не так?

И как понимать эти 2 строки из таблицы глобальных переменных? Нет ли ошибки?
GVAR_OFFSET_TOOL_PARAMS 5400
GVAR_CURRENT_TOOL_NUMBER 5400

Post Reply