1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

Остановка макроса

Модератор: специалисты Weintek

Ответить

Автор темы
KIPiAE
здесь недавно
здесь недавно
Сообщения: 46
Зарегистрирован: 15 янв 2020, 18:47
Имя: Олег
Благодарил (а): 7 раз

Остановка макроса

Сообщение KIPiAE »

Как остановить выполнение макроса?И есть ли переключение битового индикатора с постоянного вкл на мигание или два индикатора лепить?в макросе вкл битовый индикатор, а через какое-то время надо помигать битовым индикатором.
Аватара пользователя

vodav
освоился
освоился
Сообщения: 275
Зарегистрирован: 28 авг 2014, 09:30
Имя: Воднев Александр Васильевич
Страна: РФ
город/регион: Томск
Благодарил (а): 16 раз
Поблагодарили: 26 раз

Остановка макроса

Сообщение vodav »

Как бы изначально Weintek предполагает однократное выполнение макроса. Для того, чтобы запустить макрос в цикле надо предпринимать специальные алгоритмы и настройки. Не понятна суть проблемы.
Заставить мигать по своему хотению включенным индикатором можно, например, применив бит безопасности с настройкой отсутствия видимости.

Автор темы
KIPiAE
здесь недавно
здесь недавно
Сообщения: 46
Зарегистрирован: 15 янв 2020, 18:47
Имя: Олег
Благодарил (а): 7 раз

Остановка макроса

Сообщение KIPiAE »

vodav писал(а): 06 июл 2020, 06:40 Как бы изначально Weintek предполагает однократное выполнение макроса. Для того, чтобы запустить макрос в цикле надо предпринимать специальные алгоритмы и настройки. Не понятна суть проблемы.
Заставить мигать по своему хотению включенным индикатором можно, например, применив бит безопасности с настройкой отсутствия видимости.
макрос начался выполняться и бац его надо остановить, не хочется лепить строки проверки, поэтому подумалось мож волшебная кнопка или ещё что есть нажал и макрос остановился.
Аватара пользователя

vodav
освоился
освоился
Сообщения: 275
Зарегистрирован: 28 авг 2014, 09:30
Имя: Воднев Александр Васильевич
Страна: РФ
город/регион: Томск
Благодарил (а): 16 раз
Поблагодарили: 26 раз

Остановка макроса

Сообщение vodav »

Бац..и в памяти панели такой компот, что и перезагрузка не поможет
Аватара пользователя

Jackson
администратор
администратор
Сообщения: 17471
Зарегистрирован: 17 июн 2008, 16:01
Имя: Евгений свет Брониславович
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 749 раз
Поблагодарили: 1277 раз

Остановка макроса

Сообщение Jackson »

KIPiAE писал(а): 05 июл 2020, 13:09 Как остановить выполнение макроса?И есть ли переключение битового индикатора с постоянного вкл на мигание или два индикатора лепить?в макросе вкл битовый индикатор, а через какое-то время надо помигать битовым индикатором.
И зачем для этого макрос останавливать? Делаете два индикатора, один постоянный, второй мигающий, мигающий поверх постоянного. Когда надо светить постоянно - включаете один, выключаете другой. Когда надо помигать - наоборот.
По вопросам работы Форума можно обратиться по этим контактам.

Автор темы
KIPiAE
здесь недавно
здесь недавно
Сообщения: 46
Зарегистрирован: 15 янв 2020, 18:47
Имя: Олег
Благодарил (а): 7 раз

Остановка макроса

Сообщение KIPiAE »

Jackson писал(а): 07 июл 2020, 19:49
KIPiAE писал(а): 05 июл 2020, 13:09 Как остановить выполнение макроса?И есть ли переключение битового индикатора с постоянного вкл на мигание или два индикатора лепить?в макросе вкл битовый индикатор, а через какое-то время надо помигать битовым индикатором.
И зачем для этого макрос останавливать? Делаете два индикатора, один постоянный, второй мигающий, мигающий поверх постоянного. Когда надо светить постоянно - включаете один, выключаете другой. Когда надо помигать - наоборот.
в макросе могут быть циклы и сколько они пройдут по времени не понятно, нажал на стоп и ждёшь когда он закончится и остановится, вот и надо стоп по стопу. не хотелось наслаивать (видимо придётся) битовые индикаторы, но попробую может с тремя состояниями получится.
Аватара пользователя

Jackson
администратор
администратор
Сообщения: 17471
Зарегистрирован: 17 июн 2008, 16:01
Имя: Евгений свет Брониславович
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 749 раз
Поблагодарили: 1277 раз

Остановка макроса

Сообщение Jackson »

KIPiAE писал(а): 08 июл 2020, 08:32 вот и надо стоп по стопу
Значит в макросе его и сделайте, прямо внутри.
По вопросам работы Форума можно обратиться по этим контактам.
Аватара пользователя

Jackson
администратор
администратор
Сообщения: 17471
Зарегистрирован: 17 июн 2008, 16:01
Имя: Евгений свет Брониславович
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 749 раз
Поблагодарили: 1277 раз

Остановка макроса

Сообщение Jackson »

Макрос можно прервать выполнением ошибочной операции, например делением на 0 или GetData на несуществующее устройство. Я бы ещё проверил бит безопасности макроса - что будет если его снять в процессе выполнения.

Но вообще странно, что макрос выполняется так долго что его конца придется подождать. Если от этого не уйти, то я бы его не прерывал, а байпасил изнутри. Но это в теории - на практике я по-другому проекты организую и этой проблемы нет.
По вопросам работы Форума можно обратиться по этим контактам.
Аватара пользователя

Никита
почётный участник форума
почётный участник форума
Сообщения: 3899
Зарегистрирован: 20 янв 2010, 22:23
Имя: Никита
Страна: РФ
город/регион: Мурманск
Благодарил (а): 18 раз
Поблагодарили: 187 раз

Остановка макроса

Сообщение Никита »

Jackson писал(а): 08 июл 2020, 11:45 Значит в макросе его и сделайте, прямо внутри.
Вот именно так и надо. Если там цикл, так этот стоп и надо проверять в теле цикла. И прерывать весь макрос незачем, достаточно выйти из цикла и нормально завершить.
Jackson писал(а): 08 июл 2020, 11:50 Макрос можно прервать выполнением ошибочной операции, например делением на 0
Это опробованный вариант? Без иронии, действительно интересно - можно ли вызовом у панели такого прерывания просто завершить макрос, а все остальное корректно продолжает работу и при этом освобождается все занятое в куче и разблокируются ресурсы?
Опыт - это когда на смену вопросам: "Что? Где? Когда? Как? Почему?" приходит единственный вопрос: "Нахрена? "
Аватара пользователя

Jackson
администратор
администратор
Сообщения: 17471
Зарегистрирован: 17 июн 2008, 16:01
Имя: Евгений свет Брониславович
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 749 раз
Поблагодарили: 1277 раз

Остановка макроса

Сообщение Jackson »

Никита писал(а): 08 июл 2020, 16:24 Это опробованный вариант?
Да. Я долго не мог понять, почему у меня цикличный опрос 9ти модбас-слейвов по СОМ-порту всегда заканчивается на том устройстве, которое даёт ошибку таймаута, следующие за ним устройства не опрашиваются совсем. Опрос был из макроса. Дело было в том, что опрос был по GetData, он ничем не заканчивался и макрос прерывался (я фиксировал адрес последнего опрошенного). Вместо GetData надо было использовать GetDataEx, который в результате опроса возвращает ошибку и выполнение макроса дальше продолжается. Сейчас так и сделал и всё работает.

В Мануале про это тоже написано.

Но это костыль костыльный.

В случае автора не макрос прерывать надо, а событие нормально обрабатывать.
По вопросам работы Форума можно обратиться по этим контактам.
Аватара пользователя

Никита
почётный участник форума
почётный участник форума
Сообщения: 3899
Зарегистрирован: 20 янв 2010, 22:23
Имя: Никита
Страна: РФ
город/регион: Мурманск
Благодарил (а): 18 раз
Поблагодарили: 187 раз

Остановка макроса

Сообщение Никита »

Jackson писал(а): 08 июл 2020, 17:13 опрос 9ти модбас-слейвов по СОМ-порту всегда заканчивает на том устройстве, которое даёт ошибку таймаута
Это немного разные вещи. Ошибка таймаута - это просто ситуация во время выполнения программы. А деление на ноль - немаскируемое аппаратное прерывание (или структурное исключение, в данном контексте можно считать одним и тем же). И его обработка должна перехватываться программистом или оставляться на откуп ОС, если этого перехвата не делается (так обычно и бывает). А как поведет себя ОС и какие процессы при этом уничтожатся, как реализован сам макрос в рамках ОС - остается только предполагать.
Кстати, раз уж вспомнили - когда-то обсуждали вопросы программирования морского оборудования, вроде под требования регистра. В котором запрещено деление на что-либо, кроме константы. Так вот, константа тоже не панацея. Деление пары 32-разрядных AX:DX на единицу или двойку или еще что-то, что не изменяет разрядности частного, дает то же прерывание по переполнению регистра. Точнее по флагу переполнения. В принципе, это конечно проблема компилятора, но кривые руки способны на что угодно.
Опыт - это когда на смену вопросам: "Что? Где? Когда? Как? Почему?" приходит единственный вопрос: "Нахрена? "
Аватара пользователя

Jackson
администратор
администратор
Сообщения: 17471
Зарегистрирован: 17 июн 2008, 16:01
Имя: Евгений свет Брониславович
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 749 раз
Поблагодарили: 1277 раз

Остановка макроса

Сообщение Jackson »

Никита писал(а): 09 июл 2020, 09:29 Это немного разные вещи.
Это неважно, потому что в документации явно про это сказано - макрос прервётся. То же произойдёт и при любой другой операции, закончившейся исключением, например делением на 0. Вопрос об этом. Я просто это подтвердил на практике.

Отправлено спустя 7 минут 40 секунд:
Никита писал(а): 09 июл 2020, 09:29 Кстати, раз уж вспомнили - когда-то обсуждали вопросы программирования морского оборудования, вроде под требования регистра. В котором запрещено деление на что-либо, кроме константы. Так вот, константа тоже не панацея.
В Регистре не так сказано. Там сказано "представить доказательства отсутствие в программе возможностей возникновения критических исключений, приводящих к остановке выполняемой программы, таких как: деление на ноль, цикл без возможности выхода, условный или безусловный переход на несуществующую метку и т.п." А решалось это в том числе и константами т к. это проще всего.
Да я и на берегу в таких случаях делаю проверку: отдельно вычисляю знаменатель, и если он получается = 0 то до формулы не дохожу.
А от этого можно разными способами уходить, например вообще не использовать операцию деления.
Никита писал(а): 09 июл 2020, 09:29В принципе, это конечно проблема компилятора, но кривые руки способны на что угодно
Вот поэтому и существуют морские методики проверки и одобрения. И мои коды там реально смотрели и вопросы задавали. Только это не Российский Регистр, а Норвежский. В России Регистр упорно считает, что программирования не существует в природе (хотя в Правилах оно упомянуто).
По вопросам работы Форума можно обратиться по этим контактам.
Аватара пользователя

Никита
почётный участник форума
почётный участник форума
Сообщения: 3899
Зарегистрирован: 20 янв 2010, 22:23
Имя: Никита
Страна: РФ
город/регион: Мурманск
Благодарил (а): 18 раз
Поблагодарили: 187 раз

Остановка макроса

Сообщение Никита »

Jackson писал(а): 09 июл 2020, 11:21 Это неважно, потому что в документации явно про это сказано - макрос прервётся. То же произойдёт и при любой другой операции, закончившейся исключением, например делением на 0. Вопрос об этом. Я просто это подтвердил на практике.
Документации под рукой нет... Там ситуации с опросом и делением не ноль объединены? При делении на ноль и возникновении аппаратного прерывания, макрос прервется по определению:) Вопрос в том, что будет сделано в обработчике, и прервется ли только макрос...

А про доказательства мы тоже обсуждали, я поэтому вопрос и поднял. Целочисленное деление типа

Код: Выделить всё

mov   ax,FFFFH
mov   bl,2
div   bl       
и

Код: Выделить всё

mov   bx,0
div   bx
Приведут к одному и тому же исключению. Проверялось лично, правда уже на 32-разрядных процессорах и регистрах EAX и BX И если во втором случае ситуация очевидна, то в первом, если понимать требования буквально, нужны доказательства того, что компилятор не сформирует деление с разной разрядностью (что на практике доказать нереально, как и обратное) или доказать что результат деления при любых комбинациях будет восьмиразрядным. Так что эти проверки только от явных глупостей, но безопасности не гарантируют.
На мой косой взгляд было бы правильнее проверять наличие корректной обработки таких исключений. Но не я это придумывал.

А в данном конкретном случае обработчики реализуют китайцы в EasyBuilder. И чего от них ждать - никто не знает.
Опыт - это когда на смену вопросам: "Что? Где? Когда? Как? Почему?" приходит единственный вопрос: "Нахрена? "
Аватара пользователя

Jackson
администратор
администратор
Сообщения: 17471
Зарегистрирован: 17 июн 2008, 16:01
Имя: Евгений свет Брониславович
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 749 раз
Поблагодарили: 1277 раз

Остановка макроса

Сообщение Jackson »

Я так далеко не копал. Просто не надо было.
Никита писал(а): 09 июл 2020, 11:52 А в данном конкретном случае обработчики реализуют китайцы в EasyBuilder. И чего от них ждать - никто не знает.
поработав с EBPro и видя, что и как меняется в каждом релизе, лично я к ним стал относиться уважительно.
По вопросам работы Форума можно обратиться по этим контактам.
Аватара пользователя

Никита
почётный участник форума
почётный участник форума
Сообщения: 3899
Зарегистрирован: 20 янв 2010, 22:23
Имя: Никита
Страна: РФ
город/регион: Мурманск
Благодарил (а): 18 раз
Поблагодарили: 187 раз

Остановка макроса

Сообщение Никита »

Jackson писал(а): 09 июл 2020, 13:31 поработав с EBPro и видя, что и как меняется в каждом релизе, лично я к ним стал относиться уважительно.
Так в этом и был вопрос - как именно организовано выполнение макросов в панели. Или, что почти одно и то же - где заканчивается работа программистов Weintek и начинается творение индусов, разрабатывающих ОС и что может остановиться вместе с макросом, если это прерывание передать дальше в обработчик ОС. Та запросто убить не только процесс макроса, вызвавший исключение, но и родительский процесс - сам рантайм. Вот нет сейчас панели для посмотреть, а на ПК с эмуляцией панели результат может быть недостоверным.
Кстати, обратил внимание что у нас среди нескольких десятков панелей подрядчики поставили всего несколько именно от weintek. Похоже, что панели известных брендов изготовленные в Китае, стали дешевле чем Weintek. Что запросто может быть, учитывая функционал последних - пока не смог придумать задачи, которую нельзя бы было реализовать. Про то, что в отдельных брендовых панелях макросы вообще отсутствуют - даже говорить не стоит.
Опыт - это когда на смену вопросам: "Что? Где? Когда? Как? Почему?" приходит единственный вопрос: "Нахрена? "
Аватара пользователя

Jackson
администратор
администратор
Сообщения: 17471
Зарегистрирован: 17 июн 2008, 16:01
Имя: Евгений свет Брониславович
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 749 раз
Поблагодарили: 1277 раз

Остановка макроса

Сообщение Jackson »

Никита писал(а): 09 июл 2020, 16:06 Так в этом и был вопрос - как именно организовано выполнение макросов в панели.
Это надо у тех кто знает спрашивать.
Я знаю что в панели есть системные биты, сигнализирующие о том что макрос выполняется. Средств сбросить макрос я не нашел (за ненадобностью).
Никита писал(а): 09 июл 2020, 16:06 Та запросто убить не только процесс макроса, вызвавший исключение, но и родительский процесс - сам рантайм
Простому разработчику так далеко там не забраться, да и незачем. Правильно написанные программы не надо прерывать! А искать костыли от неправильных - неблагодарное и бесполезное дело.

Ещё раз. При исключении внутри макроса сам макрос прерывается - это точно. А больше там нет мест где могут возникнуть исключения.
Никита писал(а): 09 июл 2020, 16:06 Кстати, обратил внимание что у нас среди нескольких десятков панелей подрядчики поставили всего несколько именно от weintek
Вейнтеком разнообразие панелей не ограничивается, их много. Кто к чему привык - тот на том и делает.
По вопросам работы Форума можно обратиться по этим контактам.
Аватара пользователя

Никита
почётный участник форума
почётный участник форума
Сообщения: 3899
Зарегистрирован: 20 янв 2010, 22:23
Имя: Никита
Страна: РФ
город/регион: Мурманск
Благодарил (а): 18 раз
Поблагодарили: 187 раз

Остановка макроса

Сообщение Никита »

Jackson писал(а): 09 июл 2020, 16:31 Средств сбросить макрос я не нашел (за ненадобностью).
Специально мануал посмотрел. Так же, как и в 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.
Т.е. снаружи взводим флаг, а в теле макроса его проверяем. И по нему или цикл обрываем, или завершаем макрос.
Опыт - это когда на смену вопросам: "Что? Где? Когда? Как? Почему?" приходит единственный вопрос: "Нахрена? "
Аватара пользователя

Jackson
администратор
администратор
Сообщения: 17471
Зарегистрирован: 17 июн 2008, 16:01
Имя: Евгений свет Брониславович
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 749 раз
Поблагодарили: 1277 раз

Остановка макроса

Сообщение Jackson »

Никита писал(а): 09 июл 2020, 19:33 Т.е. снаружи взводим флаг, а в теле макроса его проверяем.
только если макрос выполняется настолько долго, что ждать его окончания автор не может - остаётся только гадать, сколько раз и в каких местах нужно делать эту проверку: читать глобальную переменную, и если она "да" то Return.

Есть подозрение что панель занята задачами не только отображения, но и управления. Отсюда и такая необходимость. Иначе я не могу себе представить, что за макросы такие которые чуть ли не минутами крутятся.
По вопросам работы Форума можно обратиться по этим контактам.
Аватара пользователя

Никита
почётный участник форума
почётный участник форума
Сообщения: 3899
Зарегистрирован: 20 янв 2010, 22:23
Имя: Никита
Страна: РФ
город/регион: Мурманск
Благодарил (а): 18 раз
Поблагодарили: 187 раз

Остановка макроса

Сообщение Никита »

Jackson писал(а): 09 июл 2020, 23:37 только если макрос выполняется настолько долго, что ждать его окончания автор не может
Такое может быть только при наличии циклов. Даже долгие математические задачи по решению дифур сводятся к циклам. Вот в теле цикла и надо проверять.
Опыт - это когда на смену вопросам: "Что? Где? Когда? Как? Почему?" приходит единственный вопрос: "Нахрена? "
Ответить

Вернуться в «WEINTEK (операторские панели)»