Блоки чтения-записи ПЗУ ----------------------- Сохранение переменных в ПЗУ (Постоянное Запоминающее Устройство или EEPROM, электрически стираемая энергонезависимая память) используется для хранения измененных значений переменных при выключенном питании контроллера. Пример таких переменных - настроечные величины ("уставки") программы, счетчики событий, и прочие переменные, которые не должны после выключения-включения питания контроллера сбрасывать свои значения на значения по умолчанию. В связи с тем, что количество циклов перезаписи ПЗУ ограничено (обычно от 10^6. до 10^12 раз), и что в течение записи происходит пауза в выполнении программы, запись нельзя выполнять постоянно. Если запись выполнять несвоевременно, то при неожиданном выключении питания контроллера последние изменения значений переменных будут утеряны. Работа с ПЗУ может выполняться двумя способами: **1. ПЗУ-переменные** Переменные FBD-программы имеют флаг ``Запись в ПЗУ``, при включении которого данная переменная должна сохраняться в ПЗУ FBD-ядром контроллера. В дальнейшем такие переменные будут называться :guilabel:`ПЗУ-переменные`. Для каждой :guilabel:`ПЗУ-переменной` резервируется место (адрес) в ПЗУ, по размеру соответствующее выбранному типу данных. Адреса всех переменных задаются в окне ``Переменные ПЗУ`` в контекстном меню программы. При проверке FBD-программы перед программированием контроллера всегда проверяется, чтобы каждая :guilabel:`ПЗУ-переменная` имела отдельный адрес (диапазон адресов), не пересекающийся с адресами других :guilabel:`ПЗУ-переменнных`. :guilabel:`ПЗУ-переменные` обрабатываются FBD-ядром контроллера так: При включении питания контроллера FBD-ядро устанавливает во все переменные значения по умолчанию. Затем выполняется проверка целостности содержимого ПЗУ путем проверки значений служебных :guilabel:`ПЗУ-переменных` (например, "Адрес подчиненного устройства Modbus"), хранимых в ПЗУ. Если целостность ПЗУ соблюдена, значения всех переменных копируются из ПЗУ в оперативную память, иначе - выполняется запись в ПЗУ значений по умолчанию всех переменных. Далее FBD-ядро выполняет основной цикл FBD-программы. В течение работы контроллера FBD-программа периодически устанавливает признак, который проверяется между шагами выполнения FBD-схемы. Если он равен **1** - выполняется запись в ПЗУ значений всех :guilabel:`ПЗУ-переменных` из оперативной памяти. Внимание! Копирование значений из ПЗУ в оперативную память :guilabel:`ПЗУ-переменных` в основном цикле программы не выполняется. Для установки этого признака служит блок :guilabel:`Запись переменных`, который должен быть создан пользователем. Другой вариант - установка опций автоматического выполнения записи при определенных событиях (см. раздел FBD-программа). * Блок :guilabel:`Запись переменных` (EEPROM) Этот блок имеет 1 логический вход, выходов не имеет. Если на вход подан **0**, блок ничего не выполняет. Если подана **1** - он устанавливает признак, по которому после выполнения всех блоков в текущем шаге выполнения программы, т.е. между шагами, будет выполнена запись всех :guilabel:`ПЗУ-переменных`. **2. Блоки произвольного доступа в ПЗУ** Блоки произвольного доступа в ПЗУ предназначены для чтения-записи произвольных (динамических) адресов ПЗУ, записи-чтения динамических массивов, например журналов событий. Такие данные не могут быть только с большим трудом записаны с использованием ПЗУ-переменных, т.к. количество ПЗУ-переменных и их адреса не могут изменяться в течение работы FBD-программы. Пользователь самостоятельно создает схему, математически вычисляющую адрес чтения записи, и схему для разрешения чтения-записи. Для доступа доступны все адреса ПЗУ, поэтому пользователь сам должен обеспечивать целостность данных, в том числе чтобы этими командами не испортить значения ПЗУ-переменных. * Блок :guilabel:`Чтение из ПЗУ` (EEPROMRead) * Блок :guilabel:`Запись в ПЗУ` (EEPROMWrite) .. contents:: Содержание: .. toctree:: fbd_block__e_e_p_r_o_m fbd_block__e_e_p_r_o_m_r_e_a_d fbd_block__e_e_p_r_o_m_w_r_i_t_e