Recoder » RECODER/TRD

Функции

time-universal-encode(year month day hour min sec)

Описание: функция time-universal-encode возвращает время в универсальном формате. Аналогична вызову функции encode-universal-time с параметрами следующими в обратном порядке.

Пример использования:

(time-universal-encode 2021 08 30 10 00 00 ) => 3839295600

Методы

analog-length((trd <trd>))
Описание: метод analog-length возвращает длину занимаемую аналоговыми сигналами одной записи тренда.
discret-length((trd <trd>))
Описание: метод discret-length возвращает количество байт необходимое для записи дискретных сигналов одной записи.
discret-offset((trd <trd>))
Описание: метод discret-offset возвращает смещение в байтах от начала записи до начала записи дискретных сигналов.
record->utime((trd <trd>) record)
Описание: метод record->utime возвращает время в универсальном формате по номеру записи.
start-offset((trd <trd>))
Описание: метод start-offset возвращает смещение, выраженное в байтах, первой (нулевой) записи тренда.
trd-open((trd <trd>))
Описание: trd-open выполняет открытие файла тренда включая:
  • чтение заголовка;
  • разбор аналоговых сигналов;
  • разбор дискретных сигналов.
utime->record((trd <trd>) utime)
Описание: метод utime->record возвращает номер записи по универсальному времени.
utime-end((trd <trd>))
Описание: метод utime-end возвращает время окончания тренда. Время возвращается в универсальном формате (universal-time)

Классы

<trd>
OptionValue
Superclasses:(t)
Metaclass:standard-class
Default Initargs:nil

Описание: класс <trd> служит для предоставления интерфейса к файлу-тренду, содержащему записи аналоговых и дискретных сигналов.

Файл-тренд состоит из:

  1. Записи заголовка тренда;
  2. Записей дескрипторов (описаний) аналоговых сигналов, см. <a-signal>;
  3. Записей дескрипторов (описаний) дискретных сигналов, см. <d-signal>;
  4. Записей аналоговых и дискретных сигналов, состоящий из последовательно записанных списка аналоговых сигналов и упакованного списка дискретных сигналов;

    4.1 Каждый аналоговый сигнал кодируется целочисленным значением длиной 2 байта, его вычисляется по формуле: rez=analog-LowLimit+(i*(analog-HighLimit-analog-LowLimit)/65535)

    4.2 Каждый дискретный сигнал кодируется одним битом информации 0|1

Заголовок тренда имеет следующую структуру:

ПолеДина поля, байтПримечание
id5Строка идентификации
version1Версия данных трендера
date-day1Число месяца
date-month1Порядковый номер месяца
date-year1Год-2000
time-hour1Час
time-minute1Минута
time-second1Секунда
reserv2Резерв - содержит сумму аналоговых и дискретных сигналов до 2^16=65536 шт
total-records4Количество записей, содержащееся в тренде до 2^32=4294967296 шт
delta-time8Интервал времени между записями, с
analog-number2Количество аналоговых сигналов до 2^16=65536 шт
discret-number2Количество дискретных сигналов до 2^16=65536 шт

При записи в тренд на восемь дискретных сигналов отводится один байт.

Сигналы упаковываются побайтно слева-направо.

  • file-name
    Имя файла в файловой системе
    OptionValue
    Allocation:instance
    Type:nil
    Initarg::file-name
    Initform:nil
    Accessors:(file-name)
  • file-descr
    Файл тренда
    OptionValue
    Allocation:instance
    Type:nil
    Initform:nil
    Accessors:(file-descr)
  • id-string
    Строка идентифицирующая то, что это файл тренда
    OptionValue
    Allocation:instance
    Type:nil
    Initform:nil
    Accessors:(id-string)
  • version
    Версия тренда
    OptionValue
    Allocation:instance
    Type:nil
    Initform:nil
    Accessors:(version)
  • utime-start
    Дата и время начала создания тренда в универсальном формате
    OptionValue
    Allocation:instance
    Type:nil
    Initform:nil
    Accessors:(utime-start)
  • reserv
    Количество аналоговых сигналов + Количество дискретных сигналов
    OptionValue
    Allocation:instance
    Type:nil
    Initform:nil
    Accessors:(reserv)
  • records
    Общее число записей в тренде
    OptionValue
    Allocation:instance
    Type:nil
    Initform:nil
    Accessors:(records)
  • increment
    Интервал между записями тренда, с
    OptionValue
    Allocation:instance
    Type:nil
    Initform:nil
    Accessors:(increment)
  • analog-number
    Количество аналоговых сигналов
    OptionValue
    Allocation:instance
    Type:nil
    Initform:nil
    Accessors:(a-number)
  • discret-number
    Количество дискретных сигналов
    OptionValue
    Allocation:instance
    Type:nil
    Initform:nil
    Accessors:(d-number)
  • analog-ht
    Хеш-таблица аналоговых сигналов
    OptionValue
    Allocation:instance
    Type:nil
    Initform:nil
    Accessors:(analog-ht)
  • discret-ht
    Хеш-таблица дискретных сигналов
    OptionValue
    Allocation:instance
    Type:nil
    Initform:nil
    Accessors:(discret-ht)