Форум TRACE MODE: техническая поддержка Послать новую тему / Post New Topic  Послать ответ / Post A Reply
мой профиль / my profile авторизация / login | регистрация / register | поиск / search | часто задаваемые вопросы / faq | начало / forum home

  Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
» Форум TRACE MODE: техническая поддержка » ТЕХНИЧЕСКАЯ ПОДДЕРЖКА / TECHNICAL SUPPORT TRACE MODE 6 » TRACE MODE 6 бесплатная Базовая версия / TRACE MODE 6 free Base version » Запуск программы с кнопки

   
Автор / Author Тема / Topic: Запуск программы с кнопки
iamdmitry
Junior Member / Новичок
Участник № / Member № 8063


Icon 1 отправлено / posted      Профиль для / Profile for iamdmitry           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Здравствуйте! Нужна ваша помощь.
Есть проект (система смешивания твердых отходов), в нем кнопками задается исходное количество каждого из трех компонентов и три числа, которые суммируются и по отдельности вычитаются из исходных. Написана программа, в которой прописаны эти действия. На экране размещена кнопка на запуск, из неё «1» передаётся напрямую в условие программы, которое выполняется. Проблема вот в чём: программа выполняется один раз и после этого кнопка не срабатывает, а мне надо, чтобы числа, появившиеся после действий, дальше суммировались и вычитались каждый раз по нажатию кнопки до исчерпания одного из компонентов.
Пробовал вызывать программу через атрибут 39 канала CALL типа Output, реакции не последовало.
Заранее большое спасибо!

Листинг программы
PROGRAM
VAR_INPUT Компонент_A : REAL; END_VAR
VAR_INPUT Компонент_B : REAL; END_VAR
VAR_INPUT Компонент_C : REAL; END_VAR
VAR_OUTPUT Сумма : REAL; END_VAR
VAR_OUTPUT Пуск : REAL; END_VAR
VAR_INOUT Уровень_компонента_A : REAL; END_VAR
VAR_OUTPUT Результат_компонент_A : REAL; END_VAR
VAR_INOUT Уровень_компонента_B : REAL; END_VAR
VAR_OUTPUT Результат_компонент_B : REAL; END_VAR
VAR_INOUT Уровень_компонента_C : REAL; END_VAR
VAR_OUTPUT Результат_компонент_C : REAL; END_VAR

if Пуск==1 then
Сумма=Компонент_A+Компонент_B+Компонент_C;
Результат_компонент_A=Уровень_компонента_A-Компонент_A;
Результат_компонент_B=Уровень_компонента_B-Компонент_B;
Результат_компонент_C=Уровень_компонента_C-Компонент_C;
Пуск=0;
end_if;

Сообщения / Posts 5 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Если программа должна отрабатывать однократно по нажатию кнопки на экране, надо запускать программу по команде кнопки "ВЫПОЛНИТЬ" (см. свойства ГЭ "Кнопка").

При этом программа должна вызываться каналом CALL типа OUT.

Текст программы должен выглядеть примерно так:

PROGRAM
VAR_INPUT Компонент_A : REAL; END_VAR
VAR_INPUT Компонент_B : REAL; END_VAR
VAR_INPUT Компонент_C : REAL; END_VAR
VAR_OUTPUT Сумма : REAL; END_VAR
VAR_INOUT Уровень_компонента_A : REAL; END_VAR
VAR_OUTPUT Результат_компонент_A : REAL; END_VAR
VAR_INOUT Уровень_компонента_B : REAL; END_VAR
VAR_OUTPUT Результат_компонент_B : REAL; END_VAR
VAR_INOUT Уровень_компонента_C : REAL; END_VAR
VAR_OUTPUT Результат_компонент_C : REAL; END_VAR


Сумма=Компонент_A+Компонент_B+Компонент_C;
Результат_компонент_A=Уровень_компонента_A-Компонент_A;
Результат_компонент_B=Уровень_компонента_B-Компонент_B;
Результат_компонент_C=Уровень_компонента_C-Компонент_C;

END_PROGRAM

Сообщения / Posts 17109 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
iamdmitry
Junior Member / Новичок
Участник № / Member № 8063


Icon 1 отправлено / posted      Профиль для / Profile for iamdmitry           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Не работает. Может, что-то не так сделал: в кнопке ГЭ теперь по нажатию стоит команда "Выполнить", выбрана программа для выполнения. В разделе "Каналы" создан класс CALL типа Out, тип вызова Program, привязка к реальному значению программы, все остальные параметры по умолчанию.
В итоге программа запускается сразу при запуске в профайлере и отображает данные сразу после ввода, нажатие на кнопку запуска программы ничего не даёт.

Сообщения / Posts 5 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
iamdmitry
Junior Member / Новичок
Участник № / Member № 8063


Icon 1 отправлено / posted      Профиль для / Profile for iamdmitry           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Во флагах программы установил флажок "Тип Output", теперь программа запускается по нажатию кнопки, но только один раз, повторное нажатие опять ни к чему не приводит. Мне же требуется, чтобы на каждое нажатие производились действия из программы с обновляемыми данными (то есть сумма от нажатия к нажатию должна расти, количество компонента в каждом резервуаре уменьшаться и т.д.).
Сообщения / Posts 5 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Nico
Forum Professor / Завсегдатай форума
Участник № / Member № 5342


Icon 1 отправлено / posted      Профиль для / Profile for Nico           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Зачем Результат_компонент_X ???
Сумма & Пуск - VAR_INOUT
if (Пуск)
{
summa =
Уровень_компонента_X = Уровень_компонента_X - X;
Пуск = 0;
}

Сообщения / Posts 806 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
iamdmitry
Junior Member / Новичок
Участник № / Member № 8063


Icon 1 отправлено / posted      Профиль для / Profile for iamdmitry           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Тогда не отображается на экране результат вычитания, введенный с клавиатуры уровень (Уровень_компонента_X) остается неизменным. И по-прежнему остается проблема с однократным срабатыванием кнопки запуска программы.
Сообщения / Posts 5 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Nico
Forum Professor / Завсегдатай форума
Участник № / Member № 5342


Icon 1 отправлено / posted      Профиль для / Profile for Nico           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Результат_компонент_X ??? зачем он нужен.
должен меняться уровень -> компонент же использован

Сообщения / Posts 806 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Nico
Forum Professor / Завсегдатай форума
Участник № / Member № 5342


Icon 1 отправлено / posted      Профиль для / Profile for Nico           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
PROGRAM
VAR_INPUT Компонент_A : REAL; END_VAR
VAR_INPUT Компонент_B : REAL; END_VAR
VAR_INPUT Компонент_C : REAL; END_VAR
VAR_INOUT : REAL; END_VAR
VAR_INOUT Пуск : REAL; END_VAR
VAR_INOUT Уровень_компонента_A : REAL; END_VAR
VAR_INOUT Уровень_компонента_B : REAL; END_VAR
VAR_INOUT Уровень_компонента_C : REAL; END_VAR

if Пуск==1 then
Сумма=Компонент_A+Компонент_B+Компонент_C;
Уровень_компонента_A=Уровень_компонента_A-Компонент_A;
Уровень_компонента_B=Уровень_компонента_B-Компонент_B;
Уровень_компонента_C=Уровень_компонента_C-Компонент_C;
Пуск=0;
end_if;

Сообщения / Posts 806 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
iamdmitry
Junior Member / Новичок
Участник № / Member № 8063


Icon 1 отправлено / posted      Профиль для / Profile for iamdmitry           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Моя ошибка, перепривязал аргументы программы к аргументам экрана и, действительно, уровень стал понижаться! Спасибо!
Первоначально сумма не изменялась при повторном нажатии, только при изменении аргумента компонента. Решил добавлением аргумента суммы в выражение:
Сумма=Сумма+Компонент_A+Компонент_B+Компонент_C;
Вдруг кому поможет!

Сообщения / Posts 5 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
   

Quick Reply
Сообщение / Message:

HTML код не разрешен. / HTML is not enabled.
UBB код разрешен. / UBB Code is enabled.

Значки Graemlins / Instant Graemlins
   


Послать новую тему / Post New Topic  Послать ответ / Post A Reply Закрыть тему / Close Topic   Feature Topic   Переместить топик / Move Topic   Удалить топик / Delete Topic Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
 - Printer-friendly view of this topic
Перейти к / Hop To


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



Powered by Infopop Corporation
UBB.classic™ 6.7.2