Данный CODESYS форум содержит архивную копию русской ветви только для чтения. Для создания сообщений пожалуйста используйте актуальную международную платформу CODESYS Forum. Close

привязка физических входов\выходов

NikPavl
2017-02-05
2017-02-17
  • NikPavl

    NikPavl - 2017-02-05

    Прошу разъяснить один принципиальный момент.В среде Codesys 3.5 необходимо в конфигурации привязать больше 100 дискретных вх\вых и около 1000 вещественных входных величин.Объем большой, исчерпывающей информации для этой многозадачной среды нет почти никакой, а четкого представления о механизме привязки и обновления переменных нет.
    И так:
    1. К каким переменным привязывать вх(вых)- к глобальным, к переменным в секции var_input(var_output) программы plc_prg, к переменным в секции var пр-мы plc_prg?
    2. как все это дело будет обновляться, т.к.необходимо иметь неизменяемое состояние входов на протяжении всего цикла plc_prg, т.к.из нее, понятно, вызываются все блоки. Выходы хотелось бы устанавливать из вложенных функ.блоков(а не из plc_prg), а выходные значения должны передаваться на периферию , понятно, только после завершения plc_prg.
    3.как на обновление данных влияет параметр "задача цикла шины" в конфигурации, вкладка "соотнесение входов\выходов". Что инициализирует этот пар-р - работу драйвера, просто обновление памяти %I, %Q или чего-то еще? А параметр "всегда обновлять переменные" - какие переменные, помимо того что мы видим изменение всех %I,%Q?
    4.Если не имеет значения, к переменным какой секции привязывать - var_input(output) или var, зачем тогда в plc_prg эта секция var_input, как она работает
    Прошу прощения за большой вопрос, но бесконечные эксперименты не вносят ясности.
    Можно ли объяснить механизм работы? спасибо.

     
  • BIZON

    BIZON - 2017-02-06

    ПЛК какой? Если BergHof
    Если надо использовать встроенные дискретные выходы и входы, то необходимо в дереве в левой части CDS щелкнуть правой кнопкой мыши на названии контроллера и нажать добавить Device.
    В группе Miscellaneous выбрать IO Slot . После этого нажать кнопку Add Device.
    В списке устройств появится новое устройство IO_Slot. Необходимо
    нажать правой кнопкой мыши на первый подпункт Empty и выбрать Plug Device.
    В открывшемся окне необходимо выбрать пункт DC20XX Basic и нажать
    Plug Device. Чтобы перейти к параметрам входов и выходов, нужно дважды щелкнуть на
    модуль DC20XX Basic в дереве конфигурации. В правой части экрана откроется
    окно с настройками модуля.
    Если речь идет о входах и выходах блоков модуля, подключенных по EtherCat то на этом видео рассказано https://www.youtube.com/watch?v=j2sd2cX4fxo m

     
  • NikPavl

    NikPavl - 2017-02-06

    ПЛК Овен - СПК207. Необходимо использовать встроенный конфигуратор Codesys, т.к.большой объем данных, вручную все это опрашивать, конечно, можно, но нагляднее через конфигуратор. Как создавать конфигурацию, добавлять устр-ва (мастеров\слейвов) и т.д. - это все понятно. Возникает много вопросов, связанных с параметрами при настройке каналов, как они взаимосвязаны. В рез-те так и не понятно, как все-таки будут обновляться входы и выходы(т.е.связанные переменные) - в какой задаче, с какой частотой. Как соотнести параметр "задача цикла шины" и цикл опроса канала в devise-ах. И т.д. К чему в конце концов нужно привязываться. Ну вот. В любом случае, спасибо за ответ

     
  • BIZON

    BIZON - 2017-02-06

    На форуме ОВЕНа лучше спросить их СПК все-таки. И советую задать для начала, один коротенький конкретный вопрос. А то я лично, таки не понял о чем речь. И дальше, один за одним спрашивать.

     
  • CDSMaks

    CDSMaks - 2017-02-07

    Любая задача в CODESYS состоит из 3-х фаз.
    1. Фиксация значений входов.
    2. Выполнение программы.
    3. Установка значений выходов.

    Т.е. изменение входов во время исполнения программы никак не повлияет на привязанные переменные.
    Нет разницы, к каким переменным привязывать входы/выходы.

    NikPavl писал(а):
    Если не имеет значения, к переменным какой секции привязывать - var_input(output) или var, зачем тогда в plc_prg эта секция var_input, как она работает

    Если переменная не будет находиться в var_input, то ее невозможно будет установить из другой подпрограммы.

     
  • NikPavl

    NikPavl - 2017-02-08

    А что означает "фиксация" в этом случае - защита от записи извне в область входных данных %I или нет?
    А если мы привязываем вх\вых каналы к глобальным переменным, как в этом случае каждая задача "фиксирует" входные\выходные данные?

     
  • Igor Petrov

    Igor Petrov - 2017-02-09

    По определению любой стандартный МЭК ПЛК - это устройство синхронное. Неважно с CODESYS он или с другой МЭК средой. Правильный ПЛК обязан (сам, без участия пользовательской программы) считать все входы в образ памяти и зафиксировать их. Это делает рантайм CODESYS без нашего участия. Затем запускается пользовательская программа. Она пишется с пониманием того, что 'на ходу' в процессе ее выполнения измеренные значения входов меняться не будут. Это закон! В идеале образ входов снимается в один момент времени. Например, замерены напряжения на 3х фазах сети. В программе я четко вижу картинку как в учебнике. Либо давление и температура в трубе. Понятно, что они должны быть сняты одновременно (синхронно). Еще пример - один раз проверил что переменная не равна нулю и делаю с ней в программе все что угодно много раз, умножаю или делю, без риска получить фатальную ошибку. Если сделать так, что во время выполнения программы, кто-то еще будет менять значения входов, то это не ПЛК, а адская машина, которая рано или поздно устроит Армагеддон.
    МЭК программа вычисляет значения выходов и аналогично помещает их в образ выходов. Она завершает свой раб. цикл и отдает управление рантайму ПЛК (ОС). Он сам синхронно передает вычисленные значения на физ. выходы.

     
  • NikPavl

    NikPavl - 2017-02-10

    Здравствуйте, Игорь.
    Вы описали классическую модель «однозадачного» контроллера, здесь действительно логика работы с образом входов\выходов понятна, а тонкости не должны волновать разработчика. А в нашем же случае в Codesys 3 имеем вытесняющую многозадачность.

    Вопрос в следующем:
    - имеем проект с ,допустим, двумя задачами. Эти задачи обрабатывают входы\выходы – реализуют какую-то логику.
    - мы создаем некую задачу с более высоким приоритетом, в ней вызываем какой-то пустой POU – сл-но не опрашиваем в теле никакие переменные, привязанные к входам\выходам(хотим, например, с больше частотой опрашивать периферию)
    - в конфигурации настройках Мастера указываем эту задачу в качестве ЗАДАЧИ ЦИКЛА ШИНЫ, выбираем способ обновления Вкл.2
    Именно в этой задаче, как я понимаю, будут вызываться некие методы драйвера I/O для работы с периферией.
    Эта задача изменит области входных и выходных данных(образ памяти) и вернувшись в предыдущую задачу мы получим измененный образ входов или нет? Какую задачу в таком случае указывать в качестве ЗАДАЧИ ЦИКЛА ШИНЫ, что бы данные обновлялись корректно?

    В статье вы пишите:
    Каждая задача имеет свой собственный рабочий цикл ПЛК. Опрос 'своих' входов, вызов 'своих' программ,
    запись 'своих' выходов происходит автономно, независимо от остальных задач. При компиляции проекта
    CoDeSys автоматически распределяет входы/выходы по задачам, в которых они задействованы и передает
    соответствующую конфигурацию драйверам аппаратуры

    Выходит, что каждая задача на стадии компиляции анализирует используемые переменные, привязаны ли они к области вх\вых данных, отдает эту информацию драйверу I/O. Перед выполнением задачи корректируется под эту задачу образ входов, в конце из области выходов, к которым привязаны переменные, отдаются значения. Т.е. считываются не все входы(выходы), а только используемые. Так что ли? В таком случае, категорически нельзя использовать одну и ту же привязанную переменную в разных задачах.

    Или все это ерунда, и независимо от количества задач и т.д. всегда имеем один единый образ входов и выходов для всех, как вы и написали в предыдущем сообщ.?

     
  • Igor Petrov

    Igor Petrov - 2017-02-13

    У драйвера в/в есть свой промежуточный буфер. Обновляется он не чаще, чем требуется самой быстрой задаче. Медленная задача просто будет забирать свои входы реже. Ничего страшного не произойдет. Менять один выход в разных задачах точно не стоит.

     
  • NikPavl

    NikPavl - 2017-02-17

    Спасибо, что не оставляете без ответа наши вопросы. Тема многозадачности для контроллера сложная, поэтому формулировать лаконичные вопросы трудно.
    Из документации на другие контроллеры с codesys 2 (нас, правда, интересует codesys 3 - нет достаточно документации)становится понятно, что при связывании с областями образа %I,%Q для каждой задачи создаются свои списки ссылок на области %I,%Q и на память, где фиксируются связанные с этими областями переменные. Так вот даже после прочтения всей найденной документации остается непонятным, фиксируется ли сам образ %I,%Q или "образ образа %I,%Q" на время выполнения задачи.
    Кто в таком случае обновляет сам образ %I,%Q?

    Потом, происходит постоянная путаница с терминами. При описании процесса связывания переменных их называют входными\выходными, т.е.непременно объявленными в области var_input, var_output программы plc_prg - тогда они обновляются и фиксируются один раз и навсегда до окончания цикла задачи. А если я их объявлю глобальными или в области var и свяжу с %I,%Q - они будут обновляться по другому закону или точно также?
    Спасибо