PDA

Просмотр полной версии : PRG vs FB



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

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

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

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

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

drvlas
16.02.2016, 10:55
Тупо заменить PROGRAM на FUNCTION_BLOCKРаботает, спасибо!


каждый раз придётся выбирать конкретный экземплярЯсно, не страшно.

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

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

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

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