PDA

Просмотр полной версии : ООП в CODeSys_v3



kao
05.02.2014, 18:52
Добрый день. Для реализации своей задачи решил воспользоваться нововведениями CoDeSys, а именно ООП. Задачка заключается в отображении и изменении на панели СПК207 задания частоты частотника VFD Delta. Как известно, в этих частотникак, запись и чтение частоты F (протокол Modbus) происходит в разных регистрах, поэтому организовал ФБ "PCh_VFD" на входы которого планировал завести регистры чтения частоты, выходы - на регистры записи частоты (все типа word), а в теле программы и визуализации планировал обращаться уже к свойству ФБ частота "F" типа real (между входами/выходами ФБ и его свойством организовал преобразование word_to_real и обратно).
Однако, столкнулся с таким моментом: невозможно привязать к свойству "Text variable" визуального элемента свойство экземпляра функционального блока (в моём примере, почему-то?, св-во "F" не видимо, однако, локальные переменные ФБ rF, fH, которые должны быть доступны только внутри ФБ хорошо видны в ассистенте ввода). Кстати, очень не хватает вертикальной полосы прокрутки в ассистенте ввода (место выделено фиолетовым).
В общем, пока не сообразил, как сделать, чтобы одна и та же переменная "частота F" читалась и записывалась в разных регистрах.

capzap
05.02.2014, 19:44
:) Вам лучше в этой ситуации не выпендриваться или используете вместо свойства метод, либо заведите еще одну отдельную переменную, в которую будете постоянно передавать значение свойства

Евгений_Томск
06.02.2014, 19:01
ООП !!! Что это такое, и, действительно ли нужная и полезная штука ?
Методы,классы,свойства...Как-то не сразу всё доходит. Или их назвать по-другому,и
станет понятнее. В чём отличие от функционального блока с определёнными входными
и выходными переменными?

capzap
06.02.2014, 19:25
ооп необходимо для сокращения кода однотипных блоков, один раз написал, работает у всех, хотя и в содержании блоков могут быть индивидуальные особенности

Лучше конечно почитать про ООП у языков высокого уровня, например по Яве

Евгений_Томск
06.02.2014, 19:49
Наверно как-то так, но всё равно не сильно понимаю. Основное в этом подходе, сделать комфортнее работу
программисту или облегчить скомпилированный код программы для уменьшения нагрузки на ПЛК? И,например,если напишу классически
функциональный блок с множеством входов,где число, поданное на первый вход будет задавать тип действий (01-управлять светом,02-управлять
температурой,03-охраной),на второй вход подам число - номер комнаты,а на третий какой нибудь параметр (яркость,длительность...).А сам функциональный блок уже разберётся
что ему делать в конкретном месте программы,где он поставлен,в зависимости от входных задач. Это будет объектное программирование или нет?

capzap
06.02.2014, 20:02
нет, из вышесказанного, есть пчв, у него будет старт, стоп, обратная связь и т.д. - это общая часть, есть овен,данфос и кто нибудь еще, у каждой компании есть какие то нюансы. Экземпляры одного ФБ не сдделаешь, из-за некоторых особенностей каждого производителя, но общая часть не меняется, поэтому придется плодить кучу ФБ с незначительными отклонениями из-за особенностей. В ООП же берем класс, к нему добавляем потомков, с одними и теми же базовыми методами и свойствами, и добавляем в потомки только особенности каждого производителя. Это упростит работу программиста, ну и возможно нагрузку на процессор, но очень незначительную,мне кажется

Евгений_Томск
06.02.2014, 21:06
Думаю,что это очень удобно.Надо попробовать. Наверное удачным воплощением данного подхода можно считать PLCopen.
Там на вход функционального блока подаётся только имя конкретного ПЧ или сервопривода из конфигурации,а все остальные входа остаются
типовыми. Получается даже начинающий может подключить почти любое количество разных ПЧ за короткое время,используя всего несколько стандартных
ФБ.