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

Тема: дискретизация

  1. #1

    По умолчанию дискретизация

    Здравствуйте.

    Решил-таки более-менее освоить CoDeSys и начал с самого простого - сложил в FBD две синусоиды (вроде как сигнал и помехи). Потом добавил отрицательную обратную связь, сначала подобрав её коэффициент в привычном Симулинке.

    И тут появились две проблемы.
    Первая - это дискретизация. Поскольку сигналы не непрерывные, то с увеличением частоты он всё больше превращаются из синусоиды в "пилу".
    Вторая - после введения обратно связи (схема во вложении) сигнал на выходе "сошёл с ума" - скачет как бешеный, доходя до ограничений, заданных типом переменной. Экспериментально подобрал, что такое начинается со значения коэффициента ОС, равного примерно 0,9; если меньше, то ещё более-менее похоже на правду.

    Как быть с этим всем? Как уменьшить шаг дискретизации, и что не нравится в обратной связи?

    PS Ещё один мелкий вопрос - как связаны "сэмплы" в трассировке с реальным временем?

  2. #2

    По умолчанию

    Сэмплы в трассировке по умолчанию идут в каждом рабочем цикле ПЛК. Можно задать по времени. Но тут надо не выпускать из головы теорему Котельникова. Иначе замеры пойдут относительно редко и после сплайн интерполяции в трассировке будет бред. Чаще чем раз в цикл мерить ничего в ПЛК нельзя вообще. По-хорошему частота цикла ПЛК должна быть раз в 10 выше чем частоты обрабатываемых сигналов, тогда вообще никаких проблем. В режиме встроенного эмулятора CoDeSys лучше не рулить параметры трассировки, а подзатянуть время модели. Т.е. делайте приращение аргумента синусоиды с меньшим раз в 10 шагом.
    Встроенный эмулятор CoDeSys удобен в работе, но тут надо думать в рабочих циклах, а не в миллисекундах предполагая что реальные времена мы получим только в реальном ПЛК. Эмулятор шагает по тикам таймера Windows, очень примерно раз в 55 мс и время цикла тут может сильно плавать. Просто считаем в циклах ПЛК: пусть период синусоиды N циклов, трассировка в N раз чаще, интегратор столько то циклов и т.д. Это стандартная практика при программировании ПЛК. На трассировке все будет красиво. В ПЛК затем выставим какое надо время цикла и тоже все будет красиво и синхронно.
    Если же вдруг надо сразу с реальным временим (большие многозадачные системы, со сложной взаимосвязью задач) то вырубаем встроенный эмулятор и запускаем CoDeSys SP RTE. Все будет четко стабильно в микросекундах. Но тут уже надо разбираться с конфигуратором задач, его настройкой и наукой программирования систем с вытесняющей многозадачностью . Это штуки для очень продвинутых программистов.

  3. #3

    По умолчанию

    Большое спасибо, очень доходчиво.

    Очень хотелось бы попросить вас ещё кое-что разъяснить. Дело в том, что мне нужно построить алгоритм управления тиристорным выпрямителем-регулятором. Это не такая простая система, как кажется: у неё около десяти контролируемых параметров - и почти все из них электрические. Соответственно, меняются они с частотой 50 Гц (это минимум, в переходных процессах в разы больше). Сами тиристоры, нагрузку и сеть смоделировать непосредственно в CoDeSys представляется задачей весьма непростой, а главное, излишней - их функция чисто отладочная. Эти модели уже существуют в среде Матлаб-Симулинк; связать CoDeSys и Simulink можно, как мне уже здесь любезно подсказали, с помощью PLC Link.
    Для совместной работы можно было бы задать в Симулинке такой же шаг по времени, как в CoDeSys, но получится бессмыслица - за 55 мс пройдёт два периода сигнала. Искусственно снижать частоту напряжения в модели нельзя - она станет совершенно неадекватной.

    Есть ли какой-то выход, кроме описанного вами "для очень продвинутых программистов"?

  4. #4

    По умолчанию

    Для меня это тоже вопрос, но с обратной стороны. Со стороны CoDeSys нет никакой проблемы сделать реальное время (РВ). Можно запустить SP RTE на компьютере, задать ему время цикла 1 мс и все будет четко. Можно подключить ПЛК Овен и тоже будет РВ. Но Симулинк то в РВ считать не умеет. В нем есть искусственное (не РВ) модельное время. Шаг может быть и 1 мс, но это совсем не означает, что компьютер выполнит все вычисления за 1 мс. Он может считать 5 минут, затем нарисует красивые картинки с шагом 1 мс. Графики на осциллографах Симулинка ползут медленно, хотя на шкале и могут стоять микросекунды. Это не РВ. В ПЛК все иначе. Если мы ему задали цикл 1 мс, то он реально будет считать за 1 мс. Поэтому, PLC Link должен исхитряться запуливать данные в ПЛК, затем тормозить, чтобы синхронизировать это с Симулинком. Либо, не использовать РВ в ПЛК, а просто брать его рабочий цикл и считать его равным шагу модели. Не знаю, как это реально сделано внутри PLC Link. Можно разработчиков попытать. Попробуйте с SP RTE, возможно все будет как надо. Из CoDeSys не надо связываться Симулинком. Наоборот, запускаем SP RTE, затем настраиваем PLC Link и он далее сам все делает. Но, не уверен, что это работает в демо версии.

  5. #5

    По умолчанию

    Так-так-так, а можно чуть поподробнее?

    Цитата Сообщение от Игорь Петров Посмотреть сообщение
    Можно запустить SP RTE на компьютере, задать ему время цикла 1 мс
    Как это сделать? В CoDeSys в настройках целевой платформы поставил SP RTE, но при попытке подключения выдаёт "Ошибка подключения (#0)". И как задать время цикла?

    запускаем SP RTE, затем настраиваем PLC Link и он далее сам все делает. Но, не уверен, что это работает в демо версии.
    У демо-версии ограничение только по времени (месяц), так что всё нормально. С настройками PLC Link тоже разобрался, но в хелпе к нему есть строчка:
    Download your controller to the PLC and run it.
    Вот с "run" и проблема.
    Последний раз редактировалось Киналь; 24.11.2009 в 13:36.

  6. #6

    По умолчанию

    Правильно CoDeSys дает ошибку, поскольку контроллера то и нет. С реальным ПЛК надо включить его в розетку и подключить кабелем к PC.
    С SP RTE так: в меню Пуск Windows, в папке CoDeSys, находим и жмем Start CoDeSys SP RTE. На панели задач Windows (справа внизу) появляется иконка с молнией. Сервис запущен. Щелкаем по ней. В выпадающем меню даем команду Start System. Выскочит диалог с предупреждением о демо и нужде перезапустить через час. Жмем ОК. Контроллер запущен. Можно с ним связываться из CoDeSys. В нем задаем SP RTE в настройках целевой программы, в параметрах связи локалхост (если все на одном PC). Ну и все. Теперь попробуйте в CoDeSys с нуля написать простейшую программу на ST типа X := X +1; и запустить ее в SP RTE.

    Далее надо будет почитать в хелпе CoDeSys на тему конфигурация задач, циклические задачи. Еще подробнее тут и совсем уж в недра тут

  7. #7

    По умолчанию

    Большое спасибо, всё получилось! Программу в SP RTE благополучно загрузил, она запустилась, трассировка с хорошей дискретизацией - всё прекрасно)

    Проблема теперь с PLC Link'ом, который не желает запускать уже свой собственный Gateway, но это уже другой вопрос.

  8. #8

    По умолчанию

    нет, всё оказалось не так уж хорошо; так и не нашёл, как в Sp Rte задать время цикла 1 мс; есть только выбор между 50, 100 и 200 мкс (не мс), который ничего не меняет. или там не напрямую это задаётся?

  9. #9

    По умолчанию

    Затрудняюсь сказать где в CoDeSys есть такой выбор, но уж точно не в конфигураторе задач. Там простой ввод, никакого выбора. В хелпе это детально есть + выше давал ссылку на статью с детальными примерами. См. рис. 4.

  10. #10

    По умолчанию

    Ещё раз спасибо - нашёл. оказалось, нужно в конфигурации задач создать новую циклическую задачу с интервалом 1 мс и добавить туда Plc_prg(); настройки самого Sp Rte ни при чём.

    Хотя 1 мс всё равно много - хороший результат, по опыту симулинка, даёт шаг в 5 мкс. Можно ли этого как-то добиться?

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

Ваши права

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