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