Подскажите, пожалуйста, как сделать так чтобы FBD программа запускалась только после нажатия кнопки, а не сразу же с запуском проекта. Какой должен бать тип и подтип канала, и какие атрибуты кнопки? Проект разрабатывается в ТрейсМоуд 5.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
А почему проект разрабатывается в Trace Mode 5? Эта версия уже закрыта.
Posted by tressi (Участник № / Member № 4058) on :
Мне более удобно работать в Trace Mode 5.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Trace Mode 5 больше не поддерживается. Переход от версии 5 к версии 6 займет у Вас не так много времени, а пользы от этого будет намного больше.
Posted by SergeyZ86 (Участник № / Member № 5575) on :
Добрый день! У меня аналогичная проблема, только проект разрабатывается как раз в ТрейсМоуд 6. Я поступил следующим образом. Написал простенькую программу на FBD в шаблоне программ. Создал в узле канал класса CALL, вызывающий программу. При запуске профайлера все работает отлично. Затем я меняю тип канала, вызывающего программу на Output. Открываю свойства кнопки, и во вкладке "События" задаю на нее функцию "Выполнить", где указываю канал, вызывающий программу. После этого программа перестает запускаться. Подскажите пожалуйста, в чем может быть проблема?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
В настоящее время функция “Выполнить” в ГЭ отключена. Для запуска программы с типом канала вызова OUT надо на экране создать аргумент, привязанный к атрибуту EXEC (39) канала вызова программы, а из ГЭ передавать в этот аргумент “1”.
Posted by SergeyZ86 (Участник № / Member № 5575) on :
Здравствуйте! Воспользовался вашим советом, происходит следующее. При записи "1" в аргумент (типа BOOL), привязанный к атрибуту EXEC(39), программа выполняется однократно, завершается и значение аргумента сбрасывается в "0" (при последующем нажатии кнопки все повторяется). Мне же нужно, чтобы: 1) программа выполнялась циклически, так как если бы она вызывалась стандартно каналом класса CALL типа Input; 2) завершалась только по нажатию другой кнопки. Пункт №2 я предполагаю реализовать с помощью FBD блока "Exit". Подскажите пожалуйста, как реализовать пункт №1. Заранее благодарю.
Posted by stepan (Участник № / Member № 3589) on :
это же просто... нужно немного почитать справку и потренироваться с атрибутами канала.
1) выключить канал, который вызывает программу (в редакторе)
после запуска МРВ: 2)нужно включить программу - в атрибут 003 канала вызывающего программу отправляете 0 - канал включается и прога работает
3) нужно выключить - шлёте 1 - канал выключается, программа не вызывается
Posted by stepan (Участник № / Member № 3589) on :
это то что было нужно?
Posted by SergeyZ86 (Участник № / Member № 5575) on :
Спасибо stepan! Хотелось бы еще кое-что уточнить. Допустим, программа состоит из одного генератора синусоидального сигнала, значение этого сигнала выводится на ГЭ Тренд. При записи "1" в атрибут 003, программа выключается, но при этом продолжается расчет сигнала. При последующем включении программы она стартует ни с того значения, на котором была остановлена, а собственно с расчитанного на данный момент времени. Пытался запретить пересчет канала посылкой "0" в атрибут 123, не получилось. Подскажите пожалуйста, куда копать. Еще лучше было бы научиться запускать программу заново (с нуля). Заранее благодарю.
Posted by Nico (Участник № / Member № 5342) on :
sin от колличества пересчетов программы увеличиваем в самой проге
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
FBD "Генератор Sin" имеет в качестве аргумента время в секундах. Поэтому он не учитывает промежутки времени, в течение которых программа была выключена. Начальные условия каждого запуска программы должны быть заданы в самой программе.
Posted by Yury (Участник № / Member № 6151) on :
Здравствуйте! Немного не по теме, но все же. Имеется две программы на FBD. Мне нужно связать их через один аргумент например BOOL. Т.е. чтобы, если я в одной из программ придавал этому аргументу значение 1, то и в другой программе тоже автоматически этот аргумент принимал значение 1. Возможно ли это сделать? Версия софта 6.06.
Posted by Ilgeneer (Участник № / Member № 5896) on :
Yury , Если не ошибаюсь, то в одной программе его делать out, а в другой программе in и привязать его на аут первой.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Yury,
если Вам необходимо, что бы у двух разных программ аргументы принимали одно и тоже значение, то проще всего привязать эти аргументы к одному общему источнику.
или использовать предложение Ilgeneer'а.
Posted by traffick (Участник № / Member № 6646) on :
Добрый день, подскажите в чем ошибка синтаксическая ? PROGRAM VAR_OUTPUT Status : INT; END_VAR VAR_OUTPUT STS : INT; END_VAR VAR_OUTPUT STS2 : INT; END_VAR VAR_INPUT ВВ_включен_C : BOOL; END_VAR VAR_INPUT ВВ_отключен_C : BOOL; END_VAR VAR_INPUT ВВ_рабочее_C : BOOL; END_VAR VAR_INPUT ВВ_контрольное_C : BOOL; END_VAR VAR_INPUT ВВ_ремонтное : BOOL; END_VAR
if ВВ_включен_C : BOOL == 0; then Status =0; else Status = 1;end_if;
if ВВ_отключен_C : BOOL ==0; then Status =0; else Status =1;end_if;
if ВВ_рабочее_C : BOOL ==0; then Status =0; else Status =1;end_if;
if ВВ_контрольное_C : BOOL ==0; then Status =0; else Status =1;end_if;
END_PROGRAM Заранее спасибо!
Posted by Nico (Участник № / Member № 5342) on :
"if ВВ_включен_C : BOOL == 0;" - и подобные ниже строчки неверны
Posted by traffick (Участник № / Member № 6646) on :
Nicо, а как будет верно написать. Подскажите пожалуйста.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
В каждом из условных операторов 3 ошибки: - компонент "выражение" не закрывается разделителем ";", - переменная должна обозначаться только своим именем (не ВВ_включен_C : BOOL, а ВВ_включен_C), - для переменных типа BOOL проверка значения в условном операторе имеет только 2 возможных варианта if !ВВ_включен_C then ....; else ...; end_if; или if ВВ_включен_C then ....; else ...; end_if;
У нас нет возможности искать синтаксические ошибки в программах. Надеемся на понимание.