energvk и что вы хотите добиться умножая на 65535 ? может надо 1 добавить ко второму операнду ? на 65536 умножать
Вид для печати
energvk и что вы хотите добиться умножая на 65535 ? может надо 1 добавить ко второму операнду ? на 65536 умножать
Ну вообще я хотел склеить 2 WORD в DWORD. Неправильно, да?
как сделать самоподстраивающийся макрос ?
На примере роллет чтобы было проще. Вот открыты роллеты полностью, есть сигнал с концевика "открыто", даем команду "закрыть" и ждем N секунд (у меня 25 сек), а роллета закрылась допустим за 22 сек.
Как эти 22 сек потом записать в переменную N чтобы при очередных махинациях мы ждали уже 22 сек. ???
Секунды взял для простоты, вообще надо будет мс измерять...
Может мс это круто, учитывая еще и время цикла, хотя бы 10-тые...
Так если концевики останутся ,то это не к чему .А так сделать не сложно ...
rovki ну роллету я привел образно, чтобы проще было понимать...
а то мне тут генератор попался капризный, не хочет запускаться горячий без закрытия заслонки, единственный сигнал, который могу с него снять это наличие 220В (через схемку контроля).
если заслонку держать закрытой он тоже заводиться не хочет.
руками такая комбинация. закрываем заслонку, крутим стартером и открываем заслонку. Чуть передержал, не завелся. Не додержал - не завелся.
Вот как-то нужно научить менять время и сохранять его для следующего запуска. В общем чтобы был режим адаптации что ли.....
Да нет проблем ...только кто скажет первый раз что заслонка закрыта\открыта если нет концевика .Ну или замерьте как то время ,а потом уточните .Но только такая система работает при постоянном моменте ,а то у вас следячка только и будет делать ,что подбирать новое значение времени ...
так мне и надо, чтобы система не следила постоянно.
в ПР нет такого понятия, как выход ET у таймеров, по которым можно было бы сохранять время совершенного действия.
А следячка должна только сравнивать в последующем это время и вносить корректировки.
Например попытка 1, неудачная, время было 1,2 сек. (шаг добавления например 0,2 сек)
Увеличиваем время до 1,4, попытка, неудачная
Увеличиваем время до 1,6, попытка, удачная - сохранили это время.
При следующих попытках сразу начинаем с 1,6
Мне сейчас важно понять, как в ПР можно вот этот шаг устроить и главное, чтобы следующий пуск начинался с удачного шага (времени) то есть сохранить в энергонезависимую переменную удачный шаг. И если последующие пуски будут успешными, то больше ничего и не менять, если вдруг не заведется, то делать пару шагов назад. Ну или задать некий диапазон мин и макс значений который потом опытным путем подберется.
То есть чтобы программа каждый раз не шагала от минимума до максимума а начинала с некоего подобранного значения самостоятельно.
Кто будет говорить что удачно ,концевик или глаз ? остальное просто ...
только наличие 220В если запустиля.
Вот и интересно, как сделать элемент, чтобы он высчитывал время и при этом еще и сохранял успешное.
Пока на ум ничего не приходит, не ставить же кучу таймеров...
Счетчик который считает от блинка тики (0,01 период ,например) от момента пуска ,до момента появления напряжения и сохраняет это значение при выключении питания .Насчитанное число является уставкой для таймера .Если есть несколько пусков без выключения питания ,то данные складываются в стек и усредняются в нем и сохраняются в энергонезависимой переменной .После включения питания уставка сохраненная переписывается в таймер .В таком случае счетчик делается не энергонезависимый ....
смысл понят, только есть поправочка - неизвестно запустился или нет, пока не бросишь стартер и не закроешь заслонку.... вот такой он бывает "Фу Баг"
У ПР200 ограничение 12 регистров как говорят, но группой с него читать точно можно. Я пока все не подключил в SCADA чтобы проверить, если действительно есть ограничение то 20 надо будет разбить на 2 запроса со стороны мастера.
Упс, у вас ПР200 мастером куда-то отправляет ? так не знаю, заметил тоже, что галочка "Груповой запрос" неактивна.
Из опыта эксплуатации.
Система приточной вентиляции собрана на TAChenta. Так вот у меня есть обратный сигнал 0-10 V с клапана( данфос). Сама схема для меня закрыта. Но из общения с программистом выяснил. У меня считают время от полного открытия до полного закрытия и этими данными оперирует PID. И если по каким то причинам клапан тормозит то я получаю сообщение Рассогласование Клапана. А сигнал 0-10 вольт используют для индикации в скаде. Как то так.
Юрий добрый день. Что то не могу сообразить как сделать макрос.
Делаю макрос для включения и отключения электродвигателя.
1) вход -Реле контроля фаз = 1 фаза есть /0 фазы нет_сообщение Авария Реле Фаз
2) вход -Автомат защиты двигателя=1 автомат включен/ 0 автомат выключен_сообщение Авария автомата.
3) вход -С работал магнито-пускатель=1 сработал/ 0 не сработал(обрыв катушки пускателя)_сообщение Авария магнито пускателя.
4) вход -Подтверждение работы двигателя( Таймер задержки на получение сигнала с датчика ( реле протока для насоса или реле давления для масло станции ))=1 работает / Если чере ХХХ секунд 0 не работает _сообщение АВАРИЯ.
Как мне контролировать что пускатель сработал. А то у меня что то авария висит.
То есть пока я не нажму кнопку ПУСК у меня сообщение что авария пускателя.
Добрый день. А можно макрос увидеть, возможно необходимо добавить триггер, и с его выхода разрешать выдачу аварий, если пуска еще не было, то и аварию не выдавать. Там где это зависит от пуска, т.е защита двигателя не может сработать пока двигатель не запущен, но контроль фаз может работать и без пуска двигателя. как-то так, если я правильно понял задачу.
Юрий, для своего проекта потребовался макрос сохраняющий значение с возможностью безусловного сброса/останова сохранения значения. Допилил имеющийся fSAVE, и получил fSAVE_res. есть смысл добавить в базу?
выкладывайте на форум.......Цитата:
есть смысл добавить в базу?
Хорошо. Мне потребовался для использование в звене интегратора. ограничение интегральной составляющей.
Спасибо, надо было сразу в эту ветку выложить. виноват...
Так как макрос по управлению КЗР на данный момент не готов к выгрузке в онлайн базу, выложу файл с тем что есть на текущий момент, возможно при участии пользователей и тестировании на реальных объектах, быстрее появится законченное решение. Проект выкладываю в виде файла owl для ПР200-24.2, если необходимо с него можно выгрузить отдельно макрос. В файле есть комментарии по блокам, если возникнут вопросы задавайте.
Вложение 28691
Небольшая переделка модуля.
Ревака Юрий - переработал ваш модуль "Регистрация времени выдачи импульсов "
Соображения:
1) считать лучше в целочисленном формате - быстрее работает.
2) дискретность равна времени исполнения цикла программы, работа в диапазоне 32битного числа. (хватит с запасом на все).
3) введена задержка на разгон привода - иначе при работе короткими импульсами в одну сторону и возвратом пост. вращением получим большую ошибку.
Проверяйте.
Всем хорош макрос задвижка, но есть ли готовые аналоги для codesys?
dim1987 так нарисуйте его в CDS, там нет явных обратных связей, должен заработать будет, если понравился так.
Если никто не поделится, буду перерисовывать)) Но вдруг кто то делал такой блок.
Василий Кашуба рекомендует поставить этот модуль формирователя импульсов: http://www.owen.ru/forum/showthread....l=1#post235103
А в нём обратные связи есть.
С первой страницы многие макросы "не грузятся". Вместо них открывается пустая страница:
Вложение 29050
Хочу внести скромную лепту в библиотеку макросов.
1. Вариант счетчика моточасов:
Вложение 29051
Вход I1 - запуск счетчика (синхронно с, например, двигателем агрегата).
Счетчик CTN1 (с сохранением состояния) считает минутные импульсы и обнуляется каждый час.
Счетчик CTN2 (без сохранения состояния) также считает минутные импульсы, подает их количество на выход Q2 (время текущего сеанса работы агрегата в минутах) и обнуляется при каждом новом запуске.
Счетчик CTN3 (с сохранением состояния) считает часовые импульсы и подает их количество на выход Q1 (общие моточасы).
Иногда, например после обновления программы, бывает полезно записать в счетчик то количество моточасов, которое было перед обновлением.
Для этого предусмотрены вход I2 (команда "Запись") и вход I3 для записываемого количества часов (записываются в счетчик CTN3 при помощи блока "Write to FB").
2. "Сервисный" счетчик:
Вложение 29053
Многое оборудование имеет так называемый "межсервисный интервал" - периодичность проведения технического обслуживания.
Счетчик считает часы "в обратном направлении" от значения, подаваемого на вход I2.
Т.к. возможна "просрочка" обслуживания, то на выход Q1 оставшиеся часы передаются в виде значения типа FLOAT (может быть отрицательным).
Со входа I3 можно "сбросить" счетчик. Счетчики CTN1 и CTN2, как и в предыдущем макросе, с сохранением состояния.
С выхода Q2 получаем сигнал предупреждения, когда до ТО осталось менее, скажем, 200 часов.
С выхода Q3 можно получить сигнал блокировки работы оборудования, когда интервал обслуживания "просрочен" более, чем на, например, 200 часов.
При желании точность отсчета обоих счетчиков можно увеличить, настроив блок BLINK на генерацию секундных импульсов, а константе на входе блока EQ присвоить значение 3600. Но в этом случае число импульсов, подсчитанных счетчиком CTN2 в первом макросе, перед подачей на выход Q2 необходимо разделить на 60. Правда максимальная продолжительность текущего сеанса работы в минутах, измеренная счетчиком, будет ограничена значением 1092 (немногим более 18 часов).