.. _ref_eeprom_blocks: Блоки чтения-записи ПЗУ ----------------------- Сохранение переменных в энергонезависимой памяти (EEPROM, электрически стираемая память) предназначено для обеспечения сохранения измененных значений переменных при отключении питания контроллера. К таким переменным относятся настроечные параметры программы, счетчики событий и другие параметры, которые должны сохранять свои значения после выключения и включения питания. Однако, следует учитывать, что количество циклов перезаписи EEPROM ограничено (обычно от 10^6 до 10^12). Кроме того, процесс записи данных сопровождается временной приостановкой выполнения программы. В связи с этим, запись данных не должна быть непрерывной. Несвоевременная запись данных может привести к потере последних изменений при неожиданном отключении питания контроллера. Работа с ПЗУ может выполняться двумя способами: **1. ПЗУ-переменные** Переменные FBD-программы имеют флаг ``Запись в ПЗУ``, при включении которого данная переменная должна сохраняться в ПЗУ FBD-ядром контроллера. В дальнейшем такие переменные будут называться :guilabel:`ПЗУ-переменные`. Для каждой :guilabel:`ПЗУ-переменной` резервируется место (адрес) в ПЗУ, по размеру соответствующее выбранному типу данных. Адреса всех переменных задаются в окне ``Переменные ПЗУ`` в контекстном меню программы. При проверке FBD-программы перед программированием контроллера всегда проверяется, чтобы каждая :guilabel:`ПЗУ-переменная` имела отдельный адрес (диапазон адресов), не пересекающийся с адресами других :guilabel:`ПЗУ-переменных`. :guilabel:`ПЗУ-переменные` обрабатываются FBD-ядром контроллера следующим образом: При включении питания контроллера FBD-ядро устанавливает во все переменные значения по умолчанию. Затем выполняется проверка целостности содержимого ПЗУ путем проверки значений служебных :guilabel:`ПЗУ-переменных` (например, "Адрес подчиненного устройства Modbus"), хранимых в ПЗУ. Если целостность ПЗУ соблюдена, значения всех переменных копируются из ПЗУ в оперативную память, иначе - выполняется запись в ПЗУ значений по умолчанию всех переменных. Далее FBD-ядро выполняет основной цикл FBD-программы. В течение работы контроллера FBD-программа периодически устанавливает признак, который проверяется между шагами выполнения FBD-схемы. Если признак установлен - выполняется запись в ПЗУ значений всех :guilabel:`ПЗУ-переменных` из оперативной памяти. **!!!Внимание!!!** Копирование значений из ПЗУ в оперативную память :guilabel:`ПЗУ-переменных` в основном цикле программы не выполняется. Для установки этого признака служит блок :guilabel:`Запись переменных`, который должен быть создан пользователем. Этот блок имеет 1 логический вход, выходов не имеет. Если на вход подан **0**, блок ничего не выполняет. Если подана **1** - он устанавливает признак, по которому после выполнения всех блоков в текущем шаге выполнения программы, т.е. между шагами, будет выполнена запись всех :guilabel:`ПЗУ-переменных`. Подробное описание блока - :ref:`ref_block_eeprom`. Другой вариант - установка опций автоматического выполнения записи при определенных событиях (:ref:`ref_FBD_programma`). **2. Блоки произвольного доступа в ПЗУ** Блоки произвольного доступа в ПЗУ предназначены для чтения-записи произвольных (динамических) адресов ПЗУ, записи-чтения динамических массивов, например журналов событий. Указанные данные могут быть с трудом сохранены с использованием переменных ПЗУ, поскольку количество переменных ПЗУ и их адреса не могут быть изменены в процессе функционирования FBD-программы. Пользователь самостоятельно разрабатывает схему, осуществляющую математическое вычисление адреса чтения и записи, а также схему для управления разрешением операций чтения и записи. Все адреса ПЗУ доступны для доступа, поэтому пользователь должен самостоятельно обеспечивать целостность данных, включая предотвращение возможного искажения значений переменных ПЗУ в результате выполнения указанных команд. .. toctree:: fbd_block_eeprom fbd_block_eepromread fbd_block_eepromwrite