У вас FB это массив, а у ТС нет, он это никак не хочет понять...
Вид для печати
У вас FB это массив, а у ТС нет, он это никак не хочет понять...
Да, так оно и есть.
ФБ с обработкой событий с таймером вызываю в цикле 20 раз в Основной программе, соответственно меняются только входящие переменные.
Вложение 81484 Вложение 81485 Вложение 81486
Всем спасибо за помощь, разобрался, все поправил, работает. Верная причина указана постом выше.
Еще такой вопрос, как правильно организовать программу, если события в разных ФБ должны влиять на одно физическое устройство?
Например, есть 1 лампа и 2 ФБ.
При событии в первом ФБ лампа горит, иначе не горит.
При событии во втором ФБ лампа моргает, иначе не моргает.
Программа с подобными задачами у меня выстроена так (например, ФБ, обрабатывающий событие теста всех ламп световой колонны, и ФБ, обрабатывающий события нажатия кнопок и работы ламп световой колонны):
В каждом ФБ создается своя выходная логическая переменная, которые привязываются к 2-м выходам на модуле DO. Далее физически 2 выхода подключаются через перемычку и на лампу.
Такой способ слишком много свободных DO съедает.
Знаю, что при присвоении значений в одну и ту же переменную в разных ФБ программы, ничего хорошего не выйдет. Но может есть еще варианты, чтобы в конечном итоге был задействован 1 выход модуля DO для лампы?
Пересмотрите подход, пока не поздно, сделайте один ФБ, и управляйте всем чем надо, не будет проблем и геморроя.
Два выхода на 1 лампу тоже не нужны, одного за глаза. Выше пример уже дал.
Blink для моргания, тоже можно встроить прямо в ФБ. Пример моргания лампы от Аварии Вложение 81499
Порядок не выставлял, это пример.
События никогда не происходят вместе? - тогда их выходы через OR на DOЦитата:
При событии в первом ФБ лампа горит, иначе не горит.
При событии во втором ФБ лампа моргает, иначе не моргает.
События происходят вместе но одно из них главнее? - тогда выход DO подключать через Селектор.
Понял, спасибо, перепишу код, чтобы все события были в одном условии и ссылались на один DO
Подскажите еще по системному времени. Программа считает простои сборочной линии: кнопка нажата таймер запустился, кнопка отжата таймер остановился и сохранилось значение таймера ЕТ.
Все работает отлично, все считает заносит данные в таблицу в панели, но делает это в миллисекундах, никак не пойму почему?
Вложение 81541
В выделенном фрагменте построчно:
Системное время TIME перевожу в DWORD
Перевожу миллисекунды в секунды разделив DWORD на 1000
Перевожу DWORD в WORD
Записываю значение в переменную- старое значение переменной + текущий WORD
Вложение 81542
В таблице на HMI столбцы данных тип-WORD, всего знаков-4, формат-unsigned
У вас dword в word влазит? Интересно интересно...
PS А в чем проблема? Таймеры в миллисекундах и работают...