This is topic Вызв внешней приложения в Console через программу в RTM in forum Редактор проекта TRACE MODE 6 / at Форум TRACE MODE: техническая поддержка.


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

Posted by Сергей Кравчук (Участник № / Member № 5384) on :
 
Здравствуйте.

код программы:
if K080_healthy_In == 0 and K080_1_FAULT_R == 0 then
if K080_1_SP2_D_R == 1 and flag080_1_In == 0 then
flag080_1_In = 1;
_80_1=1;
end_if;
if K080_1_SP2_D_R == 0 and flag080_1_In == 1 then
flag080_1_In = 0;
end_if;
end_if;

где
_80_1 OUT DINT C:\windows\system32\cmd.exe:Входное значение
K080_1_SP2_D_R IN REAL
K080_healthy_In IN REAL
K080_1_FAULT_R IN REAL
flag080_1_In OUT REAL

Программа создана в RTM, запуск должен производиться с Console.
Проблема в том, что при срабатывании K080_1_SP2_D_R значению _80_1 присваиваем 1-цу, приложение должно вызывается 1 раз.

Результат: Приложение вызывается постоянно, причем без какой-то временной последовательности,то 5 раз за несколько секунд, то 15 секунд ничего не запускается.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Где находится канал C:\windows\system32\cmd.exe? В узле RTM или CONSOLE?

Функция "Запуск внешнего приложения" в узле CONSOLE не декларирована. Ее исполнение не гарантируется.

Если запуск внешнего приложения осуществляется в узле RTM, пришлите Ваш тестовый проект на адрес техподдержки.
 
Posted by Сергей Кравчук (Участник № / Member № 5384) on :
 
C:\windows\system32\cmd.exe находиться в Console

Поставлена такая задача:
При превышении показаний датчика выше допустимого значения, необходимо организовать автоматический вывод всплывающего экрана на дисплей у оператора (Console).

На данный момент у нас эта функция реализована через сторонее приложение, которое опрашивает SQL сервер, каждые 10 сек. на предмет превышения допустимого значения, что в свою очередь нагружает SQL сервер, так как у нас таких консолей 7 шт.
Поэтому необходимо эту функцию реализовать средствами ТМ.

quote:
Функция "Запуск внешнего приложения" в узле CONSOLE не декларирована. Ее исполнение не гарантируется.[/QB]
Исходя из этого я так понимаю, это можно реализовать через контроль границ канала FLOAT.
Прошу Вас выслать пример работы с контроль границ канала FLOAT с использованием ОТ и словаря сообщений.
За ранее спасибо.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Каким образом и откуда CONSOLE получает данные по контролируемым параметрам?
Какую роль в этом играет SQL-сервер?
Где и как осуществляется контроль параметров "выше допустимого значения"?
 
Posted by Сергей Кравчук (Участник № / Member № 5384) on :
 
quote:
Каким образом и откуда CONSOLE получает данные по контролируемым параметрам?

Из DocRTM+, который запушен на сервере.

quote:
Какую роль в этом играет SQL-сервер?

DocRTM+ пишет данные каждые 10 сек. в базу данных на SQL-сервере. В нашем случае использование СПАД архивов для хранения информации нам не подходит.

quote:
Где и как осуществляется контроль параметров "выше допустимого значения"?
Контроль осуществляется непосредственно на контроллере, т.е. все события "превышения показаний", "ошибка датчика" и прочие обрабатываются на контроллере.
Мы же обрабатываем показания переменных которые отвечают за "превышения показаний", "ошибка датчика" и прочие. т.е. если пришела "1" значит, что событие произошло, если "0" то все нормально.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Т.о., в CONSOLE получаются от RTM бинарные сигналы - "событие произошло"/"события нет"?
В этом случае в CONSOLE достаточно иметь программу, которая в соответствии с возникающими событиями посылает "2" на ВХОДЫ каналов, вызвающих соответствующие экраны.
 
Posted by Сергей Кравчук (Участник № / Member № 5384) on :
 
quote:
Отправитель / Originally posted by AdAstra Technical Support:
Т.о., в CONSOLE получаются от RTM бинарные сигналы - "событие произошло"/"события нет"?

Да Вы правы, но как быть с тем что событие происходит какой-то определенный промежуток времени.
Если использовать алгоритм котрый при возниконовении события посылает "2" на ВХОДЫ каналов, вызвающих соответствующие экраны, то произойдет следующее:
При каждом пересчете программы на экране CONSOLE будет выводиться всплывающий экран пока событие не исчезнет.

Для это мы пробовали вводить флаги, для того чтобы контролировать был ли вызван всплывающий экран или нет.
Т.е. если событие произошло и экран был вызван то флаг устанавливается в "1" и при последующем цикле программы экран не вызывается.
Далее в программе проверятся окончание события,если событие прошло то флаг устанавливается в "0", чтобы при последующем возникновении события происходил вызов экрана.

Вот как в реализации этого алгоритма у нас и возникли проблемы.
пытались использовать и глобальные переменные и каналы для хранения состояния флага, но пока без результатно.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Проблема, видимо, в программе.
Послал Вам пример для решения Вашей задачи.
Если будут вопросы, обращайтесь, пожалуйста, по почте (hotline@adastra.ru).
 


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



Powered by Infopop Corporation
UBB.classic™ 6.7.2