Привет всем. Подскажите нубу по сименсу бпожалуйста. tia portal 17, cpu 315. Как один дискретный выход, например q1.0 нормально задействовать в разных нетворках внутри одного блока? Если сделать как на скрине, то работать будет только второй нетворк. Скрин для примера. В работе алгоритм сложнее с циклом, и в разных шагах цикла должен включаться этот Q1.0

Комментарии: 44

  1. Aleksandr

    Не будет работать. Используйте промежуточные переменные или set/reset.

  2. Ilya

    Маркерами удобно можно и с «параллелить» Как говорится каждый сам художник себе В условии одну М поставь и от него можно плясать во всех нетворках

    • Aleksey

      промежуточные итак использую, думал, может есть более элегантное решение

      • Ilya

        А «элегантно» это для чего?

        • Aleksey

          для душевного равновесия, наверное )))

          • Ilya

      • Evgeniy

        SCL, и там через CASE пишите себе последовательную логику, вполне себе элегантную

  3. 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

      А зачем так писать? Приведите пример? Можно, но за чем.

  4. Aleksandr

    Делайте через блокирующие присваивания (S) и (R)

  5. Fedor

    В каждом шаге цикла формируете отдельную промежуточную переменную на включение выхода, а потом нетворк, где их через или собираете для формирования выхода. И наглядно и несложно.

    • Kirill

      А это разве не основы языка лд?

  6. Sergey

    Не очень идея.выход лучше взводить и сбрасывать в одном месте.иначе можно запутаться

Не нашли ответ?

Вам также может быть интересно