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

Тема: СПК207 и прерывания

  1. #1

    По умолчанию СПК207 и прерывания

    Всем доброго времени суток. Скажите пожалуйста, есть ли в СПК207 возможность организовать вызов подпрограммы из основной программы по событию?
    Вкратце о проблеме. Знакомые принесли данный девайс для того чтобы попробовать сделать на нем несложную систему управления климатом в цеху по выращиванию бройлеров. С ПЛК до этого не сталкивался. Только Arduino, AVR.
    Весь алгоритм работы состоит в том чтобы поддерживать требуемую температуру, воздухообмен и влажность в помещении. Проблем не было и все хорошо эмулировалось в Codesys V3.5 SP5 Patch5, пока я не столкнулся с задачей калибровки вентиляционных форточек.
    Как я это вижу
    Из основной программы, допустим MAIN_PRG, которая бегает по кругу с периодом 10мс требуется вызвать другую программу PLC_PRG, при помощи которой происходит калибровка форточек, так чтобы действие основной программы прекратилось и возобновилось после окончания калибровки.
    Привод форточек состоит из двигателя постоянного тока на 24В, двух концевиков и в качестве обратной связи оптический датчик в виде диска с прорезями.
    Т.к. на все концевики в модуле дискретного ввода мне не хватило места я использовал подключение двух концевиков к одному входу дискретного ввода.
    Для этого я набросал алгоритм калибровки следующим образом.
    Если нажат концевик, то запускаем эмулятор либо движения окна либо его неподвижности. Эмулятор управляется пока только кнопкой верхнего концевика в визуализации и если верхний концевик был нажат, то приводим в движение форточки переменной dirDown при помощи PT таймера delayer в течение 4 секунд. Если значение счетчика из функционального блока COUNT при этом изменилось, то значит до этого был нажат верхний концевик и движемся дальше до касания с нижним, а далее уже не интересно.
    Интересно другое(и как мне кажется собака зарыта тут, ну еще может и в функциональном блоке):

    WHILE dirDown=TRUE DO //Пока выход счетчика TRUE
    HANDLER(in_fb:=TRUE, out_fb=>counter); //Включить эмулятор работы двигателя
    delayer(IN:=TRUE, PT:=T#4S, Q=>dirDown, ET=>); //Запустить счетчик на 4 секунды
    END_WHILE

    Счетчик, обернутый в цикл WHILE дает мне возможность задержать сигнал на 4 секунды, если не использовать WHILE, то счетчик не работает.
    Вот так вот зависает контроллер при попытке запустить алгоритм из конфигурации задач по событию.

    Рис.1 Собственно само событие
    7.png
    Рис.2 Функциональный блок COUNT
    6.png
    Рис. 3 Окно визуализации
    5.png
    Рис.4 Основная программа
    4.png
    Рис. 5, 6, 7 Программа калибровки
    1.png
    2.png
    3.png

    Помогите пожалуйста решить эту проблему. Если не в лоб, то какими либо обходными путями в виде таймеров, счетчиков и т.д.
    Заранее всех благодарю.
    С Уважением, Алексей.

  2. #2
    Пользователь Аватар для murdemon
    Регистрация
    03.02.2014
    Адрес
    Санкт-Петербург
    Сообщений
    844

    По умолчанию

    А что необходимо делать форточками? температуру поддерживать? И как я понял там только сигналы открыть/закрыть? (тут можно тогда такую же логику как и у КЗР в системе отопления и все будет работать)
    Dmitriy Murashov
    SPS Software Engineer Automation Engineering RUS

  3. #3

    По умолчанию

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

  4. #4
    Пользователь Аватар для murdemon
    Регистрация
    03.02.2014
    Адрес
    Санкт-Петербург
    Сообщений
    844

    По умолчанию

    как вариант использовать МВ110-16ДН в режиме счета импульсов. (как я понимаю число импульсов на полное открытие и закрытие известно) При начальном включении двигать форточку до датчика закрыт и после чего двигать пока счетчик не досчитает до определенного числа импульсов. Если закрываем то счет вести обратно. Только по 485 скорость обмена порядка 20мс на 1 переменную надо брать из этого расчета. (это зависит насколько быстро закрывается форточка если сек за 10 или больше то проблем сильных с ошибкой позиции не будет) Могу помочь в разработке ПО (напиши в личку)
    Dmitriy Murashov
    SPS Software Engineer Automation Engineering RUS

  5. #5

    По умолчанию

    Вся калибровка состоит в том, что нужно довести форточку до крайнего положения, обнулиться, довести до другого крайнего положения. Посчитать количество импульсов и вернуть форточку на место. Но это занимает много времени, если учитывать что ПЛК крутит программу раз в 10мс. Поэтому программа на СПК виснет при попытке вызова калибровки а в кодесисе все работает.

  6. #6
    Пользователь Аватар для murdemon
    Регистрация
    03.02.2014
    Адрес
    Санкт-Петербург
    Сообщений
    844

    По умолчанию

    тут идеологии программы немного другая.. надо учить мат часть. А как считаете импульсы как счетчик надеюсь? или просто изменения входа в ПО считаете?
    Dmitriy Murashov
    SPS Software Engineer Automation Engineering RUS

  7. #7

    По умолчанию

    Спасибо за наводку и за предложение, я кстати уже думал об счётчик в моудле ввода. Нужно не с эмуляторами возиться я так понял, а с реальным контроллером работать.
    Не хочу вас сильно вопросами загружать, но мне все таки интересно, если допустим я нажал на калибровку и контроллер подал команду на закрытие форточек. Дальше идёт опрос. Вы говорите он занимает 20мс. Значит он один раз опросил, после этого выполняются какие то там команды, основной цикл программы закончился. Далее программа доходит до этого условия и ещё раз опрашивает, и если значение становится равным например 256, то убрать сигнал с привода?

  8. #8

    По умолчанию

    Считаю импульсы пока функциональным блоком ctu.

  9. #9
    Пользователь Аватар для murdemon
    Регистрация
    03.02.2014
    Адрес
    Санкт-Петербург
    Сообщений
    844

    По умолчанию

    Ну в общем случае да. Если проехал отправлено датчика до датчика и насчитал 100отсчетов. Потом закрыл полностью. И чтобы открыть. Надо сигнал на открытие и как досчитал до 20 это будет 20% то убрать стонал открытия. И запомнить относительную позицию где сейчас.
    Dmitriy Murashov
    SPS Software Engineer Automation Engineering RUS

  10. #10

    По умолчанию

    Может кто поправит, но у меня отложилась в памяти рекомендация от сотрудников ОВЕН: не рекомендуется устанавливать приоритет в конфигурации задач равным нулю.

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

Похожие темы

  1. ПЛК100 и внешние прерывания по входам
    от Malyshevsergey в разделе ПЛК1хх
    Ответов: 13
    Последнее сообщение: 28.10.2014, 20:25
  2. плк110-32.К и прерывания таймера
    от Goga2000 в разделе ПЛК1хх
    Ответов: 5
    Последнее сообщение: 04.07.2014, 22:57
  3. Прерывания в CoDeSYS
    от Евгений Мотренко в разделе ПЛК1хх
    Ответов: 6
    Последнее сообщение: 12.12.2007, 10:47

Ваши права

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