Добрый день! Вопрос: как запрограммировать выход в исходное состояние при подаче питания на ПЛК110 ? Заранее спасибо за ответ!
Вид для печати
Добрый день! Вопрос: как запрограммировать выход в исходное состояние при подаче питания на ПЛК110 ? Заранее спасибо за ответ!
globar var
x:bool:=true;
end_var
в теле PLC_PRG
out:=x;
Помогите есть ли какой ни будь пример для ПЛК110-60MS и СП3ХХ хотя бы с одним триггером RS и двумя кнопками вкл, выкл. Просто MasterScada 4D для меня новая программа. Никак не могу связать их между собой. Заранее спасибо.
Добрый день. Можно как то сделать переход на экран по изменению булевой переменной. Сам экран просто метка. У меня что то не как не выходит. При переходе переменной"наработка" из "0" в "1" должен быть переход на экран номер три.В симуляторе работает а в железе нет(
PS Приносим извинение закинул не тот файл. перезагрузил.
Интересно, как у Вас в симуляторе работают экраны? Переход на нужный экран возможен только с экрана, на котором этот переход запрограммирован. Для перехода лучше использовать отдельную переменную, т.к. после перехода эта переменная автоматически обнуляется.
Aviator VZh я вижу единичку в симуляторе. И поэтому залил в железо и проверил. В железе у меня перехода на экран нет. А можно по подробнее про "Для перехода лучше использовать отдельную переменную, т.к. после перехода эта переменная автоматически обнуляется"
Вложение 39295
Переменная, по которой происходит переход на экран, обнуляется после перехода и, если она участвует в других местах проекта, это может повлиять на работу.
Проект "левый"
- экрана номер 3 нет вообще
Вложение 39297
- переменная наработка нигде не используется.
Вложение 39298
А кто же ей даст обнулиться, ежели она есть результат какой-либо логической операции в схеме?
Например
Если А > B перейти на экран
Вложение 39299
Переменная "А > B" не сможет "обнулиться" ни какими переходами, а только если условие больше не будет выполняться
Или положим, по сети хочу переключить экраны
Вложение 39300
Никаких самостоятельных обнулений переменных "ГлЭкран", "Экр_3", "Экр_7" не наблюдаю. Состояние этих переменных однозначно определяется содержимым сетевой переменной "RG_Экраны".
Что имели ввиду писатели про автоматическое обнуление я так и не понял.
Переменная обнулится в момент перехода на экран и в дальнейшем будет обработана в соответствии с логикой программы. А вот перезапишется она сначала на 1 или 0 успеет оказать воздействие на программу - я не знаю. Если эта переменная нигде больше не используется, то проблем нет.
Не забывайте, что работа программы состоит из циклов, а последовательность выполнения операций в цикле строго не определена.
Практика не подтверждает Вашу теорию по поводу "Переменная обнулится в момент перехода на экран и в дальнейшем будет обработана в соответствии с логикой программы"
Вот реальный пример
с экрана 2 переход на экран Авария - по фронту переменной [Авария]
Вложение 39301
Возврат с экрана Авария - автоматический по фронту переменной [Return]
Вложение 39302
Сигнал авария - интегральный формируется из 16 дискретных переменных
Вложение 39303
Но это и не важно, как формируется Авария.
А важно то, что переменная Return формируется по спаду Аварии
Вложение 39304
т.е тогда, когда Авария ОБНУЛИТЬСЯ !
таким образом, согласно Вашей теории
Переменная Авария обнулится в момент перехода на экран "Аварии" и в дальнейшем будет обработана в соответствии с логикой программы, т.е. в момент обнуления Аварии переменная Return станет =1 аж на 0,3 сек(см таймер ТР1), что по идее должно вызвать переход обратно на Экран2.
Но вся эта лабуда с автоматическим обнулением по факту не работает
иначе переход на экран Авария никогда бы не произошел.
Однако у меня все работает. При наличии любого аварийного сигнала или их комбинации --> переход на экран Авария. С экрана Авария возврат на Экран2, автоматом если нет ни одного аварийного сигнала.
Наверно потому, что я про автообнуление ничего не знал, когда делал эту программу
Попробуйте, может и так достаточно:
Вложение 39308
А то "очередь" я вроде не для этого создавал, а так на много проще, если вас конечно это устроит!
Или так:
Вложение 39309
To Мимоход
В Вашем случае переменная авария перезаписывается на 1 раньше, чем считывается ее задний фронт. Другого объяснения у меня нет. В другом случае все может быть по другому. Стоит ли рисковать? Проделайте простой эксперимент. Введите переменную для перехода с экрана и посмотрите, что с ней будет после перехода.
Добрый день. Вчера в торопях загрузил не тот файл. Проблема с переменной" наработка" В симуляторе единичка есть а в железе нет вызова экран номер 3
Пожалуйста, будьте внимательнее. У Вас всё работает. На счетчик у Вас идет импульс 20 сек. Что-бы послать второй импульс нужно дождаться окончания первого.
Залейте свой проект в прибор, подайте с задержкой 30 сек три импульса включения на вход DI3 или DI4 и увидите, что переход на экран 3 работает. Но при этом Вы должны находится на экране 1, с которого запрограммирован переход.
Отлично, а то я собирался видео снимать :)
А как осуществить преобразование времени таймера?
Т.е. таймер работает в режиме mm, ss, ms, а выводить переменную типа Float в формате, например, 1.20 (1 минута, 20 секунд)
Добрый день!
Подскажите, как реализовать функционал - на входе кнопка. Нажатием на нее последовательно переключаем состояние 4-х выходов (0001 -> 0010 -> 0100 -> 1000 -> 0001).
Ранее никогда опыта работы с языком графических блоков не имел, поэтому даже такие несложные вещи вызывают ступор). Спасибо!
Регистр сдвига
Вложение 39468
Можно и без регистра сдвига слепить, например так.
Схемы работают по разному, у меня выходы изначально выключены и переходят через выключенное состояние.
Мда :confused: Спасибо за помощь, придется на ST и ПЛК писать. Квадратики не для меня)
xarfan - Если вы алгоритм ST внимательно посмотрите, то увидите, что там тоже самое :) только соединительных линий не видно, они у вас в голове :)
Можно и кольцевой счётчик по-человечьи сделать(мелкому шикарный подарок) и не только счётчик, например так:
Вложение 39474
Добрый день.
Помогите реализовать выключатель многорежимной лампы.
Есть лампа с 7-ю режимами работы и 2 выключателя (без фиксации)
Хочу сделать при нажатии кнопки 1 (К1) вкл/вык первый режим лампы (Р1).
При удержании кнопки 2 (К2) более 5-ти сек, каждое нажатие К1 переключает режимы Р2, Р3 и т.д. по кругу.
При отпущенной К2, К1 работает как и раньше (выключает всю лампу и следующее нажатие вкл Р1).
В принципе у меня получилось реализовать данный режим (экспериментирую с тремя режимами). Но сложность возникла в том, что данный алгоритм у меня получается реализовать только для 1 лампы. А мне нужно с тех же 2-х кнопок управлять 2мя аналогичными лампами, Т.е. для первой лампы режимы переключаются при нажатой К2, нажатием К1, а для второй, при удержании К1, выбираем режимы К2. Так же, хотелось бы реализовать запоминание режима, т.е. - выбрали Р3 и в дальнейшем нажатие К1 (или К2 на второй лампе) включает Р3 или выключает всю лампу. (запоминание производить только той лампы, которая последняя переключалась)
Так как алгоритм очень заморочен всеми и, не , сбросами, то, видимо путаюсь в логике и прикрутить вторую лампу не получается.
Помогите оптимизировать алгоритм. Регистрами сдвига пользоваться не умею.
В идеале, если бы писал в коде, то взял бы переменную и добавлял по единице при каждом нажатии. Каждому значению присвоил режим, при достижении переменной равной 7, обнулял ее. Но в лоджике не понял как обнулять, да и с выбором не разобрался.
Так же запутался с задержками при нажатии кнопок
Вложение 39601
Sel лень разбираться в вашем творчестве. Начните с того, что чтобы клавиша работала на удержание и не мешала обычному режиму работы то обычный режим должен срабатывать по ЗАДНЕМУ фронту. Тогда удерживая клавишу можно этот фронт заблокировать.
И второй момент - зачем удерживать соседнюю кнопку, если можно удерживать ту же самую и применять действие, которое вы прекрасно увидите по смене режима лампы ?
Наверно, как-то так:
Вложение 39602
И што, такой простенький алгоритм у Вас не получается, минут 5-10 времени надо!
Если предпочитаете чтобы при включении светильника не сохранялся тот режим который был в момент выключения, а всё начиналось с 1 режима, то как-то так:
Вложение 39607
Можно и все сигналы в одну переменную собрать, мало ли что, может по сети надо передавать одним регистром или ещё какие заморочки:
Вложение 39609
Это в работе схемы абсолютно ничего не изменит!
И я бы предпочёл, как мелкий советовал, каждая кнопка отвечает за свою лампу, например в режиме включения светильника(режим не имеет значения) удержание кнопки свыше 5 секунд переводит её из режима включения-выключения в режим переключения режимов работы(переключается выход 1-8 на каждую лампу) достижение времени нажатия в 5 секунд сопровождается переключением режима(или начинает мигать лампа включенного в данный момент режима), что бы было видно и кнопку лишние секунды не держать, при отпускании каждое последующее кратковременное(менее 0,5 секунды) нажатие переключает режим работы светильника по кругу(как сейчас), если 10 секунд кнопка не нажата(отпущена), то режим работы кнопки переключается обратно на режим включения-выключения, надеюсь понятно объяснил, как я это вижу, лучше уже тем, что для манипуляций со светильниками достаточно одной руки(пальца), что на мой взгляд гораздо удобнее, короче примерно как-то так:
Вложение 39612
Спасибо большое, то, что надо.
Хотелось бы разобраться с данным алгоритмом.
Ответьте, пожалуйста на пару вопросов новичка:
1. Почему периодически не срабатывает включение/выключение? Если подряд нажимать кнопку (любую), то периодически не изменяется значение на выходе.(не срабатывает при быстром нажатии)
2. В макросе СТМ что означает цифра 31? Смотрел предыдущие примеры, там Вы так же устанавливает 31.
3. Каким образом устанавливается величина цикла до сброса? В данном случае СТМ сбрасывается на цифре 7, где указать, что сброс будет, допустим после 4?
Я пока не въехал как с квадратиками работать, поэтому любое что-то более-менее замороченное дается не просто, надож понять как обойти ограничения привычной логики ))
Спасибо за идею. Сейчас работает лампа в 3-х режимах и управляется с 2-х кнопок, как показала практика, довольно удобно. Единственная задержка 1с, перед переключением режимов (хотя, я бы и от нее отказался, но в квадратиках пока не понял как это реализовать). Из плюсов отсутствия задержек возможность сразу включать\выключать лампу или сразу менять режимы второй лампы.
1. : если Вы в железе проверяете(в симуляторе много зависит от настроек симулятора и я пока это не хочу даже обсуждать), то я предлагаю уменьшить время импульса до 0,5 секунд, как у меня в последнем проекте про лампы, если не устроит, то до 0,3-0,2 секунд:
Вложение 39615
Дело в том, что функциональный блок "Импульс включения заданной длительности" не может перезапустится до истечении этого времени!
Или как-то так сделать:
Вложение 39617
2-3. : в свойствах макроса таятся настройки:
Вложение 39616
"0" и "31" - значения назначенные в макросе, а не свойствах макроса и значения не имеют!
Я пока тестировал только на компе, может на устройстве будет по другому.
Этот баг выскакивает когда ТР досчитывает до конца и сбрасывается на 0, если нажать кнопку в этот момент, то она не сработает.
Спасибо за разъяснения.
Как параметры макроса связаны с самим макросом? В лоджике не увидел как макрос учитывает эти парметры и где идет обнуление.
Не нашел в помощи про параметры макроса. Где почитать как их задавать и как они будут влиять на выполнение программы?
Надо понимать только одно: что значения назначенные в свойствах макроса имеют преимущество над значением назначенным в макросе, всё!
Это кольцевой инкрементный счётчик, назначаются минимальное и максимальные значения, достигнув максимального значения с приходом следующего счётного импульса счёт начнётся заново с минимального значения, при сбросе счётчик примет минимальное значение, а не "0", всё!
Логично. С этим счетчиком я все понял и как параметры задаются и как он отрабатывает.
Мне интересно как делать такие макросы (сдается они не в лоджике сделаны). Сейчас я столкнулся с проблемой, если я решу изменить первоначальные условия, то я не смогу переделать эти макросы под новую задачу. Первоначальная задача это пример, разобрав который, я смогу реализовать часть задуманного. В реальности у меня 15 ламп и порядка 20 схем их работы и этим всем надо управлять с 2х выключателей. Но поправить макрос EXTRACT8 под реальную задачу я не могу, ведь параметры рассчитаны на 8 ламп. Даже добавив дополнительный выход, надо добавить и его описание в параметрах, иначе на него сигнал не приходит. А я не знаю как это сделать.
Я за то, чтобы разобраться в работе алгоритма и самому его повторить. Отсюда и пытаюсь понять как делать макросы с параметрами. Кстати, очень полезная функция, помогает обойти некоторые ограничения лоджика.
Если Вам не сложно, объясните, пожалуйста, как работать (создавать, редактировать) подобные макросы с параметрами. Если это секрет, спасибо за помощь, Ваши решения помогли мне кое в чем разобраться.
Сначала по макросу извлечения(чтения бита): Вам ничего не надо там переделывать, в свойствах макроса, как и для счётчика, есть настройки, можно задавать значения извлекаемого(читаемого) бита в диапазоне 0-31, дальше всё будет циклически повторятся с кратностью 32, короче поставьте сколько Вам нужно экземпляров макроса 1-4 и настройками "рулите", в принципе у меня есть и на 16, 32 выхода, но никакой разницы нет, подобно я делал в третьей версии проекта ламп(где все сигналы в одну переменную собирал), посмотрите!
Теперь о создании: при создании, редактировании макроса в свойствах константы есть пункт использовать в макросе - ставите "Да":
Вложение 39620
Также можете переименовать(подписать), как вам угодно, строчка выше преведущей, всё!
Доброй ночи.
Квадратики даются с трудом.
Подскажите, как осуществить алгоритм: Кнопка без фиксации. При обычной работе с кнопкой, выход меняет статус. При удержании кнопки в нажатом состоянии более 3-х секунд, при отпускании кнопки статус выхода не именяется.
Суть: С кнопки включаем/выключаем лампу. Нажали кнопку, включается лампа, отпустили кнопку. Потом нажимаем кнопку на удержание 3 сек. И нужно, чтобы отпустив кнопку лампа не погасла.
Вроде все просто, но прога меняет статус выхода как ТОН меняет свой.
Вложение 39623
Посмотрел ранее, мне отвечали на этот вопрос, предложив добавить ТР. Но я хочу полностью уйти от таймеров в последствии. Есть ли другие способы не считывать изменение статуса кнопки, при длительном нажатии.
(год назад я решил этот вопрос без ТР. Но не помню как, а исходники проекта умерли вместе с винтом)
Можно не мудрить, есть же Д-триггер, делайте как хочется, я до конца не понял, как Вы хотите, лучше диаграмму состояний, для ясности!
Вложение 39624
Насколько смог Вас понять, у меня так и было, поэтому мне непонятно, что Вы хотите!
Вот мой последний вариант, в преведущих аналогично и уставка времени в мс, при превышении времени нажатия выше этого времени импульс не проходит:
Вложение 39625