Немного теории
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» отправляет на ВС данные по перелету.
ANTPro
Вот поэтому лучше использовать комплексные решения для автоматизации в авиакомпании. А то таких костылей со временем будет вагон :)
tegrato
Например?
ANTPro
Авиабит