Страница 2 из 5 ПерваяПервая 1234 ... ПоследняяПоследняя
Показано с 11 по 20 из 47

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

  1. #11

    По умолчанию

    А в чем? Инкапсуляция и наследование - это хорошо, но малоинтересно.

  2. #12

    По умолчанию

    Цитата Сообщение от 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.

  3. #13

    По умолчанию

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

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

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


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


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

  4. #14
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    10,583

    По умолчанию

    могу выложить FB (макрос для ПР200) управления роллетой через одну единственную кнопку (физическая кнопка открыть-стоп-закрыть) и управления из ПР200 по сети. Переделаете в CodeSys и добавите необходимое. Там как раз тоже использовались концевики роллеты для контроля. Из особенности, так как кнопка единственная и неизвестно положение роллеты (например человек руками открыл не полностью и потом остановил) а нам надо открыть, что делается только через эту единственную кнопку, то следующее действие будет на закрытие. Соответственно роллета сперва закроется, хотя по сети мы дали команду на открытие, и еще раз нажмет кнопку для открытия, так как команда была открыть. з.ы. работает на приводе Came уже долго, нареканий нет.

    А так capzap правильно написал, FB и есть сущность, и FB можно размножать, под них выделяется память под каждый и это надо учитывать, чтобы переменные одного не пересекались с переменными другого (не лезть из кода FB в глобальные переменные например)

  5. #15
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    10,583

    По умолчанию

    Насколько помню, R-Trig и F-Trig работают за два цикла программы. Можете код посмотреть (не помню. можете или нет код штатных FB посмотреть)...

  6. #16

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    тогда зачем задавать вопрос, что будет с таймерами с 50мс, зачем делать 50мс, если цикл не нужен <200мс, тут Вы тоже ошибаетесь, чем больше цикл тем больше временные погрешности, это для визуализации особой разницы нет, так устроен человеческий глаз, но это другая задача со своим временем, контроллер должен работать максимально быстро, чтоб как минимум быть точнее во временах
    Вопрос задал потому что мне это не понятно, может быть пример с таймером некорректный, я там еще и с F_TRIG привел аналогичный. Просто мне не понятно, работают ли эти вещи по своим событиям независимо от программы или все происходит в те временные интервалы, которые установлены для задачи. Я подозреваю, что работает все как надо, но пока в голове нет ясной картинки как это происходит.
    По поводу длительности цикла, я думаю Вы согласитесь, что все зависит от задачи и нет такого, что в любом случае цикл должен быть максимально коротким. Хотя если привязываться к примеру с таймером, тут соглашусь. Но я уже сказал, что пример некорректный.

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

  7. #17

    По умолчанию

    Цитата Сообщение от melky Посмотреть сообщение
    могу выложить FB (макрос для ПР200) управления роллетой через одну единственную кнопку (физическая кнопка открыть-стоп-закрыть) и управления из ПР200 по сети. Переделаете в CodeSys и добавите необходимое. Там как раз тоже использовались концевики роллеты для контроля. Из особенности, так как кнопка единственная и неизвестно положение роллеты (например человек руками открыл не полностью и потом остановил) а нам надо открыть, что делается только через эту единственную кнопку, то следующее действие будет на закрытие. Соответственно роллета сперва закроется, хотя по сети мы дали команду на открытие, и еще раз нажмет кнопку для открытия, так как команда была открыть. з.ы. работает на приводе Came уже долго, нареканий нет.
    выложите, посмотрю.

  8. #18

    По умолчанию

    Можно не выкладывать, я понял как это сделать, спасибо

  9. #19
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    10,583

    По умолчанию

    Сильно не пинайте, давно делал, когда еще не было возможности подцепить концевики и человек по камере ориентировался, так что может в нем что-то лишнее. Ну и Putbit и Extractbit не помню как родились, кажется с подсказок на форуме, заменяют логику проверок.

    Или вам самим макросом для ОЛ ?

    Второй такой же макрос управляет воротами, там тоже привод Came и кнопка управления одна единственная.
    Изображения Изображения

  10. #20

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    в плк мы не управляем временем цикла, мы задаем минимальное время цикла и максимальное. Первое нужно чтоб обеспечить постоянство начало времени исполнения каждого скана, для того чтоб можно было спрогнозировать через сколько циклов пройдет некоторое время, второе для понимания что всё зависло и надо делать вачдог. Контроллер "съест" столько миллисекунд сколько потребуется выполнить все инструкции машинного кода в каждом конкретном скане. Если минимальное время превышает необходимое, плк будет выполнять фоновую задачу пока не наступит время нового цикла.
    Я сегодня пообщался с товарищем, он мне все объяснил. Я то думал, что тут аппаратный таймер (как это там, где я до этого имел опыт) и программа работает на его прерываниях, а оказывается нифига и все завязано на циклы задач, теперь многие вещи стали понятны.

    Цитата Сообщение от capzap Посмотреть сообщение
    и не поймем, потому что в начале
    Ну первое Вам не понравилось, объяснил по-другому, при этом выкинул один управляющий сигнал (ButtonEnabled), т.к. на суть вопроса он не влияет, чтобы не объяснять что это и зачем.

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

    В целом у меня вроде как сформировалось общее понимание как это все должно быть реализовано, пока вопросов больше не имею, буду пробовать, возможно что-то возникнет в процессе. Всем спасибо.

    PS: насчет ООП в codesys, интерес я не потерял, все равно изучу вопрос, чтобы знать что там к чему

Страница 2 из 5 ПерваяПервая 1234 ... ПоследняяПоследняя

Похожие темы

  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

Ваши права

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