Привет всем. Подскажите нубу по сименсу бпожалуйста. tia portal 17, cpu 315. Как один дискретный выход, например q1.0 нормально задействовать в разных нетворках внутри одного блока? Если сделать как на скрине, то работать будет только второй нетворк. Скрин для примера. В работе алгоритм сложнее с циклом, и в разных шагах цикла должен включаться этот Q1.0
Комментарии: 44
Aleksandr
Не будет работать. Используйте промежуточные переменные или set/reset.
Ilya
Маркерами удобно можно и с «параллелить» Как говорится каждый сам художник себе В условии одну М поставь и от него можно плясать во всех нетворках
Aleksey
промежуточные итак использую, думал, может есть более элегантное решение
Ilya
А «элегантно» это для чего?
Aleksey
для душевного равновесия, наверное )))
Ilya
Evgeniy
SCL, и там через CASE пишите себе последовательную логику, вполне себе элегантную
Berkeman
Нельзя же в двух местах писать в одну переменную
Evgeniy
Можно, но толку ноль.
Berkeman
Поэтому и нельзя
Ilya
Вот и я сути понять не могу Давайте начнем так , что хотим в задаче?)
Aleksey
есть последовательность действий почти 40 шагов. Переход на следующий шаг с подтверждением выполнения текущего шага. И допустим в 10 шаге я открываю дверь. Затем в 20 шаге я снова открываю эту дверь. Суть задачи примерно такая.
Evgeniy
А LAD принципиально важно?
Aleksey
не принципиально. Это я для наглядности
Evgeniy
Я бы советовал через CASE реализовать. И оперировать внутренними переменными, и потом их скидывать на выход.
Anonim
У меня и в ладе, все ладно, на многооо, строк. Просто подхожу к кодингу иначе не как программер высоких языков.
Gabrrr
Я обычно делаю ЕСЛИ автоматический режим И номер шага такой-то ТО сет переменной. Когда надо делаете ресет. Просто при прямом присваивании у вас не только проблемы с шагами могут быть, но и с другими режимами работы. Можно конечно все эти условия вместе собирать, но получается громоздко. Ну и вот это "если" хорошо и через кейс прописывается.
Fedor
А такие вещи решаются несколько иначе. Пишится функция шага - условия запуска, условия перехода дальше, условия отмены, состояние активности шага. А потом из вызовов этой функции ткется полотно последовательности работы с инициализацией, разветвлениями, возвратом в исходное и другими плюшками.
Aleksey
Попробую.
Fedor
Почитайте про язык GRAPH
Rustem
Это самый наглядный и простой метод! Или в st и case. В ld такое делаю через мастер-переменную, значение которую записываю при завершении успешном шага предыдущего . Но одноименные выходы делается сет ресет катушками. Но очень наглядно для наладчика чтобы понять на каком шаге завис цикл технологии. При аварии - мастер переменная сохраняется в другой энергонезависимой переменной и цикл после устранения аварии можно начать с того же места.
Fedor
Case это немного другой случай. Предлагаю разделить такого класса задачи на условно секвенсер и условно машину состояний. Если идем шаг за шагом и активным может быть только один шаг, то это секвенсер. Реализуется хоть на case, хоть на счётчике и компараторах. А если нужно иметь возможность некоторые шаги или цепочки шагов исполнять параллельно с синхронизацией их завершения, если нужно выполнять какие-то действия при отмене цикла и по проведению системы в исходное, то тогда нужно городить машину состояний.
Yuriy
Как правило тут идет пляска по технологической цепочке, а там все по шагам. с восможностью условных переходов. и под каждый технологический шаг - набор состояний для клапанов, движков, шлагбаумов..
Evgeniy
Почему нельзя то? Я же могу сделать в одном нетворке проверку через I1 AND I2 := Q1, а в другом нетворке I3 AND NOT I2 := Q1
Berkeman
Так у тебя в оконцовке результатом будет последнее выполненное же
Evgeniy
И что? Я же могу так написать. И оно будет работать. И будет работать корректно. Нельзя значит нельзя, типа компилятор прогрузить не даст.
Aleksandr
Интересная у вас логика
Evgeniy
В чем проблема то моей логики? Пишут что нельзя в разных местах писать в одну переменную. По факту можно.
Aleksandr
Только смысл от этого? В первом нетворке переменная включится если логическое условие true, а в следующим выключится, если там условие false.
Anonim
Не обращай внимание, можно. Но для чего.
Berkeman
Низя. Не безопасно!
Anton
можно.
Berkeman
Возможно и REAL сравнивать через EQ, но нельзя!
Kirill
Логично же, потому что Реал не имеет конечной точности, как ты можешь сравнить не с неточным, только оно может быть или больше, или меньше.
Anton
можно. приведи к нужной точности и сравнивай :)
Anonim
Можно, но смысла нет.
Sergey
Конечно можно.просто на этапе отладки возникнут проблемы, если алгоритм сложный.сброс может идти из нескольких мест.и какое из условий сработало предстоит разбираться
Berkeman
Есть такие плк, которые не дают такое скомпилить
Evgeniy
Мы вроде про сименс сейчас говорим, не? На других контроллерах где этого сделать нельзя - можно использовать статик переменную. val1 val2 val3, а выходной тег по принципу Q1 := val1 or val2 or val3
Anonim
А зачем так писать? Приведите пример? Можно, но за чем.
Aleksandr
Делайте через блокирующие присваивания (S) и (R)
Fedor
В каждом шаге цикла формируете отдельную промежуточную переменную на включение выхода, а потом нетворк, где их через или собираете для формирования выхода. И наглядно и несложно.
Kirill
А это разве не основы языка лд?
Sergey
Не очень идея.выход лучше взводить и сбрасывать в одном месте.иначе можно запутаться