Страница 1 из 5 123 ... ПоследняяПоследняя
Показано с 1 по 10 из 47

Тема: Использование ООП в CODESYS V3.5

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию Использование ООП в CODESYS V3.5

    Добрый вечер!

    Подскажите, где есть по ООП на codesys почитать? И про архитектуру среды исполнения. В документации, которая на сайте мало про это, можно сказать ничего. По крайней мере я не смог найти...

    желательно на русском языке

  2. #2

    По умолчанию

    А зачем тебе ООП-то тут? Не надо его сюда, там же всё отлично через FB делается.
    Хочешь я тебе вот проект скину на посмотреть? ))

  3. #3
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,062

    По умолчанию

    Цитата Сообщение от turkish945 Посмотреть сообщение
    Добрый вечер!

    Подскажите, где есть по ООП на codesys почитать? И про архитектуру среды исполнения. В документации, которая на сайте мало про это, можно сказать ничего. По крайней мере я не смог найти...

    желательно на русском языке
    На русском по этим темам фактически ничего нет.

    1. Лучшая (и, собственно, единственная мне известная) книга про реализацию ООП в контексте МЭК 61131-3 - это Michael Braun, Wolfgang Horn.
    Object-Oriented Programming with SIMOTION. Fundamentals, Program Examples and Software Concepts According to IEC 61131-3

    Она, конечно, не про CODESYS - но так как и SIMOTION, и CODESYS базируются на МЭК 61131-3 - то отличий не очень много.
    2. Эта документация предоставляется только производителям оборудования и обычно не выкладывается в свободный доступ. Но если погуглить "codesys control win v3 manual" - то кое-что найти можно.

  4. #4

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    На русском по этим темам фактически ничего нет.

    1. Лучшая (и, собственно, единственная мне известная) книга про реализацию ООП в контексте МЭК 61131-3 - это Michael Braun, Wolfgang Horn.
    Object-Oriented Programming with SIMOTION. Fundamentals, Program Examples and Software Concepts According to IEC 61131-3

    Она, конечно, не про CODESYS - но так как и SIMOTION, и CODESYS базируются на МЭК 61131-3 - то отличий не очень много.
    2. Эта документация предоставляется только производителям оборудования и обычно не выкладывается в свободный доступ. Но если погуглить "codesys control win v3 manual" - то кое-что найти можно.
    Спасибо, посмотрю.

  5. #5

    По умолчанию

    Цитата Сообщение от Cs-Cs Посмотреть сообщение
    А зачем тебе ООП-то тут? Не надо его сюда, там же всё отлично через FB делается.
    Хочешь я тебе вот проект скину на посмотреть? ))
    Скидывай, посмотрю.

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

    Вот, например, есть у меня въездные ворота на участок. Как сущность они имеют следующие управляющие входы:
    - Enabled (вкл/выкл - выход ПЛК),
    - ButtonEnabled (уличная кнопка для управления - вкл/выкл - выход ПЛК),
    - Open (команда открыть - выход ПЛК),
    - Close (команда закрыть - выход ПЛК);

    и следующие выходы:
    - isOpen (ворота открыты - вход ПЛК),
    - isClosed (ворота закрыты - вход ПЛК),
    - Opening (оба входа ПЛК false, был true isClosed),
    - Closing (оба входа ПЛК false, был true isOpen).


    На ООП я бы создал класс со следующими полями: Enabled, ButtonEnabled, isOpen (readonly), isClosed (readonly), методами: Open и Close и событиями: OnOpening, OnClosing, OnOpen, OnClose, а в вызове конструктора передал бы адреса портов ПЛК. И все, "черный ящик" готов.

    Ну, думаю, я и ФБ так создам, накидал выходы: Enabled, ButtonEnabled, Open, Close и выходы: isOpen, isClosed, Opening, Closing и тут понял, что порты ПЛК я никак не завязываю внутри блока и черный ящик не получается. Посмотрел, вроде действительно внутри блока обратиться к портам нельзя (я не нашел как). Можно добавить в ФБ еще 4 входа, для портов ПЛК, тогда более менее что-то получается, но все равно не выходит черного ящика, да и не красиво это....

    Может быть я просто еще не научился думать в парадигме ФБ и что-то делаю не так?
    Последний раз редактировалось turkish945; 27.04.2020 в 18:44.

  6. #6

    По умолчанию

    Или исключить из арсенала ПЛК1хх 😁

    На самом деле ООП на больших проектах выручает. У меня прямо сейчас создается система где 3 частотника пчв, 3 instart и 3 упп. Много чего еще, но на примере этих - по сути это 3 насосные станции, они управляются все по modbus, команды и т.д. у всех разные. Но глобально логика общая работы. ООП в данном ключе отлично подходит.

  7. #7

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    разницы особой нет как писать через ООП или обычным способом для КДС, чем больше пользоваться тот и становиться по ощущениям более удобным, а суть не меняется. Но лучше закончить с ФБ, потому как если встанет задача творить на плк1хх сериях, то там нет ООП
    Расскажите, как правильно решить описанную выше задачу с помощью FB?

  8. #8

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    для начала, описание задачи меня не устраивает. Для чего писать что входы сущности это выходы плк, а выходы это входы, чтобы запутать всех? Выложите код, на чем Вы там уверенно пишите и по нему можно будет вернуть код и в языках КДС. И про порты тоже стоит объяснить, что Вы имеете ввиду, потому что по документации это инструменты связи с периферией, непосредственно управлением исполнительными механизмами они не осуществляют
    Весь код я пока не готов написать, потому что некоторые идеи еще не продуманы до конца, я пока представляю скелет в терминах ООП, который наполняется функционалом по мере реализации идей. Да и мне не требуется, чтобы кто-то полностью за меня решил задачу. Я лишь хочу понять некоторые вещи.

    Могу попробовать описать задачу еще раз, другими словами.
    Есть автоматические ворота, у них есть несколько входов для управления: вкл/выкл, открыть, закрыть. Так же у них есть два выхода, сигнализирующих о достижении воротами конечных положений открыто и закрыто соответственно. Все это подключено к 5 портам ПЛК.
    Соответственно нужно иметь возможность этими воротами управлять: включать/отключать, открывать, закрывать, обрабатывать сигналы о достижении конечных положений.

    Цель не просто написать программу, которая будет связывать одно с другим по определенному алгоритму, а сделать это в виде самостоятельной сущности, черного ящика, отдельного блока. Чтобы при программировании сценариев управления воротами абстрагироваться от "внутренностей" и железа и предоставить "пользователю", готовый и полностью функциональный инструмент.

    Как я понимаю в этом плане ФБ в первом приближении мне подходит.

    На текущий момент не понятно следующее:
    1. Есть ли у него что-то типа конструктора? Хочу инициализировать параметры. Можно ли как-то передавать при инициализации номера портов, с которыми он будет уже сам работать. Если такого нет, как это обычно делается? Могу ли я как-то обращаться к портам (или другому оборудованию) из ФБ?
    2. ФБ потом вставляется в программу, которая "крутится" в рамках задачи с определенным временем цикла исполнения. И тут вот что не понятно. Есть, например, элемент F_TRIG, он действительно будет срабатывать по заднему фронту сигнала? Или это будет приурочено к следующему циклу программы? Или, например, таймер, установлен на 50 мс, а цикл задачи, в которой крутится программа с этим блоком, равен 200 мс, как это будет работать? В момент срабатывания таймера будет осуществляться переход к программе или это будет приурочено к следующему циклу программы?
    3. Вопрос алгоритмического характера. На входе есть два параметра: isOpen и isClosed (сигналы конечных положений ворот), на выходе нужно получить два сигнала: Opening и Closing, которые true только во время открывания/закрывания ворот, в остальное время false. Как это сделать в виде FB? Мне удалось сделать схему, которая для каждого выхода использует по одному F_TRIG и R_TRIG, один AND и один SR, но мне кажется это слишком громоздко для такой простой вещи. По крайней мере с использованием ООП это делается гораздо проще.

    пока все

    Заранее спасибо.
    Последний раз редактировалось turkish945; 28.04.2020 в 21:31.

  9. #9

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    200мс программы не крутятся, если их не заставить это сделать, но это уже зависит от адекватности программиста
    Объясните, почему 200 мс не крутится? Если для задачи не требуется чаще, зачем крутиться чаще?

    Цитата Сообщение от capzap Посмотреть сообщение
    ЗЫ реализация Opening := упр_сигнал_на_открытие XOR обратная_связь_от_от_концевика AND упр_сигнал_на_открытие
    Так работать не будет, я забыл упомянуть, что управляющий сигнал на открытие/закрытие это короткий импульс, а не импульс на все время открывания/закрывания. И еще второе, сигнал на открытие может быть подан не через ПЛК, а, например, с пульта напрямую на блок управления воротами и мы об этом сможем узнать только косвенно по тому, что изменилось состояние концевика, соответственно управляющий сигнал на открытие в этих целям мы использовать не можем.

    Цитата Сообщение от capzap Посмотреть сообщение
    Вы даже терминологию не правильно используете. Понятия isOpen/isClose должны вызываться из сущности, которая должна ответить на вопрос в каком состоянии находится объект, а не быть входами
    Ничего я не путаю. Как я говорил, я попытался это реализовать с помощью ФБ на CFC, получилось громоздко и я решил оформить отдельным ФБ, у которого это как раз входы, а выходы Opening и Closing.


    Цитата Сообщение от capzap Посмотреть сообщение
    так покажите.
    В ООП можно сделать, чтобы свойство класса менялось через вызов функции set, в которой можно было бы установить Opening в нужное значение, а заодно еще кое что сделать. Например так: property isOpen: boolean read isOpen write Set_isOpen;


    Извините, если мои вопросы кажутся глупыми, но ведь я только в самом начале. И не только спрашиваю тут, но и читаю материалы.

  10. #10

    По умолчанию

    Цитата Сообщение от RV9WFJ Посмотреть сообщение
    На самом деле ООП на больших проектах выручает. У меня прямо сейчас создается система где 3 частотника пчв, 3 instart и 3 упп.
    Т.е. Вы используете полиморфизм? Без него ООП в принципе мало нужен.

Страница 1 из 5 123 ... ПоследняяПоследняя

Похожие темы

  1. Использование УЗС-1
    от Сергей 2909 в разделе Эксплуатация
    Ответов: 0
    Последнее сообщение: 31.05.2018, 07:56
  2. Ответов: 3
    Последнее сообщение: 05.03.2015, 14:01
  3. ПЛК 110, использование RS-232
    от =MiX@$= в разделе ПЛК1хх
    Ответов: 18
    Последнее сообщение: 14.10.2011, 14:26
  4. Использование АС4
    от alex_sinjawin в разделе Сетевые технологии
    Ответов: 2
    Последнее сообщение: 10.11.2009, 18:31
  5. Использование CoDeSys Service Tool (CST).
    от Юрий_1900 в разделе ПЛК1хх
    Ответов: 1
    Последнее сообщение: 03.09.2009, 09:49

Ваши права

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