Показано с 1 по 4 из 4

Тема: PRG vs FB

  1. #1
    Пользователь Аватар для drvlas
    Регистрация
    30.09.2010
    Адрес
    Киев
    Сообщений
    700

    По умолчанию PRG vs FB

    Вопрос практический, хотя и требует понимания теории КДС.
    У меня есть проект, большой. Требуется в очень ограниченньій срок создать подобньій, но "с перламутровьіми пуговицами". И кратчайший путь, как мне кажется, состоит в дублировании одной SFC-программьі. Не, ну там еще много чего нужно, ясен пень, но вот главньій шаг - именно дублирование.

    А сам код, подлежащий дублированию, оформлен как программа, т.е. PRG. Вот я и думаю: Copy Object и вперед! Вроде норм. Но интереснее сделать так, чтобьі текст программьі не дублировался - т.е. сделать его в виде FB. Потому как поддержка проекта потом значительно проще, правишь в одном месте, а поведение изменяется синхронно у обоих екземпляров ФБ.
    Так как времени очень мало, не хочется проколоться. Потому и спрашиваю знатоков:

    1) можно ли тупо переделать PRG в FB? Есть ли подводньіе камни?
    2) Как, собственно, такое сотворить? При копировании POU его тип не запрашивается, т.е. копировать программу я могу только в программу. А что-то типа копи-паст - как єто с SFC сделать?

  2. #2
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    Тупо заменить PROGRAM на FUNCTION_BLOCK. Ну то есть буквально стереть в редакторе объявлений первое, написать второе и сохранить/скомпилировать — тип POU поменяется.

    Подводные камни — ФБ сложнее мониторить и отлаживать, т.к. каждый раз придётся выбирать конкретный экземпляр. Ну и если программа взиамодействует с большим числом переменных за своими пределами, то сделанный из неё ФБ будет иметь много входов-выходов.

  3. #3
    Пользователь Аватар для drvlas
    Регистрация
    30.09.2010
    Адрес
    Киев
    Сообщений
    700

    По умолчанию

    Цитата Сообщение от Yegor Посмотреть сообщение
    Тупо заменить PROGRAM на FUNCTION_BLOCK
    Работает, спасибо!

    Цитата Сообщение от Yegor Посмотреть сообщение
    каждый раз придётся выбирать конкретный экземпляр
    Ясно, не страшно.
    Цитата Сообщение от Yegor Посмотреть сообщение
    сделанный из неё ФБ будет иметь много входов-выходов.
    А вот тут не понятно.
    И чтобьі проверить непонятность, я таки тупо изменил тип POU и запустил на компиль. Вьідало ошибку, что 'DOZ' is no function
    Такое иногда встречается, я не долго думая правлю з.х. что - и идет дальше. То есть, само сообщение не удивило. Но править не ясно что...
    И вроде рядом же точно такой ФБ на SFC, оформлен очень и очень похоже, а ишь тьі - на него не ругается. Буду думать. И - спасибо!

  4. #4
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    Такое иногда встречается, я не долго думая правлю з.х. что - и идет дальше.
    Таймером TON умеете пользоваться? Так вот когда вы программу в ФБ переделали, то на месте вызова у вас осталось TON(), а надо же сначала объявить экземпляр ton1: TON, и уже потом вызывать ton1().

    Дальше — вот написали вы аналог TON в виде программы, но переменную IN сделали глобальной. Теперь если вы свой TON в ФБ преобразуете, то больше одного TON у вас работать не будет, т.к. все будут работать от одной IN. Придётся эту IN из глобальных переменных убрать, перенести в ваш TON и отдельно для каждого экземпляра ФБ назначать: ton1(IN := X).

    Вообще не ожидал, что такие вещи буду рассказывать. Мы же журналирование на ПЛК вместе делали пару лет назад.

Ваши права

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