This is topic Запуск программы по условию in forum TRACE MODE 6 бесплатная Базовая версия / TRACE MODE 6 free Base version at Форум TRACE MODE: техническая поддержка.
Есть программа которая передает в аргумент некоторое число по нажатию кнопки с экрана. Необходимо чтобы программа работала только тогда когда я нажимаю данную кнопку в остальное время программа не работала и в этот аргумент я мог записывать значения из других мест (не через программу, а с экрана другой кнопкой). просто сейчас происходит следующее: программа постоянно пишет в аргумент какое то число и с другой кнопки в этот аргумент я не могу ничего записать. На форуме сразу же нашел описание данной проблемы, сделал так, как написали, но, к сожалению, ничего не работает. Может ли быть это связано с тем, что я работаю в базовой версии Trace Mode? Задача заключалась в следующем - со скада происходит управление установкой,а именно открытие/закрытие регулирующих клапанов, через которые подается в резервуар вода, я реализовал ПИД-регулятор, который выдает управляющие сигналы на контроллер, а затем на клапан. нужно чтобы программа работала только после нажатия на кнопку. Заранее спасибо!!
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Если кнопка-инициатор только запускает программу или одновременно передает в аргумент программы константу, достаточно сделать канал CALL вызова этой программы типа OUT и у кнопки-инициатора выбрать функцию управления ВЫПОЛНИТЬ для этой программы.
Если кнопка-инициатор одновременно с запуском этой программы должна передавать куда-либо число (используемое в этой программе) функцией ВВЕСТИ-И-ПЕРЕДАТЬ, придется серьезно потрудиться с разделением этих функций.
Posted by Darkden59 (Участник № / Member № 5991) on :
В канале CALL помимо типа Output, нужно ли менять параметры: Тип вызова - Program и Параметр (0-255)? Просто я сделал как Вы посоветовали, но программа все равно не начинает работать по кнопке. Кнопка-инициатор должна только запускать, однако есть текст с событием ввести и передать, который передает значение в программу.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
CALL.Program_OUT с ПАРАМЕТР=0. Если не работает команда "Выполнить", пошлите от кнопки число "1" в атрибут EXEC (39) канала вызова программы. После выполнения программы этот атрибут автоматически сбросится в 0. Передача в ЭТУ программу какого-либо значения должна осуществляться до запуска программы.
Posted by Darkden59 (Участник № / Member № 5991) on :
К сожалению безрезультатно. Может быть есть какой-нибудь простенький пример программы и запуск ее по кнопке, если да, то будьте добры, вышлите на адрес darkden59@yandex.ru Буду очень благодарен Вам.
Posted by Darkden59 (Участник № / Member № 5991) on :
Все получилось. Спасибо! Но есть еще один вопрос, программа отрабатывает один цикл, есть ли возможность сделать так, чтобы программа работала до тех пор пока я не нажму кнопку, чтобы остановить ее? То есть, я нажимаю на одну кнопку, она работает долгое время, затем я нажимаю другую и работа программы прекращается.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Тогда программа должна вызываться каналом CALL типа Input и канал по умолчанию должен быть выключен (на вкладке "Дополнительно" редактора канала). Сброс атрибута СОСТОЯНИЕ (3) этого канала в 0 включит программу, взведение в 1 - остановит программу. Это можно выполнить либо двумя кнопками, либо одной - используя функцию управления XOR с "1".
Posted by Darkden59 (Участник № / Member № 5991) on :
Получилось, все работает. Большое Вам спасибо!
Posted by jenyak542 (Участник № / Member № 9353) on :
Добрый день. Хочу узнать, есть ли способы запуска программы не по нажатию кнопки, а как-то по другому, например, при запуске проекта в МРВ. Делаю я то, что ввожу значение аварийной границы канала float по нажатию кнопки (ввести и передать), также хочу, чтобы значение этой границы передавалось в контроллер, делаю это по нажатию этой же кнопки (прямая передача единицы в 39 атрибут канала с программой). В результате, значение в границу канала записывается, а значение в контроллере не изменяется. Пробовал наоборот, вводить и передавать значение в контроллер, а при помощи программы передавать это же значение в аварийную границу канала, в таком случае, значение в контроллер записывалось, но аварийная граница в канал не передавалась. Возможно, что дело в том, что через одну кнопку которая исполняет программу и одновременно записывает значение используемое этой программой, выполнить задачу не получится. Хотелось бы узнать, как решить проблему, увидеть какой-то пример. Либо остается вариант, что программа написана некорректно и поэтому ничего не работает
Posted by АдАстра. Техподдержка (Участник № / Member № 4) on :
quote:Отправитель / Originally posted by jenyak542: Добрый день. Хочу узнать, есть ли способы запуска программы не по нажатию кнопки, а как-то по другому, например, при запуске проекта в МРВ. ...
Добрый день. Да, можно. Если канал Call.Program типа OUTPUT, то он отрабатывает при подаче значения 1 в свой 39 атрибут (EXEC). Подать команду можно как вручную, так и с помощью другой (постоянно работающей) программы (по заданному условию).
Posted by АдАстра. Техподдержка (Участник № / Member № 4) on :
quote:Отправитель / Originally posted by jenyak542: ... Делаю я то, что ввожу значение аварийной границы канала float по нажатию кнопки (ввести и передать), также хочу, чтобы значение этой границы передавалось в контроллер ...
Не совсем ясно зачем для решения тривиальной задачи использовать программу? Все делается просто. На экране есть ГЭ Кнопка с "ввести и передать". Передаете в один аргумент экрана. Этот аргумент экрана привязываете к аргументу типа IN канала Call.Move с параметром=0. У канала Call.Move первый аргумент типа IN, два последующих OUT (привязаны к каналам, в которые необходимо передать границу).
Все. Вводите значение один раз в экран. Экран передает значение в Call.Move. Канал Call.Move передает его согласно привязкам.
При необходимости передавать таким образом несколько границ, создаете аргументы в канале Call.Move группами (см. описание call.move)
[ 21.03.2023, 16:36: Сообщение отредактировал / Message edited by АдАстра. Техподдержка ]