Pull to refresh

Инициализация данных о рейсах в системе AIRCOM Server

Reading time 7 min
Views 6.4K

Немного теории


ACARS (Aircraft Communications Addressing and Reporting System) — цифровая система связи, применяемая в авиации для передачи коротких, относительно простых сообщений между воздушным судном и наземными станциями, либо через прямую радиосвязь, либо через спутниковые системы.
AIRCOM – Сервер (шлюз) обмена сообщениями между различными сетями. Производитель — компания SITA. Связывает бортовое оборудование ACARS через сети ARINC с системой планирования полетов LIDO OC (Jeppesen Jet Planner или др.), электронной почтой, SITAtex, телефонией, файловым обменом и другими необходимыми информационными системами, используемые в авиакомпании.

Принцип работы AIRCOM Server


Информационная система SITA AIRCOM Server реализована на MS SQL и используется для обеспечения воздушных судов авиакомпании данными о маршруте, ветру на эшелонах, погоде и для обмена сообщениями «экипаж — ЦУП — экипаж». AIRCOM Server настроен на бортовое оборудование ACARC и функционирует совместно с ним. AIRCOM Server является критически важной информационной системой для обеспечения полетов.

Для корректной работы AIRCOM необходимо, чтобы корректные данные о предстоящем (или текущем) полете были, и в БД AIRCOM, и в памяти FMS самолета:

— номер рейса;
— бортовой номер воздушного судна (ВС);
— аэродромы вылета и назначения;
— время вылета и пр.

Если информация в памяти FMS, в БД AIRCOM и в системе планирования полетов не будет совпадать, некоторые запросы пилотов не будут обрабатываться, и экипаж не получит, например, обновленные данные по ветрам на эшелонах по маршруту полета.

Данные о предстоящем (или текущем) полете в AIRCOM и в память FMS ВС должны попасть из информационной системы авиакомпании (назовем ее условно — «Расписание»), в которой формируется и корректируется расписание полетов.

Это может быть выполнено двумя способами:

1. Ручная инициализация экипажем

Пилот вручную заполняет все данные по предстоящему рейсу, используя пульт ACARS и рабочий план полета (OFP), после чего выполняет инициализацию, нажав кнопку «INIT». При этом данные по рейсу отправляются в AIRCOM и записываются в его БД.

Минусы данного способа:

— пилот может ошибиться при вводе данных.
— необходимо подождать некоторое время (~ 15 минут) после включения питания бортовых систем ВС и только потом вводить данные по рейсу и выполнять инициализацию.

2. Автоматизированная инициализация

Пилот отправляет в AIRCOM сообщение об инициализации не обращая внимание на то, какие данные сохранены в памяти FMS (это может быть предыдущий выполненный рейс или вообще не существующий), важен только тип тип сообщения — INIT.
AIRCOM получает этот INIT и знает, что данный запрос пришел с конкретного самолета (по бортовому номеру), а также дату и время запроса.

AIRCOM, получив INIT-запрос с ВС, использует предназначенный для этого типа сообщений шаблон (downlink template) и модель (Model), получает из сторонней системы текущие действующие данные о расписании полетов для данного ВС (номер рейса, аэродром вылета и назначения, дата и время вылета), записывает эти данные в свою БД и отправляет эту информацию через ACARS на самолет. Эти данные записываются в память бортовой системы и используются для последующих запросов с ВС.

Была сформирована задача — реализовать информационный обмен между информационной системой с расписанием полетов ВС и AIRCOM.

ИС AIRCOM имеет штатную функцию — использование дополнительно сторонней БД и выполнять с ней информационный обмен с помощью двух хранимых процедур: одна — на запись, вторая — на чтение. Параметры подключение к этой БД указываются в файле настроек ИС AIRCOM — AircomSrv.ini. Дополнительно на сервере AIRCOM должна быть установлена и запущена (когда все будет настроено) дополнительная служба — AS Database Connector.

AS Database Connector поддерживает подключение только к базе данных типа «MS SQL Server» (другие, в том числе Oracle, якобы, будет поддерживать в каких-то последующих версиях). Database Connector можно подключить только к одной базе данных и использовать только одну пару хранимых процедур (на чтение и на запись) для получения и отправки данных.

Реализация


1. В базе данных ИС «Расписание полетов» (Oracle) были созданы Представление (view) и пользователь с правом на запуск этого представления. Данное представление возвращало набор данных, собранных из нескольких таблиц БД «Расписание», который содержал:

  • id – id перелета из БД «Расписание» (уникальный)
  • acft – номер борта ВС
  • flight – номер рейса
  • dep_icao – ИКАО-код а/д вылета
  • dest_icao – ИКАО-код а/д назначения
  • STD – дата и время вылета по расписанию
  • ETD – дата и время вылета запланированные (скорректированные)
  • ETA – дата и время прибытия запланированные

2. На сервере ИС AIRCOM (MS SQL) была создана дополнительная БД, содержащая 2 таблицы и 2 хранимые процедуры, а также отдельный пользователь, имеющий право на запись и чтение этих таблиц и запуск хранимых процедур — штатная реализация, предусмотренная ИС AIRCOM.

2.1 Таблица «schedule» — для хранения текущего раписания полетов всех ВС АК (данные по рейсам, получаемые из «Расписания»):

CREATE TABLE [dbo].[schedule](
[leg_number] [int] NOT NULL,
[tail] [varchar](10) NOT NULL,
[flight] [varchar](7) NOT NULL,
[dep_icao] [varchar](4) NOT NULL,
[dest_icao] [varchar](4) NOT NULL,
[STD] [datetime] NULL,
[ETD] [datetime] NULL,
[ETA] [datetime] NULL,
PRIMARY KEY CLUSTERED
(
[leg_number] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

2.2 Таблица «messages» — для записи данных по INIT-запросам, получаемые из AIRCOM:

CREATE TABLE [dbo].[messages](
[id] [int] IDENTITY(1,1) NOT NULL,
[AircraftReg] [varchar](7) NOT NULL,
[Treated] [bit] NOT NULL,
[dt] [datetime] NULL
) ON [PRIMARY]
GO

Запросы поступают из ИС AIRCOM и содержат в себе только бортовой номер ВС.

2.3 Хранимая процедура msgReceive — срабатывает при получении INIT-запроса с ВС.

CREATE PROCEDURE [dbo].[msgReceive](
@inMsg varchar(8000),
@inTarget varchar(256))
AS
BEGIN
DECLARE @cnt INT;
SELECT @cnt = count(*) FROM dbo.messages WHERE (AircraftReg = @inMsg)and(Treated = 0);
IF (@cnt = 0) BEGIN
INSERT INTO dbo.messages (AircraftReg, Treated, dt) VALUES(@inMsg, 0, GETDATE());
END;
RETURN 0
END
GO

Хранимая процедура «msgReceive» является процедурой записи. При получение от AIRCOM сообщение, содержащее бортовой номер ВС, она записывает данные в таблицу «messages» новую строку. При этом в столбец «Treated» записывается ноль. Столбец «dt» отображает время получения запроса.

2.4 Хранимая процедура «GetSchedule»

CREATE PROC [dbo].[GetSchedule]
@outMsg VARCHAR(8000) = '' OUT,
@outSource VARCHAR(256) = '' OUT
AS
BEGIN
DECLARE @cnt INT;
DECLARE @msID VARCHAR(7);
SELECT @cnt = count(*) FROM dbo.messages WHERE Treated = 0;
IF (@cnt > 0) BEGIN
select top(1) @msID = ms.id, @outMsg =
'SUPER_INIT
<ACFT>'+sc.tail+'</ACFT>
<FLIGHT>ZZ'+sc.flight+'</FLIGHT>
<FltNum>'+case ISNUMERIC (sc.flight) when 1 then REPLICATE('0', 5 - DATALENGTH(sc.flight)) + sc.flight
else REPLICATE('0', 6 - DATALENGTH(sc.flight)) + LEFT(sc.flight, LEN(sc.flight)-1) end +'</FltNum>
<OS>'+case ISNUMERIC(sc.flight)when 1 then ' 'else RIGHT(sc.flight, 1) end+'</OS>
<DEP>'+sc.dep_icao+'</DEP>
<DEST>'+sc.dest_icao+'</DEST>
<STD>'+RIGHT('00'+CAST(DAY(sc.STD) as VARCHAR), 2)+'</STD>
<ETD>'+REPLACE(left(convert(VARCHAR, sc.ETD, 108),5), ':', '')+'</ETD>
<ETE>'+REPLACE(left(convert(VARCHAR, sc.ETA-sc.ETD, 108),5), ':', '')+'</ETE>'
from dbo.schedule sc INNER JOIN dbo.messages ms ON sc.tail = ms.AircraftReg
where (ms.Treated = 0) and
((getutcdate() between ETD and ETA) or (getutcdate() < ETD))
ORDER BY sc.ETD;
UPDATE dbo.messages SET Treated = 1 WHERE id = @msID;
END
END
GO

Процедура «GetSchedule» является процедурой чтения и возвращает в AIRCOM данные из таблицы schedule в следующем виде:

SUPER_INIT			– заголовок сообщения (Header), может быть любой;
<ACFT>AB-CDE</ACFT>		– бортовой номер ВС;
<FLIGHT>ZZ123</FLIGHT>		– номер рейса;
<FltNum>00123</FltNum>		– номер рейса (только цифры в 5-разрядном виде)
<OS> </OS>			– суфикс (буква или пробел)
<DEP>KDFW</DEP>			– ИКАО-код а/д вылета;
<DEST>EHAM</DEST>		– ИКАО-код а/д назначения;
<STD>21</STD>			– дата выполнения рейса по расписанию (dd);
<ETD>0620</ETD>			– Расчетное время вылета (UTC, hhnn);
<ETE>0930</ETE>			– Расчетное полетное вылета (UTC, flightime, hhnn);


Вид возвращаемых данных может быть абсолютно любым, главное — потом соответственно настроить шаблон.

3. Создано отдельное Windows-приложение, которое запущено на сервере AIRCOM (Windows Sever) через планировщик задач (Task Scheduler). Эта программа, используя учетную запись из п.1, запускает Представление и получает данные по текущему расписанию полетов всех ВС авиакомпании на период от — 12 часов до + 24 часа, после чего записывает этот массив в в таблицу shedule, предварительно удалив из нее все имеющиеся строки.

Для работы программы необходима установка в систему стандартного микро-клиента Oracle и внесение в файл tnsnames.ora записи с настройками для подключения к БД системы «Расписание».

Принцип работы реализованного механизма инициализации


— Пилот отправляет INIT-запрос в AIRCOM;

— AIRCOM, получив запрос INIT с ВС, используя шаблон (downlink template), понимает, что это запрос инициализации.
На основании активной и выбранной по умолчению для данного шаблона модели — «INIT Model» AIRCOM берет из полученного сообщения только бортовой номер ВС и отправляет его пользователю «INIT DB» (Special Accounts). Данный пользователь имеет тип – «Database».

— Пользователь «INIT DB» обращается к БД «INIT» и запускает хранимую процедуру на запись «msgReceive», при этом в БД «INIT» в таблицу «messages» добавляется новая строка, у которой в столбце «Treated» значение ноль (0).

— Хранимая процедура на чтение запускается автоматически – каждые 600 секунд (период запуска указан в файле AircomSrv.ini и может быть изменен) и, если в таблице «messages» есть строчки, имеющие значение «0» в столбце «Treated», возвращает отправляет в AIRCOM сообщение вида:

SUPER_INIT
<ACFT>AB-CDE</ACFT>
<FLIGHT>ZZ122</FLIGHT>
<FltNum>00223</FltNum>
<OS> </OS>
<DEP>UUDD</DEP>
<DEST>EHAM</DEST>
<STD>03</STD>
<ETD>1240</ETD>
<ETE>0340</ETE>

И в БД «INIT» в таблице «messages» в столбце «Treated» меняет значение с нуля (0) на единицу (1).

— AIRCOM, получив сообщение AUTO-INIT, записывает все данные в свою БД и, используя некий шаблон (Uplink Template из раздела «Special Accounts») и его некую модель по умолчанию отправляет на ВС данные по перелету.
Tags:
Hubs:
+6
Comments 4
Comments Comments 4

Articles