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

от автора


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

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 ВС должны попасть из информационной системы авиакомпании (Netline, Meridian, Operations или иной), в которой формируется и корректируется расписание полетов.

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

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

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

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

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

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

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

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

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

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

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

Реализация


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

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

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

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

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 = 'AAM AUTO-INIT2 <TAIL>'+sc.tail+'</TAIL> <FLIGHT>RU'+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 в следующем виде:

AUTO_INIT UPLINK		– загловок сообщения (Header); <TAIL>AB-CDE</TAIL>		– бортовой номер ВС; <FLIGHT>ZZ123</FLIGHT>		– номер рейса; <FltNum>00223</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 записи с настройками для подключения к NetLine/Sched. Файл tnsnames.ora с настройками подключения к Netline обычно находится тут: C:\oracle\product\10.2.0\client_1\network\ADMIN

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

— Пилот отправляет 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 сообщение вида:

AUTO_INIT UPLINK <TAIL>AB-CDE</TAIL> <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, записывает все данные в свою БД и, используя шаблон «Auto Init Response» (Uplink Template из раздела «Special Accounts») и его модель по умолчанию «Auto Init Uplink — Model» отправляет на ВС данные по перелету.

ссылка на оригинал статьи http://habrahabr.ru/post/275005/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *