Среда разработки Unimod PRO 2 (версия 2.3.40)
 Руководство по программированию
×

FL_RD - чтение данных из файла в массив


Назначение.
Функциональный блок используется для чтения данных из файла в массив.
Состав структурной переменной.
Переменная со структурным типом FL_RD будет добавлена в локальный словарь автоматически при добавлении блока в редактор.
Описание алгоритма.
  • На вход FILE_ID передается уникальный идентификатор файла, полученный при его открытии с использованием блока FL_OPEN.
  • Определяется начальная позиция курсора в файле, с которой начнется чтение данных. Количество байт для смещения курсора относительно начала файла задается входным параметром FILE_OFF.
  • Тип данных массива, в который будут сохраняться данные, определяет количество прочитанных из файла байт для сохранения в одном элементе массива. Например, в массив с типом BYTE для записи одного элемента будет прочитан 1 байт данных, в массив с типом INTEGER  - 4 байта данных.
  • Осуществляется чтение из файла: с установленной позиции курсора считывается минимальный блок данных и записывается в элемент массива DATA[DATA_OFF] → считывается следующий блок и записывается в элемент DATA[DATA_OFF+1] → ... → считывается последний блок и записывается в элемент DATA[DATA_OFF+DATA_CNT-1]. Общее количество блоков для чтения указано во входном параметре DATA_CNT.
  • На выход ELEM_CNT выводится количество элементов массива, в которые удалось записать данные из файла, а на выход FAULT код ошибки. Список ошибок размещен в конце раздела "FL_OPEN - открытие файла".
     
    Пример чтения данных из файла.
    В примере на следующем изображении чтение начинается со смещением в 4 байта от начала файла, а минимальный блок считываемых данных составляет 4 байта, т.к. массив DATA имеет тип данных INTEGER. Всего считывается 5 блоков, которые последовательно записываются в массив, начиная с элемента DATA[4].
    Пример, когда данных для чтения в файле не хватило.
    Пример на следующем изображении аналогичен предыдущему, но с меньшим количеством данных в файле. В 4 блоке данные будут прочитаны и записаны в младшие разряды целого числа, поэтому элемент DATA[7]=7. Дальнейшее чтение не осуществляется, данных больше нет, поэтому ELEM_CNT=4. 
Пример синтаксиса на языке ST.
//вызов функционального блока FL_RD
Block.FL_RD(FILE_ID, FILE_OFF, DATA, DATA_OFF, DATA_CNT);
//чтение количества записанных элементов и кода ошибки
ELEM_CNT := Block.ELEM_CNT;
FAULT := Block.FAULT;