Таблица ПЗУ ----------- Этот шаблон организует таблицу с заданным количеством строк и столбцов, которая хранится в ПЗУ контроллера: .. figure:: image/rom_table_1.png :align: center Параметр **Начальный адрес** задает стартовый адрес расположения таблицы в ПЗУ. Параметр **Конечный адрес** вычисляется автоматически на основании размера таблицы и содержащихся в нем типов данных. **Внимание!!!** Используемый диапазон ПЗУ не проверяется на пересечение с адресами ПЗУ локальных переменных FBD-схемы и должен контролироваться пользователем самостоятельно. Размерность таблицы задается параметрами **Количество строк таблицы** и **Количество полей таблицы**. Каждое поле имеет название, которое будет идентифицировать это поле в FBD-программе, и тип данных. Порядок следования полей можно менять с помощью кнопки **Вверх**, которая перемещает выбранное поле на одну позицию вверх по списку. Параметр **Способ выбора строки** позволяет установить способ выборки из таблицы. Существуют два варианта: 1. Массив – по индексу строки 2. Журнал событий – по порядковому номеру события Более подробно режимы выборки будут рассмотрены далее. Шаблонный блок таблицы ПЗУ ~~~~~~~~~~~~~~~~~~~~~~~~~~ Для добавления шаблона в FBD-программу необходимо перетащить его из дерева Навигатора проекта на FBD-схему. В зависимости от выбранного параметра **Способ выбора строки** блок будет выглядеть по-разному. Кроме того, состав входов и выходов блока меняется в зависимости от параметра **Тип блока**, который устанавливается в его свойствах. Этот параметр может принимать три значения: **Чтение**, **Запись**, **Сброс**. *Массив – по индексу строки* **Запись:** .. figure:: image/rom_table_2.png :align: center **Чтение:** .. figure:: image/rom_table_3.png :align: center Этот способ использует произвольную выборку и запись строк по индексу (номеру строки). Индексы начинаются с 0. В режиме **Чтение** блок имеет один вход – **row**, на который подается номер нужной строки. Тип входа – **беззнаковый целый 2-х байтовый**. Значение, подаваемое на вход, должно быть меньше количества строк, указанного в настройке шаблона, т.е. в диапазоне от 0 до <кол-во строк> - 1. На логический выход **err** выдается сигнал в том случае, если значение, поданное на вход **row** выходит за допустимый предел. На остальных выходах, названия которых соответствует названиям полей, заданных в шаблоне, устанавливаются значения, взятые из соответствующей строки таблицы. Тип данных для этих выходов так же соответствует типу данных, заданному в полях шаблона. В режиме **Запись** блоки также имеет вход **row**, указывающий номер строки. Вход **en** активирует запись параметров в строку таблицы. Остальные входы служат для установки значений в соответствующие поля таблицы. Выход **err** сигнализирует об ошибке, аналогично блоку чтения. *Журнал событий – по порядковому номеру события* **Чтение:** .. figure:: image/rom_table_4.png :align: center **Запись:** .. figure:: image/rom_table_5.png :align: center **Сброс:** .. figure:: image/rom_table_6.png :align: center В этом режиме таблица организована в виде журнала, который хранит некоторое количество последних записей. Это количество задается параметром шаблона **Количество строк таблицы**. Кроме того, шаблон хранит номер последнего записываемого события. **Пример журнала:** .. figure:: image/rom_table_7.png :align: center На рисунке схематично представлен способ хранения информации. В данном примере таблица состоит из 4 строк, то есть хранит последние 4 записи журнала, от записи 4 до записи 7. Режим **Чтение** журнала блока имеет один вход **event**, который в отличие от входа предыдущего режима, задает номер события для выборки. На выходах **from** и **to** устанавливаются номера событий начала и конца журнала, которые хранятся в ПЗУ в данный момент. Выход **err** сообщает об ошибке выборки события, поданного на вход **event**. На остальных выходах, название которых соответствует названию полей, заданных в шаблоне, устанавливаются значения, взятые из соответствующего события журнала. У блока записи отсутствует вход, указывающий записываемый номер события, так как блок нумерует автоматически. Выходы **from** и **to**, аналогично блоку чтения, отображают диапазон событий, хранящихся в журнале. Режим сброса используется в том случае, если нужно очистить журнал. При подачи сигнала на вход **en** внутренний счетчик событий сбрасывается в **0** и журнал можно заново заполнять значениями.