- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
Остановка макроса
Модераторы: Глоб.модераторы, специалисты Weintek
-
- здесь недавно
- Сообщения: 46
- Зарегистрирован: 15 янв 2020, 18:47
- Имя: Олег
- Благодарил (а): 7 раз
Остановка макроса
Как остановить выполнение макроса?И есть ли переключение битового индикатора с постоянного вкл на мигание или два индикатора лепить?в макросе вкл битовый индикатор, а через какое-то время надо помигать битовым индикатором.
-
- освоился
- Сообщения: 290
- Зарегистрирован: 28 авг 2014, 09:30
- Имя: Воднев Александр Васильевич
- Страна: РФ
- город/регион: Томск
- Благодарил (а): 22 раза
- Поблагодарили: 33 раза
Остановка макроса
Как бы изначально Weintek предполагает однократное выполнение макроса. Для того, чтобы запустить макрос в цикле надо предпринимать специальные алгоритмы и настройки. Не понятна суть проблемы.
Заставить мигать по своему хотению включенным индикатором можно, например, применив бит безопасности с настройкой отсутствия видимости.
Заставить мигать по своему хотению включенным индикатором можно, например, применив бит безопасности с настройкой отсутствия видимости.
-
- здесь недавно
- Сообщения: 46
- Зарегистрирован: 15 янв 2020, 18:47
- Имя: Олег
- Благодарил (а): 7 раз
Остановка макроса
макрос начался выполняться и бац его надо остановить, не хочется лепить строки проверки, поэтому подумалось мож волшебная кнопка или ещё что есть нажал и макрос остановился.vodav писал(а): ↑06 июл 2020, 06:40 Как бы изначально Weintek предполагает однократное выполнение макроса. Для того, чтобы запустить макрос в цикле надо предпринимать специальные алгоритмы и настройки. Не понятна суть проблемы.
Заставить мигать по своему хотению включенным индикатором можно, например, применив бит безопасности с настройкой отсутствия видимости.
-
- администратор
- Сообщения: 18758
- Зарегистрирован: 17 июн 2008, 16:01
- Имя: Евгений свет Брониславович
- Страна: Россия
- город/регион: Санкт-Петербург
- Благодарил (а): 973 раза
- Поблагодарили: 1854 раза
Остановка макроса
И зачем для этого макрос останавливать? Делаете два индикатора, один постоянный, второй мигающий, мигающий поверх постоянного. Когда надо светить постоянно - включаете один, выключаете другой. Когда надо помигать - наоборот.
По вопросам работы Форума можно обратиться по этим контактам.
-
- здесь недавно
- Сообщения: 46
- Зарегистрирован: 15 янв 2020, 18:47
- Имя: Олег
- Благодарил (а): 7 раз
Остановка макроса
в макросе могут быть циклы и сколько они пройдут по времени не понятно, нажал на стоп и ждёшь когда он закончится и остановится, вот и надо стоп по стопу. не хотелось наслаивать (видимо придётся) битовые индикаторы, но попробую может с тремя состояниями получится.
-
- администратор
- Сообщения: 18758
- Зарегистрирован: 17 июн 2008, 16:01
- Имя: Евгений свет Брониславович
- Страна: Россия
- город/регион: Санкт-Петербург
- Благодарил (а): 973 раза
- Поблагодарили: 1854 раза
Остановка макроса
Значит в макросе его и сделайте, прямо внутри.
По вопросам работы Форума можно обратиться по этим контактам.
-
- администратор
- Сообщения: 18758
- Зарегистрирован: 17 июн 2008, 16:01
- Имя: Евгений свет Брониславович
- Страна: Россия
- город/регион: Санкт-Петербург
- Благодарил (а): 973 раза
- Поблагодарили: 1854 раза
Остановка макроса
Макрос можно прервать выполнением ошибочной операции, например делением на 0 или GetData на несуществующее устройство. Я бы ещё проверил бит безопасности макроса - что будет если его снять в процессе выполнения.
Но вообще странно, что макрос выполняется так долго что его конца придется подождать. Если от этого не уйти, то я бы его не прерывал, а байпасил изнутри. Но это в теории - на практике я по-другому проекты организую и этой проблемы нет.
Но вообще странно, что макрос выполняется так долго что его конца придется подождать. Если от этого не уйти, то я бы его не прерывал, а байпасил изнутри. Но это в теории - на практике я по-другому проекты организую и этой проблемы нет.
По вопросам работы Форума можно обратиться по этим контактам.
-
- почётный участник форума
- Сообщения: 3971
- Зарегистрирован: 20 янв 2010, 22:23
- Имя: Никита
- Страна: РФ
- город/регион: Мурманск
- Благодарил (а): 21 раз
- Поблагодарили: 229 раз
Остановка макроса
Вот именно так и надо. Если там цикл, так этот стоп и надо проверять в теле цикла. И прерывать весь макрос незачем, достаточно выйти из цикла и нормально завершить.
Это опробованный вариант? Без иронии, действительно интересно - можно ли вызовом у панели такого прерывания просто завершить макрос, а все остальное корректно продолжает работу и при этом освобождается все занятое в куче и разблокируются ресурсы?
Опыт - это когда на смену вопросам: "Что? Где? Когда? Как? Почему?" приходит единственный вопрос: "Нахрена? "
-
- администратор
- Сообщения: 18758
- Зарегистрирован: 17 июн 2008, 16:01
- Имя: Евгений свет Брониславович
- Страна: Россия
- город/регион: Санкт-Петербург
- Благодарил (а): 973 раза
- Поблагодарили: 1854 раза
Остановка макроса
Да. Я долго не мог понять, почему у меня цикличный опрос 9ти модбас-слейвов по СОМ-порту всегда заканчивается на том устройстве, которое даёт ошибку таймаута, следующие за ним устройства не опрашиваются совсем. Опрос был из макроса. Дело было в том, что опрос был по GetData, он ничем не заканчивался и макрос прерывался (я фиксировал адрес последнего опрошенного). Вместо GetData надо было использовать GetDataEx, который в результате опроса возвращает ошибку и выполнение макроса дальше продолжается. Сейчас так и сделал и всё работает.
В Мануале про это тоже написано.
Но это костыль костыльный.
В случае автора не макрос прерывать надо, а событие нормально обрабатывать.
По вопросам работы Форума можно обратиться по этим контактам.
-
- почётный участник форума
- Сообщения: 3971
- Зарегистрирован: 20 янв 2010, 22:23
- Имя: Никита
- Страна: РФ
- город/регион: Мурманск
- Благодарил (а): 21 раз
- Поблагодарили: 229 раз
Остановка макроса
Это немного разные вещи. Ошибка таймаута - это просто ситуация во время выполнения программы. А деление на ноль - немаскируемое аппаратное прерывание (или структурное исключение, в данном контексте можно считать одним и тем же). И его обработка должна перехватываться программистом или оставляться на откуп ОС, если этого перехвата не делается (так обычно и бывает). А как поведет себя ОС и какие процессы при этом уничтожатся, как реализован сам макрос в рамках ОС - остается только предполагать.
Кстати, раз уж вспомнили - когда-то обсуждали вопросы программирования морского оборудования, вроде под требования регистра. В котором запрещено деление на что-либо, кроме константы. Так вот, константа тоже не панацея. Деление пары 32-разрядных AX:DX на единицу или двойку или еще что-то, что не изменяет разрядности частного, дает то же прерывание по переполнению регистра. Точнее по флагу переполнения. В принципе, это конечно проблема компилятора, но кривые руки способны на что угодно.
Опыт - это когда на смену вопросам: "Что? Где? Когда? Как? Почему?" приходит единственный вопрос: "Нахрена? "
-
- администратор
- Сообщения: 18758
- Зарегистрирован: 17 июн 2008, 16:01
- Имя: Евгений свет Брониславович
- Страна: Россия
- город/регион: Санкт-Петербург
- Благодарил (а): 973 раза
- Поблагодарили: 1854 раза
Остановка макроса
Это неважно, потому что в документации явно про это сказано - макрос прервётся. То же произойдёт и при любой другой операции, закончившейся исключением, например делением на 0. Вопрос об этом. Я просто это подтвердил на практике.
Отправлено спустя 7 минут 40 секунд:
В Регистре не так сказано. Там сказано "представить доказательства отсутствие в программе возможностей возникновения критических исключений, приводящих к остановке выполняемой программы, таких как: деление на ноль, цикл без возможности выхода, условный или безусловный переход на несуществующую метку и т.п." А решалось это в том числе и константами т к. это проще всего.
Да я и на берегу в таких случаях делаю проверку: отдельно вычисляю знаменатель, и если он получается = 0 то до формулы не дохожу.
А от этого можно разными способами уходить, например вообще не использовать операцию деления.
Вот поэтому и существуют морские методики проверки и одобрения. И мои коды там реально смотрели и вопросы задавали. Только это не Российский Регистр, а Норвежский. В России Регистр упорно считает, что программирования не существует в природе (хотя в Правилах оно упомянуто).
По вопросам работы Форума можно обратиться по этим контактам.
-
- почётный участник форума
- Сообщения: 3971
- Зарегистрирован: 20 янв 2010, 22:23
- Имя: Никита
- Страна: РФ
- город/регион: Мурманск
- Благодарил (а): 21 раз
- Поблагодарили: 229 раз
Остановка макроса
Документации под рукой нет... Там ситуации с опросом и делением не ноль объединены? При делении на ноль и возникновении аппаратного прерывания, макрос прервется по определению:) Вопрос в том, что будет сделано в обработчике, и прервется ли только макрос...
А про доказательства мы тоже обсуждали, я поэтому вопрос и поднял. Целочисленное деление типа
Код: Выделить всё
mov ax,FFFFH
mov bl,2
div bl
Код: Выделить всё
mov bx,0
div bx
На мой косой взгляд было бы правильнее проверять наличие корректной обработки таких исключений. Но не я это придумывал.
А в данном конкретном случае обработчики реализуют китайцы в EasyBuilder. И чего от них ждать - никто не знает.
Опыт - это когда на смену вопросам: "Что? Где? Когда? Как? Почему?" приходит единственный вопрос: "Нахрена? "
-
- администратор
- Сообщения: 18758
- Зарегистрирован: 17 июн 2008, 16:01
- Имя: Евгений свет Брониславович
- Страна: Россия
- город/регион: Санкт-Петербург
- Благодарил (а): 973 раза
- Поблагодарили: 1854 раза
Остановка макроса
Я так далеко не копал. Просто не надо было.
поработав с EBPro и видя, что и как меняется в каждом релизе, лично я к ним стал относиться уважительно.
По вопросам работы Форума можно обратиться по этим контактам.
-
- почётный участник форума
- Сообщения: 3971
- Зарегистрирован: 20 янв 2010, 22:23
- Имя: Никита
- Страна: РФ
- город/регион: Мурманск
- Благодарил (а): 21 раз
- Поблагодарили: 229 раз
Остановка макроса
Так в этом и был вопрос - как именно организовано выполнение макросов в панели. Или, что почти одно и то же - где заканчивается работа программистов Weintek и начинается творение индусов, разрабатывающих ОС и что может остановиться вместе с макросом, если это прерывание передать дальше в обработчик ОС. Та запросто убить не только процесс макроса, вызвавший исключение, но и родительский процесс - сам рантайм. Вот нет сейчас панели для посмотреть, а на ПК с эмуляцией панели результат может быть недостоверным.
Кстати, обратил внимание что у нас среди нескольких десятков панелей подрядчики поставили всего несколько именно от weintek. Похоже, что панели известных брендов изготовленные в Китае, стали дешевле чем Weintek. Что запросто может быть, учитывая функционал последних - пока не смог придумать задачи, которую нельзя бы было реализовать. Про то, что в отдельных брендовых панелях макросы вообще отсутствуют - даже говорить не стоит.
Опыт - это когда на смену вопросам: "Что? Где? Когда? Как? Почему?" приходит единственный вопрос: "Нахрена? "
-
- администратор
- Сообщения: 18758
- Зарегистрирован: 17 июн 2008, 16:01
- Имя: Евгений свет Брониславович
- Страна: Россия
- город/регион: Санкт-Петербург
- Благодарил (а): 973 раза
- Поблагодарили: 1854 раза
Остановка макроса
Это надо у тех кто знает спрашивать.
Я знаю что в панели есть системные биты, сигнализирующие о том что макрос выполняется. Средств сбросить макрос я не нашел (за ненадобностью).
Простому разработчику так далеко там не забраться, да и незачем. Правильно написанные программы не надо прерывать! А искать костыли от неправильных - неблагодарное и бесполезное дело.
Ещё раз. При исключении внутри макроса сам макрос прерывается - это точно. А больше там нет мест где могут возникнуть исключения.
Вейнтеком разнообразие панелей не ограничивается, их много. Кто к чему привык - тот на том и делает.
По вопросам работы Форума можно обратиться по этим контактам.
-
- почётный участник форума
- Сообщения: 3971
- Зарегистрирован: 20 янв 2010, 22:23
- Имя: Никита
- Страна: РФ
- город/регион: Мурманск
- Благодарил (а): 21 раз
- Поблагодарили: 229 раз
Остановка макроса
Специально мануал посмотрел. Так же, как и в C++, можно и цикл прервать и из макроса выйти, но это все, как и положено, надо делать внутри макроса:
Т.е. снаружи взводим флаг, а в теле макроса его проверяем. И по нему или цикл обрываем, или завершаем макрос.break Used in for-next and while-wend. It skips immediately to the end of the reiterative statement.
continue Used in for-next and while-wend. It ends the current iteration of a loop and starts the next one.
return The return command inside the main block can force the macro to stop anywhere. It skips immediately to the end of the main block.
Опыт - это когда на смену вопросам: "Что? Где? Когда? Как? Почему?" приходит единственный вопрос: "Нахрена? "
-
- администратор
- Сообщения: 18758
- Зарегистрирован: 17 июн 2008, 16:01
- Имя: Евгений свет Брониславович
- Страна: Россия
- город/регион: Санкт-Петербург
- Благодарил (а): 973 раза
- Поблагодарили: 1854 раза
Остановка макроса
только если макрос выполняется настолько долго, что ждать его окончания автор не может - остаётся только гадать, сколько раз и в каких местах нужно делать эту проверку: читать глобальную переменную, и если она "да" то Return.
Есть подозрение что панель занята задачами не только отображения, но и управления. Отсюда и такая необходимость. Иначе я не могу себе представить, что за макросы такие которые чуть ли не минутами крутятся.
По вопросам работы Форума можно обратиться по этим контактам.
-
- почётный участник форума
- Сообщения: 3971
- Зарегистрирован: 20 янв 2010, 22:23
- Имя: Никита
- Страна: РФ
- город/регион: Мурманск
- Благодарил (а): 21 раз
- Поблагодарили: 229 раз
Остановка макроса
Такое может быть только при наличии циклов. Даже долгие математические задачи по решению дифур сводятся к циклам. Вот в теле цикла и надо проверять.
Опыт - это когда на смену вопросам: "Что? Где? Когда? Как? Почему?" приходит единственный вопрос: "Нахрена? "