This is topic Запуск программы по условию in forum TRACE MODE 6 бесплатная Базовая версия / TRACE MODE 6 free Base version at Форум TRACE MODE: техническая поддержка.


To visit this topic, use this URL:
http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/31/t/001142.html

Posted by Darkden59 (Участник № / Member № 5991) on :
 
Есть программа которая передает в аргумент некоторое число по нажатию кнопки с экрана. Необходимо чтобы программа работала только тогда когда я нажимаю данную кнопку в остальное время программа не работала и в этот аргумент я мог записывать значения из других мест (не через программу, а с экрана другой кнопкой).
просто сейчас происходит следующее: программа постоянно пишет в аргумент какое то число и с другой кнопки в этот аргумент я не могу ничего записать.
На форуме сразу же нашел описание данной проблемы, сделал так, как написали, но, к сожалению, ничего не работает. Может ли быть это связано с тем, что я работаю в базовой версии 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 АдАстра. Техподдержка ]
 


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us



Powered by Infopop Corporation
UBB.classic™ 6.7.2