PDA

Просмотр полной версии : Функциональные блоки



ribamuka
13.07.2017, 00:59
Не могу понять логику работы.

В PLC_PRG вставлен код:

fb_COMcontrol
(
xOpen := xOpen,
xClose := xClose,
uiPortNumber := 2,
udiBaudrate := 9600,
uiParity := COM.PARITY.NONE,
uiByteSize := 8,
uiStopBits := COM.STOPBIT.ONESTOPBIT
);


Этот код вызывается при каждом цикле ПЛК, в моем поимании создается всегда новый экземпляр ФБ, который не должен помнить предыдущего состояния. Но по факту, получается, что это не так, и все переменные которые были внтури ФБ сохраняют свое состояние, как можно объяснить такое поведение?

Евгений Кислов
13.07.2017, 07:08
Вы путаете логику работы функции и функционального блока.
Функция не сохраняет значения внутренних переменных между вызовами, ФБ - сохраняет. Каждый вызов ФБ не приводит к созданию нового экземпляра (если под созданием подразумевать выделение памяти).

Рекомендую классическую книгу - Петров И.В., "Программируемые контроллеры. Стандартные языки и приемы прикладного проектирования" - там очень хорошо разъяснены подобные вещи.

capzap
13.07.2017, 07:08
Вы перепутали языки программирования для ПК и контроллеров

ribamuka
13.07.2017, 12:56
Спасибо за информацию и книгу

Tasmancheg
08.04.2018, 15:01
Вы путаете логику работы функции и функционального блока.
Функция не сохраняет значения внутренних переменных между вызовами, ФБ - сохраняет. Каждый вызов ФБ не приводит к созданию нового экземпляра (если под созданием подразумевать выделение памяти).

Рекомендую классическую книгу - Петров И.В., "Программируемые контроллеры. Стандартные языки и приемы прикладного проектирования" - там очень хорошо разъяснены подобные вещи.

Спасибо! Только хотел форум вопросами засыпать, а тут бац! В книге все ответы нашел:):)