Та это по памяти. Когда ложишься спать начинаешь обдумывать себе работу на завтра и решения проблем за сегодня. Вот и вопросы. Смысл в том что я не пойму как мне работать с переменной которая должна и со скады управляться и с ПЛК. Типа у меня есть кнопка ручного запуска механизма в скаде, которая управляет BOOL. Типа нажал - true, повторно нажал - false. Но эту кнопку в случай чего должен сбрасывать ПЛК. Типа ты попытался пустить механизм а его пустить нельзя, и контроллер берёт и обнуляет переменную. Попробую описать как работает ПЛК у меня: В начале читает состояние переменной. Потом эта переменная подключается на вход и выход FB. Вход читает состояние переменной, и на выходе возвращает либо такое же состояние без изменений, либо сбрасывает с true на false. Так вот - читаем переменную она false. В конце цикла у меня программа сделала свои вычисления и записала то же самое состояние false обратно так как ничего не поменялось. Но есть проблема: если я нажал кнопку и установил переменную в true в скаже как раз после операции её чтения в ПЛК и до операции её записи, то у меня по окончанию цикла в ПЛК он мне эту переменную запишет обратно в false. Типа нажал кнопку а она обратно отжалась в скаде, потому что её ПЛК обнулил, потому что успел запомнить что переменная была была false, а потом пока шел цикл ПЛК как раз произошло нажатие кнопки в скаде, а ПЛК то запомнил ещё то состояние до нажатия кнопки и по завершению цикла обнулил мне переменную, то есть вернул точно такое состояние переменной которое успел считать до нажатия кнопки и начал выполнять цикл Либо колхозить как то так чтобы потокончанию цикла переменная записывалась только тогда когда она была изменена в ходе выполнения цикда Либо цикл ПЛК должен выполняться со скоростью света но каждые 10 секунд. Типа за 1 наносекунду выполнил цикл 10 секунд ждет (образно) Тогда будет очень маленькая вероятность нажать кнопку не вовремя в скаде а именно тогда, когда выполняется цикл операций над этой переменной в ПЛК

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

  1. Vyacheslav

    В моей лексике - арбитр команд

  2. Fedor

    Тут без мьютексов никак)

  3. Anton

    А вас не смущает, что минимальная единица измерения времени миллисекунда, какие наносекунды?

    • Iiy

      Вот это идея. Сделать просто чтение бита «пуск» на входе FB а на выходе подсоединить тот же бит только на катушку (R) Тогда обнулять будет только когда нужно. Та это такое абстрагирование

    • Oleg

      Актуальное время выполнения программы в шнайдере в таске измеряется в микросекундах

      • Anton

        Sorry! Поправила клавиатура, микросекунда!

  4. Vladimir

    Уже много лет использую делаю так: hmi переменную Set, а контроллер, после ее обработки эту переменную reset. Что хорошо обеспечивает параллельное управление с нескольких мест как hmi так, например, modbus.

    • Anton

      Переменная Set? Может все таки функция?

      • Anton

        в hmi переменная установилась, плк ее прочитал, а затем сбросил

        • Vyacheslav

          От HMI ушла, а ПЛК принял и сбросил

          • Anton

            доктор, а я как сказал? (с)

        • Anton

          Я согласен, но стоит стараться избегать в переменных ключевых слов, лучше делайте длинные имена. А то так можно и функцию затереть. А что произойдет если him отвалится от plc?

          • Vyacheslav

            А какая ему разница, продолжит процедуру

            • Anton

              А если оператор решил остановить?

              • Anton

                нажмет кнопку stop

              • Vyacheslav

                Делается кадр - диагностика

              • Iiy

                На случай отвала HMI всегда есть кнопка стоп на пульте оператора которая разрывает питание оперативной цепи и даёт команду в ПЛК

                • Anton

                  Не всегда такая кнопка есть, если говорить о технологическом потоке, то одной кнопкой останавливать такой поток категорически нельзя, это не станок и не агрегат.

                  • Iiy

                    Так а что тогда делать если отваливается HMI? Либо делать что всё останавливается в случает отвала либо делать что всё работает а останавливается в случае нажатия аварийного стопа

                    • Anton

                      Речь изначально шла о том чтоб ресетить булевый тег панели, но зачем так делать, если можно сделать это все дело на уровне плк. Отдали сигнал в плк, плк его обработал и соответственно, не будет проблем если по какой то причине кратковременно отвалилась связь.

                      • Iiy

                        Та я понял. Сейчас как раз занимаюсь

                        • Anton

                          Нажал кнопку включил что то, при этом запустил таймер, и когда отработал таймер, проверил, включилось или нет, если нет выдал аварию, если пустилось отдал true в hmi, все сделать можно через структуру, а ещё лучше через шаблон структуры, если надо много таких алгоритмов.

    • Vyacheslav

      На каком ПО?

      • Vladimir

        С hmi управляющий бит (пуск/стоп ) только сэтиься, когда цикл программ ПЛК до нее доберется, он выполняет нужные действия и этот бит ресетит. Так удобно управлять с разных хми или внешних протоколов. Tia

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

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