PDA

Просмотр полной версии : ООП: plcopen-oop-boiler-demo project где - бы посмотреть ?



dorofeevms
04.12.2025, 13:16
Всем привет!
Давно меня мучает вопрос: где бы найти plcopen-oop-boiler-demo ?
Сей проект любезно упомянут в https://ftp.owen.ru/CoDeSys3/98_Books/plcopen_oop_guidelines_version_0.99_rfc_ru.pdf
Так же и в других местах нет-нет да и всплывут ссылки.
Возможно, я загоняюсь в дебри. Но очень мне нравятся идеи ООП применительно к контроллерам. Некий подобный подход я давно
мучительно пытаюсь использовать в среде CDS2.3. Там костылей и ограничений больше, но есть неумираующие проекты в этой среде.
Да и вообще любопытно посмотреть, ибо ссылки НИГДЕ не ведут к самому проекту.

Ну и если кто-либо может поделиться интересными ссылками на литературу и примеры из этой области - буду Очень признателен.

DMS

Евгений Кислов
04.12.2025, 13:18
Всем привет!
Давно меня мучает вопрос: где бы найти plcopen-oop-boiler-demo ?
Сей проект любезно упомянут в https://ftp.owen.ru/CoDeSys3/98_Books/plcopen_oop_guidelines_version_0.99_rfc_ru.pdf
Так же и в других местах нет-нет да и всплывут ссылки.
Возможно, я загоняюсь в дебри. Но очень мне нравятся идеи ООП применительно к контроллерам. Некий подобный подход я давно
мучительно пытаюсь использовать в среде CDS2.3. Там костылей и ограничений больше, но есть неумираующие проекты в этой среде.
Да и вообще любопытно посмотреть, ибо ссылки НИГДЕ не ведут к самому проекту.

Ну и если кто-либо может поделиться интересными ссылками на литературу и примеры из этой области - буду Очень признателен.

DMS

Добрый день.
Ссылка на упомянутый вами проект:
https://www.plcopen.org/download_file/force/84d9bd3d-1e38-4701-a3aa-929791b367a7/342/

Забодай тебя комар
05.12.2025, 11:09
Не могу привыкнуть к стилю изложения, принятому в "западной" литературе... Поэтому замеченные мною "нюансики" ООП в CODESYS, возможно, давно описаны (да мной не прочитано) и являются нормой, но я был неприятно удивлен:

Нет нормального механизма скрытия методов и т.п. атибут 'hide' просто исключает нечто из упоминания, но вовсе не запрещает к этому нечто доступ. Логичнее было бы "не видишь - значит, недоступно вообще".
Блок-наследник должен явно вызывать блок-родитель! Мне это представляется крайне нелогичным: для того, чтобы вызвать виртуальные (т.е. перепоределенные в наследнике) методы, надо явно вызвать SUPER^(), т.е. своего предка, в "теле" блока!


Но в остальном терпимо...

Валенок
05.12.2025, 11:28
Не могу привыкнуть к стилю изложения, принятому в "западной" литературе... Поэтому замеченные мною "нюансики" ООП в CODESYS, возможно, давно описаны (да мной не прочитано) и являются нормой, но я был неприятно удивлен:

Нет нормального механизма скрытия методов и т.п. атибут 'hide' просто исключает нечто из упоминания, но вовсе не запрещает к этому нечто доступ. Логичнее было бы "не видишь - значит, недоступно вообще".
Блок-наследник должен явно вызывать блок-родитель! Мне это представляется крайне нелогичным: для того, чтобы вызвать виртуальные (т.е. перепоределенные в наследнике) методы, надо явно вызвать SUPER^(), т.е. своего предка, в "теле" блока!


Но в остальном терпимо...
В чем нелогичность п. 2?

Забодай тебя комар
05.12.2025, 15:02
В чем нелогичность п. 2?

ООП подразумевает, что НЕпереопределенные методы вызываются такими, как есть. Метод "тела блока", в наследнике я явно не переопределяю, следовательно, должен выполняться метод предка.

В CODESYS реализовали блок так, что "тело" не имеет явного метода, и тогда получается, что объявляя наследника я автоматически переопределяю его тело...

Валенок
05.12.2025, 17:44
ООП подразумевает, что НЕпереопределенные методы..
1.ООП НЕподразумевает [обязательное наличие] "дефолтного" метода (типа тела ФБ)
2.МЭК подразумевает наличие ФБ, которое вызывается как ЭкземплярФБ(..)


..В CODESYS реализовали блок так, что "тело" не имеет явного метода...
Да. Выше. И самое главное - перед КДС3 были 2.3, 2 - и там есть вызов как ЭкземплярФБ(..). С какого это должно пропасть в КДС3? Потому что что-то кому-то там непонравилось?

Хотите "чистоты" ООП? Дык все просто как 2*2 - НЕ используйте этот дефолт. Исполнение в виде:

;
решит Ваши (и только Ваши) проблемы

Забодай тебя комар
06.12.2025, 08:57
Я всего лишь высказал мнение о моментах, которые меня удивили. Сравнивать с CODESYS других версий, кроме 3.5, у меня возможности нет, я могу сравнивать только с ООП других языков.

Валенок
06.12.2025, 19:34
я могу сравнивать только с ООП других языков.
В других ООП есть "дефолтный" метод с вызовом в виде ЭкземплярКласса(..)?

Забодай тебя комар
07.12.2025, 19:40
В других ООП есть "дефолтный" метод с вызовом в виде ЭкземплярКласса(..)?
На сколько мне известно, нет.

Валенок
07.12.2025, 21:54
А в МЭК есть. В чём нелогичность? и МЭК остался, и никто не заставляет юзать этот "дефолт"

dorofeevms
19.12.2025, 14:48
Был немного занят.. выпал из общения.
Во-первых, спасибо
Ссылка на упомянутый вами проект:
https://www.plcopen.org/download_file/force/84d9bd3d-1e38-4701-a3aa-929791b367a7/342/
Согласен с

и МЭК остался, и никто не заставляет юзать этот "дефолт"
Долго изучал пример.
Опыт использования ООР в КДС3 скромный. Проект - пример показался мне душераздирающе запутанным.
А самое печальное, что в кдс3.5sp16 он , почему-то, собирается с 52 ошибками (глубоко не копал). Ну да ладно - меня интересует организация кода и приемов управления ИМ и ошибками с ООП.
А нет ли где (у кого) менее сложного варианта примера применения ООП ? Что интересно - наследование и использование интерфейсов (implements...), возможно с примером композиции.
Был бы благодарен за некий "учебно-познавательный" материал, скоро придется покинуть уютный мир кдс2.3.

dorofeevms
24.12.2025, 12:35
Добыл pdf "Wolfgang Horn, Michael Braun. Object-oriented Programming in SIMOTION".
Пока читаю с упоением.
Мои вопросы в этой теме исчерпаны.