PDA

Просмотр полной версии : Не работает interrupt


Александр ПИК
07.10.2021, 15:56
Прога досталась в наследство. Робот плазменный ,система KRC4. Технология такова- перемещение к фигуре 1(отверстие), ожидание пуска цикла (WAIT FOR) , подвод, включение плазмы, резка, отвод и далее. Технология всех отверстия одинакова. В конце включена команда interrupt. Она останавливает робот при не зажигании дуги. Она не работает на фигуре 1, на всех остальных работает и останавливает робот с вопросом: продолжить или перерезать. Почему одна и та же команда не работает только в одном месте? Фото ниже

Александр ПИК
07.10.2021, 16:09
https://drive.google.com/file/d/1G64rkqWqBIe2kGjHgpgxdDv3T6xOch19/view

https://drive.google.com/file/d/1tOk55dsuRw2P4_KcgodcJh3pROLhqKE6/view
https://drive.google.com/file/d/1afjSqeA8q8iHGBTjr9zKd7I0J-_jItRu/view

Александр ПИК
07.10.2021, 16:11
еще на что то нажав (не помню) появляются скрытые команды, написаны синим цветом. может там что то есть? но как их посмотреть -не знаю.

Роботёр
08.10.2021, 08:29
давай архив. по фото вообще не вижу, где у тебя включается прерывание

Александр ПИК
08.10.2021, 09:42
давай архив. по фото вообще не вижу, где у тебя включается прерывание

архивировать не дает на обычную флэшку. 32гб . видимо надо спец. флэшку кука. есть в точке Adat0 -там внутри триггер и нули стоят и False. фото в обед

Роботёр
08.10.2021, 10:16
что значит не дает архивировать? какая ошибка? для архивирования спец флешка не нужна. путь по которому сохраняется архив верен?

Александр ПИК
08.10.2021, 15:28
что значит не дает архивировать? какая ошибка? для архивирования спец флешка не нужна. путь по которому сохраняется архив верен?

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

Александр ПИК
11.10.2021, 09:46
В общем все печально, в выходные работал на роботе технолог. Подтвердил- пропускает на втором столе отверстие при не зажигании плазмы( фигура 1) , то есть проблема сама не исчезла. Архив ниже
https://disk.yandex.ru/d/Asm4BikllSTxfQ

программа JOB1300 OSN TAB2
в автомате запускаем прогу MAIN JOB 1300

жаловались на все проги второго стола, на фигуру1 (отверстие), на первом столе все норм.

Роботёр
11.10.2021, 12:43
Смотри, в подпрограмме plasma_start () есть строчки:
IF $OUT[777] == TRUE THEN ;check PLASMA CUT ON
;== OUT[777] TEST wait I_MOVING_TORCH
PULSE (O_TI_MOVING_TORCH,TRUE,1.5 ) ;=pulse O_TI_MOVING_TORCH $OUT[716]
INTERRUPT ON 17
ELSE
INTERRUPT OFF 17

Что за выход out[777]? От состояния этого выхода зависит включено или выключено прерывание.
Советую проверить его состояние во время выполнения программы.
Или попробуй его закомментировать и посмотри что будет.

Роботёр
11.10.2021, 13:05
да и вообще проверь состояние прерывания на момент выполнения данной части программы. если я не ошибаюсь, то в "мониторе" можно посмотреть состояние прерывания. от этого уже буде плясать

Александр ПИК
11.10.2021, 13:21
да и вообще проверь состояние прерывания на момент выполнения данной части программы. если я не ошибаюсь, то в "мониторе" можно посмотреть состояние прерывания. от этого уже буде плясать

проблема в том, что дугу не зажигает именно на данном участке траектории довольно редко. 2-3 раза за смену и поймать этот момент сложно. момент- выход 777 отвечает за прерывания? в других местах программы все работает нормально.

Александр ПИК
11.10.2021, 13:23
да и вообще проверь состояние прерывания на момент выполнения данной части программы. если я не ошибаюсь, то в "мониторе" можно посмотреть состояние прерывания. от этого уже буде плясать

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

Роботёр
11.10.2021, 13:39
проблема в том, что дугу не зажигает именно на данном участке траектории довольно редко. 2-3 раза за смену и поймать этот момент сложно. момент- выход 777 отвечает за прерывания? в других местах программы все работает нормально.


да, выход 777 отвечает за включение прерывания. это видно по части кода, который я прислал выше

Роботёр
11.10.2021, 13:42
или прерывания можно посмотреть даже если не сработало? сейчас схожу попробую найти менюшку в мониторе

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

Pavel_T
11.10.2021, 14:24
У меня тоже будет пару замечаний:
1. Файл sps.sub строки:
64 $CYCFLAG[17] = NOT (O_TI_MOVING_TORCH OR I_MOVING_TORCH) ;CONTROL PLASMA CUT
65 ;=$CYCFLAG[17] = NOT I_MOVING_TORCH ;CONTROL PLASMA CUT
Здесь при объявлении $CYCFLAG[17] проверяется сразу и выход и вход. Причем проверяемый выход, как я понял,
влияет на проверяемый вход. Здесь, как мне кажется, закоментированная строка 65 более уместна.
2. Объявлять $CYCFLAG[17] в sps.sub необязательно. Робот опрашивает циклические флаги интерактивно.
Я бы для удобства (или отладки) объявил $CYCFLAG[17] перед объявлением прерывания:
$CYCFLAG[17] = NOT I_MOVING_TORCH ;CONTROL PLASMA CUT
INTERRUPT DECL 17 WHEN $CYCFLAG[17]==TRUE DO REAKT_AVARIA_PLASMA()

Ну и как правильно заметил Роботер надо отладить plasma_start (), а то не понятно, что не срабатывает
$CYCFLAG[17] и висящее на нем прерывание или все-таки прерывание в результате запрещено.

Александр ПИК
11.10.2021, 14:34
через монитор, на протяжении всей программы, можно смотреть включено или выключено прерывание

во время работы постоянно горит 777 выход. на проблемном отверстии тоже горит
фото
https://disk.yandex.ru/d/Yl-6L5dcykpyjQ

Pavel_T
11.10.2021, 14:44
см. sps.sub строка 57
$OUT[777]=TRUE
это какая-то заглушка (байпас).

Александр ПИК
11.10.2021, 15:01
см. sps.sub строка 57
=TRUE
это какая-то заглушка (байпас).

тогда я не догнал где смотреть прерывания...(((

Александр ПИК
11.10.2021, 15:03
где то в программе косяк думаю. так то ведь все работает, кроме одного отверстия. и почему там не срабатывает х.з.

Александр ПИК
11.10.2021, 15:07
Смотри, в подпрограмме plasma_start () есть строчки:
IF == TRUE THEN ;check PLASMA CUT ON
;== OUT[777] TEST wait I_MOVING_TORCH
PULSE (O_TI_MOVING_TORCH,TRUE,1.5 ) ;=pulse O_TI_MOVING_TORCH
INTERRUPT ON 17
ELSE
INTERRUPT OFF 17

Что за выход out[777]? От состояния этого выхода зависит включено или выключено прерывание.
Советую проверить его состояние во время выполнения программы.
Или попробуй его закомментировать и посмотри что будет.

Как узнать, что за выход? Должно же где то быть описание всех выходов...Проверить состояние- смотреть горит или нет. Верно?
Там выбора особо нет- входы, выходы- цифр, аналоги, внеш авто, драйвера

Pavel_T
11.10.2021, 15:57
Я бы просто попробовал в процедуре plasma_start() после каждой строки
INTERRUPT OFF 17 добавить
MsgNotify("INTERRUPT OFF line 1434")
или INTERRUPT ON 17 добавить
MsgNotify("INTERRUPT ON line 1432")
и т.д.
Затем запустить в автомате и смотреть на пульте на главном экране последовательность
лога сообщений когда сиквенс нормальный и когда с ошибкой. А по сообщениям с номером строки
понять, как сработала логика втом и другом случае.

Роботёр
12.10.2021, 09:23
Сейчас очень важно понять, включено ли прерывание на моменте неподжига дуги плазмы. Ты говоришь, что это происходит достаточно редко и сложно отследить. Так создай искусственно данную ситуацию, подними точки поджигания дуги значительно выше, что бы ошибка выскакивала постоянно.
https://cloud.mail.ru/public/ALXQ/3si1keRaF -по ссылке мануал на KRC4. На странице 356 можно посмотреть, где находится меню индикации прерывания

MoHoMaX
14.10.2021, 08:58
доброго времени суток, уважаемые.
возникли также проблемы с прерываниями у меня как мне кажется. прилагаю файл с началом кода программы.
итак, что имею: робот-сварочник, лазер и мини-пк. на мини-пк запущена самописная программа на с++, которая связывается с лазером и собирает от него данные, рассчитывает всё и потом передает данные роботу для корректировки координат.
на данный момент работает почти всё как нам надо, то есть имеется 6 точек сканирования лазером. робот подъезжает на первую точку, дает сигнал о том что он на месте Startscan5 (все данные обмениваются через Kukavarproxy), моя программа считывает что пришло True по этой переменной, включает лазер, делает измерения, усредняет и передает роботу данные по смещению и сигнал Next5 о том, чтобы робот ехал на следующую точку. остальные 5 точек по аналогии делаются. Startscan0 -> Next0, Startscan1 -> Next1, Startscan2 -> Next2, Startscan3 -> Next3, Startscan4 -> Next4. тем самым через Interrupt отлавливаются эти Next# и в функциях Out# на флаги вешаются также True, которые потом робот ждет. повторюсь, это всё работает безотказно уже как месяца 3, но есть но...
пришла мысль доработать программу по измерениям, а именно подвинуть первые 2 сканирования как нам надо, чтобы объект измерения вычислялся более точнее с применением смещений для вычислений уже с корректировкой. т.е. Startscan5 и Startscan0 измерялись не всегда в 1 и той же точе р15 и р16 допустим, а с корректировкой смещения, иначе порой лазер попадает не туда куда надо если заготовка немного "кривая", ну вы поняли.
ну вот собственно делема, программу на с++ допилил на ещё 2 доп измерения, также добавил ещё 2 прерывания на Startscan6 и Startscan7 и к ним также Next6 и Next7, добавил 2 флага 7 и 8, также функции на них, всё по аналогии как делал ранее для тех 6 измерений. и что я имею: запускаю программу с самого начала, робот делает корректно все 8 измерений, затем варит заготовку, программа по Loop перезапускается по приходу флагу что оператор готов с новой заготовкой, затем робот подъезжает на 1 точку (startscan7) для сканирования и висит, ожидая Flag[8].
если смотреть в меню данные по флагам во вкладке "признаки", то действительно он выключен. но если свернуть оболочку программы и посмотреть логи по Kukavarproxy, то там Next7=true и также передалась величина смещения Replace1="чему-то". и соответственно т.к. пришло на робота Next7=true, что я вижу даже в переменных, если открыть и поглядеть в меню -> ... -> отдельно, то в теории если бы прерывание сработало, то и флаг бы стал активным. и вот я не понимаю почему при 1 запуске программы она первый цикл отрабатывает без препинаний, а на 2 цикле зависает. вопрос (((
ведь когда их было 6, всё работало, стало 8 и ни работает, логики не понимаю. в мануале пишут то ли 16, то ли 32 прерывания могут быть использованы, у меня их меньше как бы.

принимаю любые предположения для решения задачки, не сказать что это проблема прям для меня, как бы сейчас всё работает, но порой заготовку робот возвращает обратно оператору чтобы тот искал изъян в сканировании, правил его и вертал обратно. но вот если сделать корректировки по сканированию начальному, то это решит небольшую проблему.

есть кстати предположение, что можно попробовать включать прерывания не все сразу, а последовательно хотя бы по паре штук по мере их вызова и потом их отключать, чтобы не мешались когда они не нужны, думаю попробовать эту теорию. но для этого придется на время оператора "изгнать" и отнять у него робота для тестирования )))

всем приятного дня.

Pavel_T
15.10.2021, 08:02
Трудно сказать, почему пререывание не срабатывает не видя всей программы. Так навскидку, может быть корректно не проинициализированы
или наоборот вовремя не сбрасываются Next6 и Next7. Mожет быть прерывание вызывается из прерывания или не в той последовательности, как ожидалось потому что программа в роботе и PC плохо синхронизированны по обмену данными (т.е. робот выполняет еще Startscan5, а ему уже подняли Next6 или Next7) и т.д.

MoHoMaX
22.11.2021, 17:38
так и не победил много прерываний, сделал всего 1. тупо когда робот встал на точку, передается Startscan с необходимым номером программе, а затем как сделаются расчеты, то передается уже роботу Next = True и после того как он его получает выполняется функция, в которой Next = False. и так 8 раз подряд на время вычислений. пока что полет нормальный, проблемы такого рода закончились.

Александр ПИК
30.11.2021, 07:51
моя проблема решилась пересохранением всех точек в фигуре, где не работало прерывание. видимо что то перезаписалось и стало все ок. всем спасибо за полезные советы!!