This is topic Запуск программы с кнопки in forum TRACE MODE 6 бесплатная Базовая версия / TRACE MODE 6 free Base version at Форум TRACE MODE: техническая поддержка.
Здравствуйте! Нужна ваша помощь. Есть проект (система смешивания твердых отходов), в нем кнопками задается исходное количество каждого из трех компонентов и три числа, которые суммируются и по отдельности вычитаются из исходных. Написана программа, в которой прописаны эти действия. На экране размещена кнопка на запуск, из неё «1» передаётся напрямую в условие программы, которое выполняется. Проблема вот в чём: программа выполняется один раз и после этого кнопка не срабатывает, а мне надо, чтобы числа, появившиеся после действий, дальше суммировались и вычитались каждый раз по нажатию кнопки до исчерпания одного из компонентов. Пробовал вызывать программу через атрибут 39 канала CALL типа Output, реакции не последовало. Заранее большое спасибо!
if Пуск==1 then Сумма=Компонент_A+Компонент_B+Компонент_C; Результат_компонент_A=Уровень_компонента_A-Компонент_A; Результат_компонент_B=Уровень_компонента_B-Компонент_B; Результат_компонент_C=Уровень_компонента_C-Компонент_C; Пуск=0; end_if;
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Если программа должна отрабатывать однократно по нажатию кнопки на экране, надо запускать программу по команде кнопки "ВЫПОЛНИТЬ" (см. свойства ГЭ "Кнопка").
При этом программа должна вызываться каналом CALL типа OUT.
END_PROGRAM
Posted by iamdmitry (Участник № / Member № 8063) on :
Не работает. Может, что-то не так сделал: в кнопке ГЭ теперь по нажатию стоит команда "Выполнить", выбрана программа для выполнения. В разделе "Каналы" создан класс CALL типа Out, тип вызова Program, привязка к реальному значению программы, все остальные параметры по умолчанию. В итоге программа запускается сразу при запуске в профайлере и отображает данные сразу после ввода, нажатие на кнопку запуска программы ничего не даёт.
Posted by iamdmitry (Участник № / Member № 8063) on :
Во флагах программы установил флажок "Тип Output", теперь программа запускается по нажатию кнопки, но только один раз, повторное нажатие опять ни к чему не приводит. Мне же требуется, чтобы на каждое нажатие производились действия из программы с обновляемыми данными (то есть сумма от нажатия к нажатию должна расти, количество компонента в каждом резервуаре уменьшаться и т.д.).
Posted by Nico (Участник № / Member № 5342) on :
Зачем Результат_компонент_X ??? Сумма & Пуск - VAR_INOUT if (Пуск) { summa = Уровень_компонента_X = Уровень_компонента_X - X; Пуск = 0; }
Posted by iamdmitry (Участник № / Member № 8063) on :
Тогда не отображается на экране результат вычитания, введенный с клавиатуры уровень (Уровень_компонента_X) остается неизменным. И по-прежнему остается проблема с однократным срабатыванием кнопки запуска программы.
Posted by Nico (Участник № / Member № 5342) on :
Результат_компонент_X ??? зачем он нужен. должен меняться уровень -> компонент же использован
Posted by Nico (Участник № / Member № 5342) on :
if Пуск==1 then Сумма=Компонент_A+Компонент_B+Компонент_C; Уровень_компонента_A=Уровень_компонента_A-Компонент_A; Уровень_компонента_B=Уровень_компонента_B-Компонент_B; Уровень_компонента_C=Уровень_компонента_C-Компонент_C; Пуск=0; end_if;
Posted by iamdmitry (Участник № / Member № 8063) on :
Моя ошибка, перепривязал аргументы программы к аргументам экрана и, действительно, уровень стал понижаться! Спасибо! Первоначально сумма не изменялась при повторном нажатии, только при изменении аргумента компонента. Решил добавлением аргумента суммы в выражение: Сумма=Сумма+Компонент_A+Компонент_B+Компонент_C; Вдруг кому поможет!