- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
Ошибка Weintek снхронность/асинхронность
Модератор: специалисты Weintek
-
- здесь недавно
- Сообщения: 87
- Зарегистрирован: 19 май 2014, 08:48
- Имя: Егор Дмитриевич Ченчуков
- Страна: Россия
Ошибка Weintek снхронность/асинхронность
При вызове макроса внутри битовой кнопки вполне резонно ожидать, что порядок действий будет таким:
1. Установлен (сброшен, переключен ...) бит
2. Выполнен макрос
Однако исполнение макроса и установка бита идут одновременно "на-перегонки" как две параллельные задачи.
При использовании симулятора с "медленным CPU" проблема может не проявляться - у CPU не хватает скорости, чтобы выполнить макрос раньше присвоения бита.
То же самое относится к панели c "ненулевой" загрузкой CPU (чем выше производительность панели, тем больше проявляется проблема).
Для временного лечения проблемы можно использовать например 2 способа:
1) Нагружение CPU фоновыми задачами (гистограммами, графиками, сбором данных, триггерами, макросами , передачей данных и др.).
Этот путь плохой, тк
- глобальные объекты типа триггеров и сбора данных загружают все используемые окна и тормозять работу
- локальные объекты типа гистограмм относятся только к активному окну
2) Задержку начала выполнения макроса добавкой delay() в его начало. Тоже не всегда приемлемо и удобно.
Проект для оценки проблемы выкладываю, см файл
PS: Хотелось бы от Weintek установки асинхронного прорядка выполнения указанных выше процедур: сначала присвоение бита, и только по завершении исполнение макроса.
PPS: В примере описан случай с локальным битом, а с сетевым в случае ошибок или таймаутов будет сложнее.
1. Установлен (сброшен, переключен ...) бит
2. Выполнен макрос
Однако исполнение макроса и установка бита идут одновременно "на-перегонки" как две параллельные задачи.
При использовании симулятора с "медленным CPU" проблема может не проявляться - у CPU не хватает скорости, чтобы выполнить макрос раньше присвоения бита.
То же самое относится к панели c "ненулевой" загрузкой CPU (чем выше производительность панели, тем больше проявляется проблема).
Для временного лечения проблемы можно использовать например 2 способа:
1) Нагружение CPU фоновыми задачами (гистограммами, графиками, сбором данных, триггерами, макросами , передачей данных и др.).
Этот путь плохой, тк
- глобальные объекты типа триггеров и сбора данных загружают все используемые окна и тормозять работу
- локальные объекты типа гистограмм относятся только к активному окну
2) Задержку начала выполнения макроса добавкой delay() в его начало. Тоже не всегда приемлемо и удобно.
Проект для оценки проблемы выкладываю, см файл
PS: Хотелось бы от Weintek установки асинхронного прорядка выполнения указанных выше процедур: сначала присвоение бита, и только по завершении исполнение макроса.
PPS: В примере описан случай с локальным битом, а с сетевым в случае ошибок или таймаутов будет сложнее.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- здесь недавно
- Сообщения: 87
- Зарегистрирован: 19 май 2014, 08:48
- Имя: Егор Дмитриевич Ченчуков
- Страна: Россия
Re: Ошибка Weintek снхронность/асинхронность
Если у кого есть соображения как корректно обойти ошибку *) без использования задержки delay() макроса , прошу посоветовать
*) макрос по битовой кнопке исполняется раньше установки бита и это еще зависит от загрузки CPU
Был совет с форума использовать условие выполнения макроса , а вернее запрета на выполнение, но оно увы проблеме не поможет (см рис)
*) макрос по битовой кнопке исполняется раньше установки бита и это еще зависит от загрузки CPU
Был совет с форума использовать условие выполнения макроса , а вернее запрета на выполнение, но оно увы проблеме не поможет (см рис)
PS: Так можно добавить вложения в сообщение, например отредактированный проект. ZIPСмысл в том, что макрос по идее должен исполняться только ПОСЛЕ того как будет установлен нужный бит в ON.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- здесь недавно
- Сообщения: 87
- Зарегистрирован: 19 май 2014, 08:48
- Имя: Егор Дмитриевич Ченчуков
- Страна: Россия
Re: Ошибка Weintek снхронность/асинхронность
Исследовал проблему дополнительно, бит может установиться даже в середине исполненния макроса,
когда часть веток с условием по нему уже отработана и это очень печально.
Прошу дистрибюьоров сообщить в Weintek и будем ждать исправления.
когда часть веток с условием по нему уже отработана и это очень печально.
Прошу дистрибюьоров сообщить в Weintek и будем ждать исправления.
-
- здесь недавно
- Сообщения: 87
- Зарегистрирован: 19 май 2014, 08:48
- Имя: Егор Дмитриевич Ченчуков
- Страна: Россия
Re: Ошибка Weintek снхронность/асинхронность
Вопрос к уважаемым дилерам и дистрибюторам продукции Weintek:
Cможете ли сообщить в Weintek об этой ошибке, достаточно ли информации предоставленной в демо-примере asutpforum.ru/download/file.php?id=2933 в первом сообщении темы ?
Cможете ли сообщить в Weintek об этой ошибке, достаточно ли информации предоставленной в демо-примере asutpforum.ru/download/file.php?id=2933 в первом сообщении темы ?
-
- специалист по WEINTEK
- Сообщения: 208
- Зарегистрирован: 22 мар 2013, 11:52
- Имя: Денис Порфирьев
- город/регион: Санкт-Петербург
- Поблагодарили: 6 раз
Re: Ошибка Weintek снхронность/асинхронность
В документации не указано, в какой последовательности должны устанавливаться бит и вызываться макрос. И наверняка эти действия выполняются "одновременно" в той степени, в какой это возможно в многозадачных операционных системах.
Установка одного и того же регистра в разные значения в данном случае - явное противоречие.
Перепроверьте вариант с запуском макроса по триггеру, возможно, вы что-то пропустили.
Установка одного и того же регистра в разные значения в данном случае - явное противоречие.
Перепроверьте вариант с запуском макроса по триггеру, возможно, вы что-то пропустили.
-
- здесь недавно
- Сообщения: 87
- Зарегистрирован: 19 май 2014, 08:48
- Имя: Егор Дмитриевич Ченчуков
- Страна: Россия
Re: Ошибка Weintek снхронность/асинхронность
Не указано, но "ложка дорога к обеду". И как я писал в первом посте темы - логично ожидать, что вызывая битовой кнопкой макрос и устанавливая бит, макрос получит этот установленный бит.skr писал(а):В документации не указано, в какой последовательности должны устанавливаться бит и вызываться макрос. И наверняка эти действия выполняются "одновременно" в той степени, в какой это возможно в многозадачных операционных системах.
Установка одного и того же регистра в разные значения в данном случае - явное противоречие.
Перепроверьте вариант с запуском макроса по триггеру, возможно, вы что-то пропустили.
У weintek с синхронностью-асинхронностью вызова макроса неопределенность, зависящая в том числе от загруженности процессора панели.
Запуск макроса по триггеру не требуется, тк это обработка действия оператора, а не программы панели.
Установка одного и того же регистра в разные значения в данном случае - явное противоречие.
это не имеет отношения к текущему случаю ?
-
- специалист по WEINTEK
- Сообщения: 208
- Зарегистрирован: 22 мар 2013, 11:52
- Имя: Денис Порфирьев
- город/регион: Санкт-Петербург
- Поблагодарили: 6 раз
Re: Ошибка Weintek снхронность/асинхронность
Настолько же, насколько логично, что значение будет установлено после выполнения всех действий.Chenchukov писал(а):Не указано, но "ложка дорога к обеду". И как я писал в первом посте темы - логично ожидать, что вызывая битовой кнопкой макрос и устанавливая бит, макрос получит этот установленный бит.skr писал(а):В документации не указано, в какой последовательности должны устанавливаться бит и вызываться макрос. И наверняка эти действия выполняются "одновременно" в той степени, в какой это возможно в многозадачных операционных системах.
Установка одного и того же регистра в разные значения в данном случае - явное противоречие.
Перепроверьте вариант с запуском макроса по триггеру, возможно, вы что-то пропустили.
Кнопка устанавливает бит, срабатывает триггер и вызывает макрос. Действия оператора обработаны, что не так?Chenchukov писал(а):У weintek с синхронностью-асинхронностью вызова макроса неопределенность, зависящая в том числе от загруженности процессора панели.
Запуск макроса по триггеру не требуется, тк это обработка действия оператора, а не программы панели.
-
- здесь недавно
- Сообщения: 87
- Зарегистрирован: 19 май 2014, 08:48
- Имя: Егор Дмитриевич Ченчуков
- Страна: Россия
Re: Ошибка Weintek снхронность/асинхронность
skr писал(а): 1. Настолько же, насколько логично, что значение будет установлено после выполнения всех действий.
2. Кнопка устанавливает бит, срабатывает триггер и вызывает макрос. Действия оператора обработаны, что не так?
1. Неудобно это. Бит может быть установлен до исполнения макроса, во время исполнения макроса или после в зависимости от загруженности процессора и многозадачной операционной системы.
2. Хотел сдалать через кнопка-триггер и макрос по этому триггеру, но неоднократно сталкивался с тем, что при определенной загрузке процессора панель иногда пропускает триггерные макросы. Постараюсь выложить пример не позже вторника
-
- эксперт
- Сообщения: 1112
- Зарегистрирован: 09 фев 2011, 11:32
- Имя: Дитрих Евгений Линусович
- город/регион: Донецк
- Благодарил (а): 323 раза
- Поблагодарили: 218 раз
Re: Ошибка Weintek снхронность/асинхронность
Поделись подробными желаниями, что нужно получить, например:Chenchukov писал(а):При вызове макроса внутри битовой кнопки вполне резонно ожидать, что порядок действий будет таким:
1. Установлен (сброшен, переключен ...) бит
2. Выполнен макрос
1. Оператор нажал кнопку.
2. В контроллер пошел бит...
3. Ждем: из контроллера - бит установлен.
4. Выполняем макрос.
5. Макрос выполнен.
6. Сбрасываем бит в контроллере.
7. Ждем: из контроллера - бит сброшен.
...
Может что нибудь подскажу.
Weintek не знаю, но могу сказать что у Rockwell (что панели, что SCADA) стоит ожидать:
1. Установили бит - бит установлен в памяти панели (SCADA) и ждет очереди на передачу в контроллер.
2. Проверяем этот же бит - состояние будет не то куда мы его установили, а то которое было прочитано из контроллера в последний раз.
_______________________________________________
Узкая специализация в широком смысле этого слова ведет к широкой идиотизации в узком смысле этого слова . (С) Бернард Шоу
Узкая специализация в широком смысле этого слова ведет к широкой идиотизации в узком смысле этого слова . (С) Бернард Шоу
-
- здесь недавно
- Сообщения: 87
- Зарегистрирован: 19 май 2014, 08:48
- Имя: Егор Дмитриевич Ченчуков
- Страна: Россия
Re: Ошибка Weintek снхронность/асинхронность
операции осуществляются с локальными адресам в панелиLooker писал(а): Поделись подробными желаниями, что нужно получить, например:
1. Оператор нажал кнопку.
2. В контроллер пошел бит...
3. Ждем: из контроллера - бит установлен.
4. Выполняем макрос.
5. Макрос выполнен.
6. Сбрасываем бит в контроллере.
7. Ждем: из контроллера - бит сброшен.
...
Может что нибудь подскажу.
Weintek не знаю, но могу сказать что у Rockwell (что панели, что SCADA) стоит ожидать:
1. Установили бит - бит установлен в памяти панели (SCADA) и ждет очереди на передачу в контроллер.
2. Проверяем этот же бит - состояние будет не то куда мы его установили, а то которое было прочитано из контроллера в последний раз.
1. Оператор нажал кнопку
2А. Установить бит (или слово)
2Б. Вызвать макрос, который анализирует установленные биты (слова)
проблема в том, что 2А и 2Б запускаются параллельно в многозадачном режиме, а не 2Б по завершении 2А.
как уже писал, при околнулевой загрузке процессора макрос иполняется до изменения бита ...
-
- эксперт
- Сообщения: 1112
- Зарегистрирован: 09 фев 2011, 11:32
- Имя: Дитрих Евгений Линусович
- город/регион: Донецк
- Благодарил (а): 323 раза
- Поблагодарили: 218 раз
Re: Ошибка Weintek снхронность/асинхронность
Неужели в макросе (2Б) первым действием нельзя установить бит (2А)?Chenchukov писал(а):операции осуществляются с локальными адресам в панели
1. Оператор нажал кнопку
2А. Установить бит (или слово)
2Б. Вызвать макрос, который анализирует установленные биты (слова)
проблема в том, что 2А и 2Б запускаются параллельно в многозадачном режиме, а не 2Б по завершении 2А.
как уже писал, при околнулевой загрузке процессора макрос иполняется до изменения бита ...
Ценность установки этого бита? Он на что-то влияет?
"1. Оператор нажал кнопку." Есть ли действия по отпусканию?
Подумай - кнопка как конечный автомат с четырьмя состояниями:
1. Нажатие.
2. Удержание.
3. Отпускание.
4. Исходное состояние.
_______________________________________________
Узкая специализация в широком смысле этого слова ведет к широкой идиотизации в узком смысле этого слова . (С) Бернард Шоу
Узкая специализация в широком смысле этого слова ведет к широкой идиотизации в узком смысле этого слова . (С) Бернард Шоу
-
- здесь недавно
- Сообщения: 87
- Зарегистрирован: 19 май 2014, 08:48
- Имя: Егор Дмитриевич Ченчуков
- Страна: Россия
Re: Ошибка Weintek снхронность/асинхронность
в макросе как обычно можно установить, но это не нужноLooker писал(а): Неужели в макросе (2Б) первым действием нельзя установить бит (2А)?
Ценность установки этого бита? Он на что-то влияет?
обсуждали битовую кнопку, которая
1. установливает нужный бит
2. вызывает макрос, который определяет какой из битов был установлен
PS: вы читаете личные сообщения?
-
- специалист по WEINTEK
- Сообщения: 208
- Зарегистрирован: 22 мар 2013, 11:52
- Имя: Денис Порфирьев
- город/регион: Санкт-Петербург
- Поблагодарили: 6 раз
Re: Ошибка Weintek снхронность/асинхронность
Попробуйте режим триггера "всегда активно если ON"Chenchukov писал(а):skr писал(а): 1. Настолько же, насколько логично, что значение будет установлено после выполнения всех действий.
2. Кнопка устанавливает бит, срабатывает триггер и вызывает макрос. Действия оператора обработаны, что не так?
1. Неудобно это. Бит может быть установлен до исполнения макроса, во время исполнения макроса или после в зависимости от загруженности процессора и многозадачной операционной системы.
2. Хотел сдалать через кнопка-триггер и макрос по этому триггеру, но неоднократно сталкивался с тем, что при определенной загрузке процессора панель иногда пропускает триггерные макросы. Постараюсь выложить пример не позже вторника
-
- здесь недавно
- Сообщения: 87
- Зарегистрирован: 19 май 2014, 08:48
- Имя: Егор Дмитриевич Ченчуков
- Страна: Россия
Re: Ошибка Weintek снхронность/асинхронность
В таком режиме теряется изначальный смысл - обработка нажатия клавиши оператором.skr писал(а):Chenchukov писал(а):Попробуйте режим триггера "всегда активно если ON"
-
- специалист по WEINTEK
- Сообщения: 208
- Зарегистрирован: 22 мар 2013, 11:52
- Имя: Денис Порфирьев
- город/регион: Санкт-Петербург
- Поблагодарили: 6 раз
Re: Ошибка Weintek снхронность/асинхронность
Нет, не теряется. Бит-то устанавливается оператором, а сбрасывается макросом.
-
- здесь недавно
- Сообщения: 87
- Зарегистрирован: 19 май 2014, 08:48
- Имя: Егор Дмитриевич Ченчуков
- Страна: Россия
Re: Ошибка Weintek снхронность/асинхронность
возможно я недопонял Васskr писал(а):Нет, не теряется. Бит-то устанавливается оператором, а сбрасывается макросом.
я обсуждал: (установить бит нажатием кнопки) - > (отработает триггер по переднему фронту)-> (триггер однократно вызовет макрос)-> (макрос однократно отработает процедуру и сбросит бит)
Ваше предложение: изменить режим вызова макроса на "выполнять всегда, пока бит включен".
Это гарантирует выполнение, но увы нельзя исключить повторный вход в макрос и это может выглядеть как дребезг кнопки (многократное отрабатывание одного нажатия)
-
- специалист по WEINTEK
- Сообщения: 208
- Зарегистрирован: 22 мар 2013, 11:52
- Имя: Денис Порфирьев
- город/регион: Санкт-Петербург
- Поблагодарили: 6 раз
Re: Ошибка Weintek снхронность/асинхронность
Не могу представить, как триггер "всегда активно если ON" сработает повторно без повторной установки бита (при условии сброса бита в макросе)
-
- здесь недавно
- Сообщения: 87
- Зарегистрирован: 19 май 2014, 08:48
- Имя: Егор Дмитриевич Ченчуков
- Страна: Россия
Re: Ошибка Weintek снхронность/асинхронность
Даже если сбрасывать в первой строчке макроса, пока дойдет время до сброса (ОС многопользовательская, приоритеты выполнения процессов возможно меняются динамически, панель может быть занята другими макросами, вводом-выводом экрана, сетевым обменом, записью на внешний носитель и др) может еще раз войти в макрос.skr писал(а):Не могу представить, как триггер "всегда активно если ON" сработает повторно без повторной установки бита (при условии сброса бита в макросе)
Я моделировал такую ситуацию на симуляторе и двух моделях панелей.
см л/c
-
- здесь недавно
- Сообщения: 87
- Зарегистрирован: 19 май 2014, 08:48
- Имя: Егор Дмитриевич Ченчуков
- Страна: Россия
-
- специалист по WEINTEK
- Сообщения: 208
- Зарегистрирован: 22 мар 2013, 11:52
- Имя: Денис Порфирьев
- город/регион: Санкт-Петербург
- Поблагодарили: 6 раз
Re: Ошибка Weintek снхронность/асинхронность
Мне так экстремально нагружать панель(симулятор) не приходилось, так что хочется больше примеров.
-
- здесь недавно
- Сообщения: 87
- Зарегистрирован: 19 май 2014, 08:48
- Имя: Егор Дмитриевич Ченчуков
- Страна: Россия
Re: Ошибка Weintek снхронность/асинхронность
Немного разгребу текущие дела и напишу примеры повторного входа.skr писал(а):Мне так экстремально нагружать панель(симулятор) не приходилось, так что хочется больше примеров.