Тема / Topic: Вызв внешней приложения в Console через программу в RTM
Сергей Кравчук
Forum Member / Участник форума
Участник № / Member № 5384
отправлено / posted
Здравствуйте.
код программы: 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 секунд ничего не запускается.
Сообщения / Posts 39 | Из / From: Украина
| IP / IP: IP адрес / IP address |
отправлено / posted
Где находится канал C:\windows\system32\cmd.exe? В узле RTM или CONSOLE?
Функция "Запуск внешнего приложения" в узле CONSOLE не декларирована. Ее исполнение не гарантируется.
Если запуск внешнего приложения осуществляется в узле RTM, пришлите Ваш тестовый проект на адрес техподдержки.
Сообщения / Posts 17315 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Сергей Кравчук
Forum Member / Участник форума
Участник № / Member № 5384
отправлено / posted
C:\windows\system32\cmd.exe находиться в Console
Поставлена такая задача: При превышении показаний датчика выше допустимого значения, необходимо организовать автоматический вывод всплывающего экрана на дисплей у оператора (Console).
На данный момент у нас эта функция реализована через сторонее приложение, которое опрашивает SQL сервер, каждые 10 сек. на предмет превышения допустимого значения, что в свою очередь нагружает SQL сервер, так как у нас таких консолей 7 шт. Поэтому необходимо эту функцию реализовать средствами ТМ.
quote:Функция "Запуск внешнего приложения" в узле CONSOLE не декларирована. Ее исполнение не гарантируется.[/QB]
Исходя из этого я так понимаю, это можно реализовать через контроль границ канала FLOAT. Прошу Вас выслать пример работы с контроль границ канала FLOAT с использованием ОТ и словаря сообщений. За ранее спасибо.
Сообщения / Posts 39 | Из / From: Украина
| IP / IP: IP адрес / IP address |
отправлено / posted
Каким образом и откуда CONSOLE получает данные по контролируемым параметрам? Какую роль в этом играет SQL-сервер? Где и как осуществляется контроль параметров "выше допустимого значения"?
Сообщения / Posts 17315 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Сергей Кравчук
Forum Member / Участник форума
Участник № / Member № 5384
отправлено / posted
quote: Каким образом и откуда CONSOLE получает данные по контролируемым параметрам?
Из DocRTM+, который запушен на сервере.
quote: Какую роль в этом играет SQL-сервер?
DocRTM+ пишет данные каждые 10 сек. в базу данных на SQL-сервере. В нашем случае использование СПАД архивов для хранения информации нам не подходит.
quote: Где и как осуществляется контроль параметров "выше допустимого значения"?
Контроль осуществляется непосредственно на контроллере, т.е. все события "превышения показаний", "ошибка датчика" и прочие обрабатываются на контроллере. Мы же обрабатываем показания переменных которые отвечают за "превышения показаний", "ошибка датчика" и прочие. т.е. если пришела "1" значит, что событие произошло, если "0" то все нормально.
Сообщения / Posts 39 | Из / From: Украина
| IP / IP: IP адрес / IP address |
отправлено / posted
Т.о., в CONSOLE получаются от RTM бинарные сигналы - "событие произошло"/"события нет"? В этом случае в CONSOLE достаточно иметь программу, которая в соответствии с возникающими событиями посылает "2" на ВХОДЫ каналов, вызвающих соответствующие экраны.
Сообщения / Posts 17315 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Сергей Кравчук
Forum Member / Участник форума
Участник № / Member № 5384
отправлено / posted
quote:Отправитель / Originally posted by AdAstra Technical Support: Т.о., в CONSOLE получаются от RTM бинарные сигналы - "событие произошло"/"события нет"?
Да Вы правы, но как быть с тем что событие происходит какой-то определенный промежуток времени. Если использовать алгоритм котрый при возниконовении события посылает "2" на ВХОДЫ каналов, вызвающих соответствующие экраны, то произойдет следующее: При каждом пересчете программы на экране CONSOLE будет выводиться всплывающий экран пока событие не исчезнет.
Для это мы пробовали вводить флаги, для того чтобы контролировать был ли вызван всплывающий экран или нет. Т.е. если событие произошло и экран был вызван то флаг устанавливается в "1" и при последующем цикле программы экран не вызывается. Далее в программе проверятся окончание события,если событие прошло то флаг устанавливается в "0", чтобы при последующем возникновении события происходил вызов экрана.
Вот как в реализации этого алгоритма у нас и возникли проблемы. пытались использовать и глобальные переменные и каналы для хранения состояния флага, но пока без результатно.
Сообщения / Posts 39 | Из / From: Украина
| IP / IP: IP адрес / IP address |
отправлено / posted
Проблема, видимо, в программе. Послал Вам пример для решения Вашей задачи. Если будут вопросы, обращайтесь, пожалуйста, по почте (hotline@adastra.ru).
Сообщения / Posts 17315 | Из / From: Россия
| IP / IP: IP адрес / IP address |