Darkden59
Junior Member / Новичок
Участник № / Member № 5991
отправлено / posted
Есть программа которая передает в аргумент некоторое число по нажатию кнопки с экрана. Необходимо чтобы программа работала только тогда когда я нажимаю данную кнопку в остальное время программа не работала и в этот аргумент я мог записывать значения из других мест (не через программу, а с экрана другой кнопкой). просто сейчас происходит следующее: программа постоянно пишет в аргумент какое то число и с другой кнопки в этот аргумент я не могу ничего записать. На форуме сразу же нашел описание данной проблемы, сделал так, как написали, но, к сожалению, ничего не работает. Может ли быть это связано с тем, что я работаю в базовой версии Trace Mode? Задача заключалась в следующем - со скада происходит управление установкой,а именно открытие/закрытие регулирующих клапанов, через которые подается в резервуар вода, я реализовал ПИД-регулятор, который выдает управляющие сигналы на контроллер, а затем на клапан. нужно чтобы программа работала только после нажатия на кнопку. Заранее спасибо!!
Сообщения / Posts 8 | Из / From: Russian Federation
| IP / IP: IP адрес / IP address |
отправлено / posted
Если кнопка-инициатор только запускает программу или одновременно передает в аргумент программы константу, достаточно сделать канал CALL вызова этой программы типа OUT и у кнопки-инициатора выбрать функцию управления ВЫПОЛНИТЬ для этой программы.
Если кнопка-инициатор одновременно с запуском этой программы должна передавать куда-либо число (используемое в этой программе) функцией ВВЕСТИ-И-ПЕРЕДАТЬ, придется серьезно потрудиться с разделением этих функций.
Сообщения / Posts 17317 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Darkden59
Junior Member / Новичок
Участник № / Member № 5991
отправлено / posted
В канале CALL помимо типа Output, нужно ли менять параметры: Тип вызова - Program и Параметр (0-255)? Просто я сделал как Вы посоветовали, но программа все равно не начинает работать по кнопке. Кнопка-инициатор должна только запускать, однако есть текст с событием ввести и передать, который передает значение в программу.
Сообщения / Posts 8 | Из / From: Russian Federation
| IP / IP: IP адрес / IP address |
отправлено / posted
CALL.Program_OUT с ПАРАМЕТР=0. Если не работает команда "Выполнить", пошлите от кнопки число "1" в атрибут EXEC (39) канала вызова программы. После выполнения программы этот атрибут автоматически сбросится в 0. Передача в ЭТУ программу какого-либо значения должна осуществляться до запуска программы.
Сообщения / Posts 17317 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Darkden59
Junior Member / Новичок
Участник № / Member № 5991
отправлено / posted
К сожалению безрезультатно. Может быть есть какой-нибудь простенький пример программы и запуск ее по кнопке, если да, то будьте добры, вышлите на адрес darkden59@yandex.ru Буду очень благодарен Вам.
Сообщения / Posts 8 | Из / From: Russian Federation
| IP / IP: IP адрес / IP address |
Darkden59
Junior Member / Новичок
Участник № / Member № 5991
отправлено / posted
Все получилось. Спасибо! Но есть еще один вопрос, программа отрабатывает один цикл, есть ли возможность сделать так, чтобы программа работала до тех пор пока я не нажму кнопку, чтобы остановить ее? То есть, я нажимаю на одну кнопку, она работает долгое время, затем я нажимаю другую и работа программы прекращается.
Сообщения / Posts 8 | Из / From: Russian Federation
| IP / IP: IP адрес / IP address |
отправлено / posted
Тогда программа должна вызываться каналом CALL типа Input и канал по умолчанию должен быть выключен (на вкладке "Дополнительно" редактора канала). Сброс атрибута СОСТОЯНИЕ (3) этого канала в 0 включит программу, взведение в 1 - остановит программу. Это можно выполнить либо двумя кнопками, либо одной - используя функцию управления XOR с "1".
Сообщения / Posts 17317 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Darkden59
Junior Member / Новичок
Участник № / Member № 5991
jenyak542
Active Forum Member / Активный участник форума
Участник № / Member № 9353
отправлено / posted
Добрый день. Хочу узнать, есть ли способы запуска программы не по нажатию кнопки, а как-то по другому, например, при запуске проекта в МРВ. Делаю я то, что ввожу значение аварийной границы канала float по нажатию кнопки (ввести и передать), также хочу, чтобы значение этой границы передавалось в контроллер, делаю это по нажатию этой же кнопки (прямая передача единицы в 39 атрибут канала с программой). В результате, значение в границу канала записывается, а значение в контроллере не изменяется. Пробовал наоборот, вводить и передавать значение в контроллер, а при помощи программы передавать это же значение в аварийную границу канала, в таком случае, значение в контроллер записывалось, но аварийная граница в канал не передавалась. Возможно, что дело в том, что через одну кнопку которая исполняет программу и одновременно записывает значение используемое этой программой, выполнить задачу не получится. Хотелось бы узнать, как решить проблему, увидеть какой-то пример. Либо остается вариант, что программа написана некорректно и поэтому ничего не работает
Сообщения / Posts 73 | Из / From: Россия
| IP / IP: IP адрес / IP address |
quote:Отправитель / Originally posted by jenyak542: Добрый день. Хочу узнать, есть ли способы запуска программы не по нажатию кнопки, а как-то по другому, например, при запуске проекта в МРВ. ...
Добрый день. Да, можно. Если канал Call.Program типа OUTPUT, то он отрабатывает при подаче значения 1 в свой 39 атрибут (EXEC). Подать команду можно как вручную, так и с помощью другой (постоянно работающей) программы (по заданному условию).
Сообщения / Posts 17317 | Из / From: Россия
| IP / IP: IP адрес / IP address |
quote:Отправитель / Originally posted by jenyak542: ... Делаю я то, что ввожу значение аварийной границы канала float по нажатию кнопки (ввести и передать), также хочу, чтобы значение этой границы передавалось в контроллер ...
Не совсем ясно зачем для решения тривиальной задачи использовать программу? Все делается просто. На экране есть ГЭ Кнопка с "ввести и передать". Передаете в один аргумент экрана. Этот аргумент экрана привязываете к аргументу типа IN канала Call.Move с параметром=0. У канала Call.Move первый аргумент типа IN, два последующих OUT (привязаны к каналам, в которые необходимо передать границу).
Все. Вводите значение один раз в экран. Экран передает значение в Call.Move. Канал Call.Move передает его согласно привязкам.
При необходимости передавать таким образом несколько границ, создаете аргументы в канале Call.Move группами (см. описание call.move)