Запросы к базе данных сигналов

Интерпретатор встроенного языка программирования поддерживает запросы к базе данных, в результате интерпретации и обработки которых база данных сигналов SDB возвращает ту или иную информацию.

Общая структура и формат запроса:

{query:
category = "фильтр_имени_категории";
group = "фильтр_имени_группы_сигналов";
name = "фильтр_имени_сигнала";
<what = "запрос"> };

где query – служебное слово, обозначающее запрос к базе данных,

<what = "запрос"> – опциональное дополнение к запросу, указывающее на тип информации, которую следует извлечь из базы данных. В качестве "запроса" допустимо указать один из 6 типов информации:

Если запрос не указан, то по умолчанию возвращаемая информация — имена сигналов.

Если запрашиваемая информация — строковая, то запрос следует окружать кавычками (см. пример ниже). Если численная, то кавычки не нужны.

  1. Запрос количества сигналов в базе данных:

    Формат запроса:

    number_of_signals = {query:category = "фильтр_имени_категории";
    group = "фильтр_имени_группы_сигналов";
    name = "фильтр_имени_сигнала";
    what = count };

    Тип возвращаемого значения — целое число (integer). Фильтром имени категории может выступать как имя требуемой категории, так и маска с использованием символа * (звёздочки). Аналогичным образом задаются фильтр имени группы сигналов и фильтр имени сигнала.

  2. Запрос имён групп сигналов, к которым принадлежат сигналы.

    Формат запроса:

    names_of_groups = "{ query:
    category = "фильтр_имени_категории";
    group = "фильтр_имени_группы_сигналов";
    name = "фильтр_имени_сигнала";
    what = group }" ;

    Тип возвращаемого значения — строка (string). В возвращенной строке содержится ноль символов, если группа сигналов в базе данных не найдена, имя одной группы сигналов если найдена одна группа, и несколько имен групп сигналов, если найдено несколько групп сигналов. Имена групп сигналов в строке разделяются служебным символом ; (точкой с запятой). Фильтром имени категории может выступать как имя требуемой категории, так и маска с использованием символа * (звёздочки). Аналогичным образом задается фильтр имени группы сигналов и фильтр имени сигнала.

  3. Запрос номеров групп сигналов, к которым принадлежат сигналы.

    Формат запроса:

    numbers_of_groups = "{ query:
    category = "фильтр_имени_категории";
    group = "фильтр_имени_группы_сигналов";
    name = "фильтр_имени_сигнала";
    what = groupnumber }" ;

    Тип возвращаемого значения — строка (string). В возвращенной строке содержится ноль символов, если группа сигналов в базе данных не найдена, номер одной группы сигналов если найдена одна группа, и несколько номеров групп сигналов, если найдено несколько групп сигналов. Номера групп сигналов в строке разделяются служебным символом ; (точкой с запятой). Фильтром имени категории может выступать как имя требуемой категории, так и маска с использованием символа * (звёздочки). Аналогичным образом задается фильтр имени группы сигналов и фильтр имени сигнала.

  4. Запрос имен сигналов, содержащихся в базе данных.

    Если не использовано служебное слово what, то по умолчанию возвращаемая строка содержит имена сигналов, удовлетворяющих заданному фильтру. Формат запроса:

    names_of_signals = "{ query:
    category = "фильтр_имени_категории";
    group = "фильтр_имени_группы_сигналов";
    name = "фильтр_имени_сигнала" }" ;

    Тип возвращаемого значения — строка (string). В возвращенной строке содержится ноль символов, если сигналов в базе данных не найдено, имя одного сигнала если найден 1 сигнал, и имена нескольких сигналов, если найдено несколько сигналов. Имена сигналов в строке разделяются служебным символом ; (точкой с запятой). Фильтром имени категории может выступать как имя требуемой категории, так и маска с использованием символа * (звёздочки). Аналогичным образом задается фильтр имени группы сигналов и фильтр имени сигнала.

  5. Запрос названий сигналов.

    Формат запроса:

    titles_of_signals = "{ query:
    category = "фильтр_имени_категории";
    group = "фильтр_имени_группы_сигналов";
    name = "фильтр_имени_сигнала";
    what = caption }" ;

    Тип возвращаемого значения — строка (string). В возвращенной строке содержится ноль символов, если сигналов в базе данных не найдено, название одного сигнала если найден 1 сигнал, и названия нескольких сигналов, если найдено несколько сигналов. Названия сигналов в строке разделяются служебным символом ; (точкой с запятой). Фильтром имени категории может выступать как имя требуемой категории, так и маска с использованием символа * (звёздочки). Аналогичным образом задается фильтр имени группы сигналов и фильтр имени сигнала.

  6. Запрос значений сигналов.

    Формат запроса:

    values_of_signals = "{ query:
    category = "фильтр_имени_категории";
    group = "фильтр_имени_группы_сигналов";
    name = "фильтр_имени_сигнала";
    what = value }" ;

    Тип возвращаемого значения — строка (string). В возвращенной строке содержится ноль символов, если сигналов в базе данных не найдено, значение одного сигнала если найден 1 сигнал, и значения нескольких сигналов, если найдено несколько сигналов. Значения сигналов в строке разделяются служебным символом ; (точкой с запятой). Фильтром имени категории может выступать как имя требуемой категории, так и маска с использованием символа * (звёздочки). Аналогичным образом задается фильтр имени группы сигналов и фильтр имени сигнала.

  7. Запрос с применением множественного фильтра.

    Для задания множественного фильтра надо его задавать так: group = "строка_1","строка_2". Разделитель фильтров — запятая. При этом в самих фильтрах допустим символ звёздочки, например: group="LBB*CP*","LBB*CT*";

    Формат запроса:

    number_of_signals = { query:
    category = "фильтр_имени_категории";
    group = "фильтр1","фильтр2","фильтр3";
    name = "фильтр_имени_сигнала";
    what = count };

    Тип возвращаемого значения в данном запросе — целое число (integer). Но в зависимости от запроса тип будет соответствующим.

Пример экспорта информации из базы данных в текстовый файл, путем использования языка программирования SimInTech:

initialization
formattext
// количество сигналов в БД
number_of_signals = { query: category = "Датчики"; group = "*"; name = "*"; what = count}; 
// имя группы, к которой принадлежит сигнал
names_of_groups = "{ query: category = "Датчики"; group = "*"; name = "*"; what = group}";
// номер группы, к которой принадлежит сигнал
numbers_of_groups = "{ query: category = "Датчики"; group = "*"; name = "*"; what = groupnumber}"; 
// по умолчанию выводятся имена сигналов в БД !!!
names_of_signals = "{ query: category = "Датчики"; group = "*"; name = "*";}" ; 
// названия сигналов в БД
titles_of_signals = "{ query: category = "Датчики"; group = "*"; name = "*"; what = caption}" ; 
// значение сигнала
values_of_signals = "{ query: category = "Датчики"; group = "*"; name = "*"; what = value}" ;
// короткое имя сигнала
shortname_of_signals = "{ query: category = "Датчики"; group = "*"; name = "*"; what = shortname}" ;  
end; 
FileID = createfile("signals.out.txt",1); // открываем существующий!!! файл на запись 
writeln(FileID, number_of_signals );
writeln(FileID, names_of_groups );
writeln(FileID, names_of_signals );
writeln(FileID, titles_of_signals );
writeln(FileID, values_of_signals ); 
writeln(FileID, shortname_of_signals );
freeobject(FileID); // закрываем файл 
end;