Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 17

Тема: ПЛК 100+МВА8. Ошибка связи при увеличении длины программы.

  1. #1

    Unhappy ПЛК 100+МВА8. Ошибка связи при увеличении длины программы.

    добрый день! я пишу весовой дозатор для РБУ на ПЛК.
    Конфигурация пока следующая: ОВЕН ПЛК 100 R-L + МВА-8. В качестве задатчиков массы использую 4 источника 4-20 мА, подключенных к МВА. Всё было хорошо, пока программа не начала увеличиваться в размерах. Буквально вчера начал добавлять защиты разные и в итоге заметил, что при запуске программы в PLC Configuration постоянно выпадает ошибка связи 81 (моргает то 0 то 81). Весь вечер сидел думал. Создается такое впечатление что весь код программы не успевает выполниться за программный цикл и контроллер просто не успевает совершать обмен по Modbus, т.к. при удалении любой части программы эта ошибка пропадает... Может кто-то сталкивался с подобной проблемой? Подскажите в чем моя ошибка?

  2. #2

    По умолчанию

    Вы абсолютно верно описали явление. Надо либо оптимизировать код программы (это правильно), либо увеличивать цикл ПЛК (временное решение)

    Для оптимизации в CoDeSys есть понятие задача и событие

  3. #3

    По умолчанию

    А можно поподробнее про задачи, события и оптимизацию? Желательно с примером программы.

  4. #4

    По умолчанию

    Предположим, у вас в программе есть 3 PID-регулятора.
    Каждый из них пользуется данными с датчика, опрашиваемого 10 раз в секунду.

    Если Вы вставите вызов всех 3 PID в одну задачу - и будете вызывать её 1000 раз в секунду: код пидов будет выполнятся в 100 раз больше по процессорному времени, чем реально надо.

    Теперь соптимизируем:
    Создадим 3 задачи, в каждую поместим по вызову PIDа.
    Вызов каждой задачи свяжем с событием - обновлением данных с соответствующего датчика.
    В результате код пидов будет вызываться только тогда, когда нужно, и "пустая" нагрузка на ПЛК сократится в десятки (а то и в 100) раз.

    Конкретная реализация - рекомендую для начала прочитать руководство по CoDeSys 2.3 на русском языке (см. прилагаемый диск). Там достаточно обстоятельно механизм создания и типы задач разобраны.

  5. #5

    По умолчанию

    А можно всё-таки примерчик программы, где активно использются задачи и события (хотя бы с теми же ПИДами)? В руководстве почитал, но не совсем понятно, с примером гораздо проще было бы

  6. #6

    По умолчанию

    Завтра постараюсь выложить.

  7. #7

    По умолчанию

    Цитата Сообщение от HeKPoMaHT Посмотреть сообщение
    А можно всё-таки примерчик программы, где активно использются задачи и события (хотя бы с теми же ПИДами)? В руководстве почитал, но не совсем понятно, с примером гораздо проще было бы
    простой пример во вложении.
    3 программы, прибавляющие 1 в каждом цикле.
    первая срабатывает 1 раз в секунду.
    вторая выполняется так быстро, как это возможно.
    третья срабатывает один раз при каждом замыкании 1 дискретного входа ПЛК.
    Посмотрите, все основные принципы там хорошо видны.

    пример task config.zip

  8. #8

    По умолчанию

    Спасибо за пример! Это мне понятно. А как сделать чтобы подпрограмма работала допустим 10 раз в секунду циклически, но при этом не постоянно, а только когда установлен какой-либо флаг? Тоесть если флаг истина, то подпрограмма работает 10 раз в секунду, а если ложь, то она не работает вовсе.

  9. #9

    По умолчанию

    Пишите отдельно программу (она будет подпрограммой).
    В основной программе отслеживаете флаг и запускаете таймер.
    Если флаг тру и таймер сработал - вызвать подпрограмму (первую программу с именем "не PLC_PRG").

  10. #10
    Пользователь
    Регистрация
    18.03.2007
    Адрес
    г. Краснодар
    Сообщений
    233

    По умолчанию

    Цитата Сообщение от Филоненко Владислав Посмотреть сообщение
    Предположим, у вас в программе есть 3 PID-регулятора.
    Каждый из них пользуется данными с датчика, опрашиваемого 10 раз в секунду.

    Если Вы вставите вызов всех 3 PID в одну задачу - и будете вызывать её 1000 раз в секунду: код пидов будет выполнятся в 100 раз больше по процессорному времени, чем реально надо.

    Теперь соптимизируем:
    Создадим 3 задачи, в каждую поместим по вызову PIDа.
    Вызов каждой задачи свяжем с событием - обновлением данных с соответствующего датчика.
    В результате код пидов будет вызываться только тогда, когда нужно, и "пустая" нагрузка на ПЛК сократится в десятки (а то и в 100) раз.

    Конкретная реализация - рекомендую для начала прочитать руководство по CoDeSys 2.3 на русском языке (см. прилагаемый диск). Там достаточно обстоятельно механизм создания и типы задач разобраны.
    Вопрос.
    Если сигнал с датчика не меняется, то ПИД не вызывается. Что произойдет если мне надо изменить уставку. Как будет вести себя ПИД.

Страница 1 из 2 12 ПоследняяПоследняя

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •