доброго времени суток, уважаемые
.
возникли также проблемы с прерываниями у меня как мне кажется. прилагаю файл с началом кода программы.
итак, что имею: робот-сварочник, лазер и мини-пк. на мини-пк запущена самописная программа на с++, которая связывается с лазером и собирает от него данные, рассчитывает всё и потом передает данные роботу для корректировки координат.
на данный момент работает почти всё как нам надо, то есть имеется 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 прерывания могут быть использованы, у меня их меньше как бы.
принимаю любые предположения для решения задачки, не сказать что это проблема прям для меня, как бы сейчас всё работает, но порой заготовку робот возвращает обратно оператору чтобы тот искал изъян в сканировании, правил его и вертал обратно. но вот если сделать корректировки по сканированию начальному, то это решит небольшую проблему.
есть кстати предположение, что можно попробовать включать прерывания не все сразу, а последовательно хотя бы по паре штук по мере их вызова и потом их отключать, чтобы не мешались когда они не нужны, думаю попробовать эту теорию. но для этого придется на время оператора "изгнать" и отнять у него робота для тестирования )))
всем приятного дня.