Тема / Topic: Статическое значение системной переменной в программе
Jery
Junior Member / Новичок
Участник № / Member № 6926
отправлено / posted
Здравствуйте. Отпрашиваю ТРМ202 по MODBUS и меняю уставки. Из организованной экранной формы вручную все получается. Вывожу на экран значение системной переменной @t_Set_Time. Выводятся и изменяются значения секунд от 0 до 59. В программе хотел сделать таймер. Использовал эту же переменную, как напрямую, так и связав ее значение с каналом TIME. Но при выполнении программы и та и другая не меняются и остаются равным 0. Что не так? Заранее благодарен за ответ.
Сообщения / Posts 14 | Из / From: Russia
| IP / IP: IP адрес / IP address |
отправлено / posted
Как Вы полаете "число секунд" от системной переменной @t_Set_Time? Как Вы привязываете канал TIME к системной переменной? Что показывает канал TIME? Каким образом привязаны эта системная переменная и канал TIME к аргументам программы? Тип данных и тип (Input, Input/OUT, OUT) этих аргументов. Как реализуется программный таймер через "число секунд в диапазоне от 0 до 59" и куда передается его значение?
Сообщения / Posts 17344 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Jery
Junior Member / Новичок
Участник № / Member № 6926
отправлено / posted
1. Я вывел на экран системную переменную @t_Set_Time в текстовое поле. Потом завел канал TIME и связал переменную @t_Set_Time с ним и тоже вывел на экран. В обоих случаях выводится из меняемое число от 0 до 59. 2. Системную Переменную @t_Set_Time D&D вывел в каналы. Потом соединил ее с одним из созданных там каналов TIME. 3. Канал показывает то же, что и переменная. 4. В программу вытащил в качестве аргументов канал TIME и системную переменную. D&D из каналов. Аргументы все типа INPUT. Данные пробовал TIME, Real или UINT. Результат одинаковый. 5. Таймер (точнее временные задержки )я еще не реализовал, это дело десятое. Главное, чтобы переменные менялись при выполнении программы. Я думал, что будет выводиться все значение времени, это было бы совсем просто, но получил пока только секунды. Но и это мне подошло бы. Я понимаю, что что-то делаю неправильно. Я только начал работать с TRACE MODE, поэтому прошу прощения за глупые вопросы. Я программировал в IsaGraf в SFC и ST на уровне алгоритмов управления устройствами и системами, а вот с программированием внутри скады столкнулся впервые. Заранее благодарен за ответ.
Сообщения / Posts 14 | Из / From: Russia
| IP / IP: IP адрес / IP address |
отправлено / posted
В каком релизе Вы работаете? Как настроена системная переменная @t_Set_Time?
Если аргументы программы и экрана типа INPUT, значения каналов, связанных с системной переменной @t_Set_Time, должны меняться так, как их формирует системная переменная @t_Set_Time.
Jery
Junior Member / Новичок
Участник № / Member № 6926
отправлено / posted
1. Релиз программы 6.09 2. Переменная - Имя - @t_Set_Time_1 Тип. Input. Привязка @t_Set_Time_1 Значение - REAL.Период 1. Ед. Изм. - цикл CALC. Канал FLOAT. Привязка @t_Set_Time_1:Значение(Источники/Приемники.Диагностика_и_сервис_2.Системные_1)
Сообщения / Posts 14 | Из / From: Russia
| IP / IP: IP адрес / IP address |
отправлено / posted
Рекомендуем обновиться (через Ваш личный кабинет на сайте) до текущего релиза 6.10, опубликованного на сайте.
В любом случае для получения системного времени надо использовать типа INPUT с Параметр=0.
Создайте в узле канал класса TIME с настройками по умолчанию. D&D перетащите на него системную переменную @t_Set_Date.
Создайте в аргументах экрана аргумент INPUT с типом данных Date&Time и свяжите его с атрибутом РЕАЛЬНОЕ_ЗНАЧЕНИЕ канала TIME. Установите на экране ГЭ ‘Дата и время’ и свяжите его с аргументом экрана.
Создайте программу и у нее - аргумент INPUT с типом данных Date&Time, и свяжите его с атрибутом РЕАЛЬНОЕ_ЗНАЧЕНИЕ канала TIME. Обрабатывайте текущее время в программе и по нужному Вам алгоритму формируйте выход (в аргументе OUT с нужным Вам типом данных).
Возможно, Вам потребуется для фиксации начала очередного временного интервала использовать глобальные переменные.
М.б., Вас устроят функциональные блоки FDB-программ в группе "Триггеры и счетчики", формирующие временные интервалы. Создайте в
Сообщения / Posts 17344 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Jery
Junior Member / Новичок
Участник № / Member № 6926
Jery
Junior Member / Новичок
Участник № / Member № 6926
отправлено / posted
По первому пункту отображения на экране. Сделал все, как Вы сказали. Один вопрос: Если ставить "Тип привязки" в свойствах элемента экрана как "Текущие время и дата", то все получается хорошо - время меняется, а если поставить "Тип привязки" - Привязка к каналу, то высвечивается время при старте и остается далее неизменным. Это нормально? Заранее благодарен за ответ.
Сообщения / Posts 14 | Из / From: Russia
| IP / IP: IP адрес / IP address |
Jery
Junior Member / Новичок
Участник № / Member № 6926
отправлено / posted
Ввел переменную в программу. Установилась date#1970-01-01-00:00:00 (0) и не меняется. :-( Программа собственно практически ничего сейчас еще не делает. Наверное что-то с циклом ее выполнения. Или все аргументы обнуляются по началу цикла. Вот она : PROGRAM VAR_INPUT temperatura_R : REAL; END_VAR VAR_INPUT TustavkaR_R : REAL; END_VAR VAR_OUTPUT TustavkaW_R : REAL; END_VAR VAR_OUTPUT TustavkaW_VALUE : REAL; END_VAR VAR_INPUT TIME_3_R : TIME; END_VAR VAR_INPUT _t_Seconds_2_R : REAL; END_VAR VAR_INPUT TIME_4_R : DATE_AND_TIME; END_VAR
IF j==0 THEN Tim:=TIME_4_R; j=1; i=0; End_If; IF j==1 THEN IF (TIME_4_R-Tim)>=t#10s THEN i=1; j=0; End_If; End_If; IF i==1 THEN k=k+1; End_If;
отправлено / posted
Если я правильно понимаю, Вы проверяете работоспособность ГЭ ‘Дата и время’ в режиме эмуляции непосредственно в редакторе графического экрана, а работоспособность программы - в режиме эмуляции в редакторе программ.
В режимах эмуляции в редакторах нет связи экранов и программ с каналами и компонентами слоя "Источники/Приемники" (в том числе и с системными переменными).
Надо "Сохранить проект для VHD@ и запустить узел под управлением профайлера.
Кроме того, в программе никак не участвуют OUT-переменные TustavkaW_R и TustavkaW_VALUE. В реальном времени Вы имеете возможность наблюдать только входные и выходные аргументы экрана и программы. Следовательно, в реальном времени Вы такую программу проверить не сможете. Да она и не нужна Вам будет в таком виде.
Я настоятельно рекомендую Вам пройти уроки "Быстрого старта". Очень многие вопросы понятийного характера и технологии проектирования и отладки снимутся сами собой.
Сообщения / Posts 17344 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Jery
Junior Member / Новичок
Участник № / Member № 6926
отправлено / posted
Большое спасибо. TustavkaW_R и TustavkaW_VALUE я это значения уставки, считываемой по MODBUS по чтению и по записи. Я еще ничего не писал. Это просто пробы, чтобы понять, как и что функционирует. На экран данные с прибора вытаскиваются хорошо и меняются тоже. Теперь понятно, почему не меняются переменные в программе. Еще раз большое спасибо. Сохранить проект для VHD@ это в смысле для МРВ? Я в экранном нажимаю кнопку Сохранить для MPB, а потом запустить профайлер. И в профайлере запуск делаю кнопкой. В этом случае данные с прибора на экран считываются и записываются, а вот дата-время не обновляется, если привязка стоит к каналу.
Сообщения / Posts 14 | Из / From: Russia
| IP / IP: IP адрес / IP address |
отправлено / posted
При правильной привязке к аргументу экрана, связанному с РЕАЛЬНЫМ_ЗНАЧЕНИЕМ канала, ГЭ должен отрабатывать правильно.
Откройте у запущенного профайлера в главном меню "Панель МРВ/Компоненты". Найдите и выделите в левом окне канал TIME, к которому Вы привязали календарь на экране. В правом окне должны отображаться значения его атрибутов. Атрибут 0 (Реальное значение) должен показывать текущее время. Именно его Вы должны видеть в соответствующем ГЭ на экране.
Сообщения / Posts 17344 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Jery
Junior Member / Новичок
Участник № / Member № 6926
отправлено / posted
Проверил в запщенном профайлере "Компоненты" @t_Set_Date(0)=1.4603е+009 - большое реальное число, отображающее дату и время. Привязанный к ее реальному значению канал TIME - 07.04.2016 14.29.04R значение, соответствующее тому реальному значению @t_Set_Date(0). Оно не меняется и соответствует времени запуска программы. Почему? Заранее благодарен за ответ.
Сообщения / Posts 14 | Из / From: Russia
| IP / IP: IP адрес / IP address |
Jery
Junior Member / Новичок
Участник № / Member № 6926
отправлено / posted
Извиняюсь, описал ситуацию не достаточно точно. Время на экране ГЭ меняется, но ступенчато и непонятно по каким причинам. То ли не всегда отрабатывается. То есть раз в минуту или две время меняется и в эту секунду соответствует реальному. Но секунды на ГЭ не меняются.
Сообщения / Posts 14 | Из / From: Russia
| IP / IP: IP адрес / IP address |
Jery
Junior Member / Новичок
Участник № / Member № 6926
отправлено / posted
Еще более интересный факт. Время на ГЭ не только меняется дискретно , примерно раз в минуту, но способно "обогнать" часы компьютера. При компьючерном времени 15:04:20 оно "перепрыгнуло" с 15:03:15 сразу на 15:05:22. Что-то не понимаю. Может программа, хотя и не делает ничего, тормозит вывод на экран? Из-за маленького цикла.
Сообщения / Posts 14 | Из / From: Russia
| IP / IP: IP адрес / IP address |
отправлено / posted
Вам была дана рекомендация: "Создайте в узле канал класса TIME с настройками по умолчанию. D&D перетащите на него системную переменную @t_Set_Date."
Это означает: непосредственно из слоя "Источники/Приемники" системную переменную D&D перетащить на канал TIME.
Вы, насколько я понимаю, выполнили совсем другую процедуру: из слоя "Источники/Приемники" системную переменную D&D перетащили в узел RTM. В узле создался канал класса FLOAT с именем этой системной переменной и привязанный к ней. А затем Вы D&D перетащили ЭТОТ КАНАЛ на канал TIME. Тот эффект, который Вы получили, соответствует Вашим действиям.
Сообщения / Posts 17344 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Jery
Junior Member / Новичок
Участник № / Member № 6926
Jery
Junior Member / Новичок
Участник № / Member № 6926
отправлено / posted
Можно ли при запущенном профайлере просмотреть значение глобальных переменных программы? Заранее благодарю за ответ.
Сообщения / Posts 14 | Из / From: Russia
| IP / IP: IP адрес / IP address |
Jery
Junior Member / Новичок
Участник № / Member № 6926
отправлено / posted
Как передать значение переменной (аргумента) из программы на экран и (или) в канал вывода. Заранее благодарю за ответ.
Сообщения / Posts 14 | Из / From: Russia
| IP / IP: IP адрес / IP address |
отправлено / posted
Аргумент OUT CALL.Program надо привязать к нужному аргументу экрана или к атрибуту ВХОДНОЕ_ЗНАЧЕНИЕ канала вывода. Если надо одновременно передавать выход программы в канал вывода и индицировать на экране, надо привязать аргумент программы к атрибуту ВХОДНОЕ_ЗНАЧЕНИЕ канала вывода, а аргумент экрана - к атрибуту ВХОДНОЕ_ЗНАЧЕНИЕ канала вывода.
Еще раз рекомендую потратить время на освоение "Быстрого старта". Вы реально потратите меньше времени на решение подобных задач.
Сообщения / Posts 17344 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Jery
Junior Member / Новичок
Участник № / Member № 6926
отправлено / posted
Большое спасибо. "Быстрый старт" - книга, которая заказывается у Вас на сайте?
Сообщения / Posts 14 | Из / From: Russia
| IP / IP: IP адрес / IP address |
отправлено / posted
"Быстрый старт" - это раздел электронной справочной системы, которая входит в состав IDE Trace Mode 6, в том числе и бесплатной версии.
Сообщения / Posts 17344 | Из / From: Россия
| IP / IP: IP адрес / IP address |