У вас FB это массив, а у ТС нет, он это никак не хочет понять...
У вас FB это массив, а у ТС нет, он это никак не хочет понять...
Да, так оно и есть.
ФБ с обработкой событий с таймером вызываю в цикле 20 раз в Основной программе, соответственно меняются только входящие переменные.
Объявление.png Программа.png Вызов.png
Bad programmers worry about the code. Good programmers worry about data structures and their relationships
среди успешных людей я не встречала нытиков
Барбара Коркоран
Всем спасибо за помощь, разобрался, все поправил, работает. Верная причина указана постом выше.
Еще такой вопрос, как правильно организовать программу, если события в разных ФБ должны влиять на одно физическое устройство?
Например, есть 1 лампа и 2 ФБ.
При событии в первом ФБ лампа горит, иначе не горит.
При событии во втором ФБ лампа моргает, иначе не моргает.
Программа с подобными задачами у меня выстроена так (например, ФБ, обрабатывающий событие теста всех ламп световой колонны, и ФБ, обрабатывающий события нажатия кнопок и работы ламп световой колонны):
В каждом ФБ создается своя выходная логическая переменная, которые привязываются к 2-м выходам на модуле DO. Далее физически 2 выхода подключаются через перемычку и на лампу.
Такой способ слишком много свободных DO съедает.
Знаю, что при присвоении значений в одну и ту же переменную в разных ФБ программы, ничего хорошего не выйдет. Но может есть еще варианты, чтобы в конечном итоге был задействован 1 выход модуля DO для лампы?
Пересмотрите подход, пока не поздно, сделайте один ФБ, и управляйте всем чем надо, не будет проблем и геморроя.
Два выхода на 1 лампу тоже не нужны, одного за глаза. Выше пример уже дал.
Blink для моргания, тоже можно встроить прямо в ФБ. Пример моргания лампы от Аварии 1 Управление лампой.jpg
Порядок не выставлял, это пример.
Последний раз редактировалось kondor3000; 22.01.2025 в 15:11.
События никогда не происходят вместе? - тогда их выходы через OR на DOПри событии в первом ФБ лампа горит, иначе не горит.
При событии во втором ФБ лампа моргает, иначе не моргает.
События происходят вместе но одно из них главнее? - тогда выход DO подключать через Селектор.
Понял, спасибо, перепишу код, чтобы все события были в одном условии и ссылались на один DO
Подскажите еще по системному времени. Программа считает простои сборочной линии: кнопка нажата таймер запустился, кнопка отжата таймер остановился и сохранилось значение таймера ЕТ.
Все работает отлично, все считает заносит данные в таблицу в панели, но делает это в миллисекундах, никак не пойму почему?
Простои.png
В выделенном фрагменте построчно:
Системное время TIME перевожу в DWORD
Перевожу миллисекунды в секунды разделив DWORD на 1000
Перевожу DWORD в WORD
Записываю значение в переменную- старое значение переменной + текущий WORD
Таблица.png
В таблице на HMI столбцы данных тип-WORD, всего знаков-4, формат-unsigned
У вас dword в word влазит? Интересно интересно...
PS А в чем проблема? Таймеры в миллисекундах и работают...
Последний раз редактировалось МихаилГл; 24.01.2025 в 12:53.