пятница, 24 октября 2014 г.

Описание API вызова библиотеки SpaceMeteoAPI.DLL

Данная библиотека (далее DLL) предназначена для работы с FTP сервисом гидрометеорологического спутника «Электро-Л» №1 Федерального космического агентства НЦ ОМЗ в ОС NT/2000/2003/XP/7/8, и осуществляет анимированную сборку (визуализацию) фотографий Земли с целью прогнозирования движения облачных масс в ИК или видимом спектре, либо же одновременно за заданный период времени до текущего момента в формате Graphics Interchange Format (GIF) или Audio Video Interleave (AVI, компрессия осуществляется через доступные VFW- кодеки), с возможностью архивации снимков в формате BMP/JPEG.

Оперативный мониторинг Земли в режиме синхронного наблюдения:



КА «Электро-Л» №1 обеспечивает многоспектральную съемку всего диска Земли в видимом и ИК диапазонах с разрешением 1 и 4 км, соответственно. Штатная периодичность съемки — 30 минут (44 снимка за сутки для одного из режимов). В случае наблюдения стихийных явлений периодичность съемки по командам с Земли может быть доведена до 15 минут.

Полученная анимация (GIF) за один день (видимый участок спектра и ИК):



 Cистемные требования и зависимости:
  1. Win OS (NT/2003/XP/7/8).
  2. Интернет.
DLL предоставляет универсальный доступ для других приложений вне зависимости от языка в среде Win32 (64-bit не тестировалось). Для использования DLL в своих проектах соблюдайте соглашение об stdcall-вызовах. Тип соглашения о вызове объявляется после прототипа функции, будь то объявление функционального типа или же объявление функции.

Таблица расшифровок входных и выходных параметров экспортируемой функции 'meteo()' библиотеки 'SpaceMeteoAPI.DLL':


Пример динамического подключения (Delphi 6/7/2006/2009/2010/TDL/XE5):
type t = class(TThread) // класс потока
       procedure Execute; override;
       procedure f;
     end;
     tmas = array of pansichar;

var  meteo: function(delta_day,          // период наблюдения до текущего дня [0..n]
                     flag_ik: integer;   // режим ИК/видимый спектр/одновременное наблюдение
                     flag_bmp,           // визуализация периода архива BMP
                     flag_jpg,           // визуализация периода архива JPEG
                     flag_avi,           // визуализация периода в AVI
                     flag_gif,           // визуализация периода в GIF
                     flag_play: boolean; // звуковое логгирование операций
                     codec: pansichar):  // имя компрессора (кодека)
                     pansichar; stdcall; // отчет о выполнении
           
     listcodec: function(var list:       // список кодеков в системе
                         tmas): pansichar; stdcall;
     LibHandle: THandle;




function LinkProc(ProcName: string):Pointer;
begin
 result:= GetProcAddress(LibHandle, PChar(ProcName))
end;


{ инициализация }
var temp: tmas;
    i: integer;
begin
 LibHandle:= LoadLibrary('SpaceMeteoAPI.DLL');
 if LibHandle<>0 then begin
  meteo    := LinkProc('meteo');
  listcodec:= LinkProc('listcodec')
 end;

 // список установленных кодеков
 listcodec(temp);
 for i:= 0 to length(temp)-1 do
  tocodec.Items.Add(temp[i]);

 // создаем поток, чтобы не зависеть от тайминга DLL
 tt:= t.Create(false);
...


{ пример вызова }
begin
 // разрешаем индикацию процесса
 flag_ind:= true;
 // взводим триггер разрешения выполнения
 trigger := true;
...

procedure t.f;
begin
 // отключаем индикацию процесса
 flag_ind:= false;
end;


procedure t.Execute;
begin
 while true do begin
  sleep(100);

  if (LibHandle <> 0) and (trigger) then begin
    trigger:= false; // однократное выполнение

    try
     meteo(gl_delta, // период наблюдения до текущего дня [0..n]
           2,        // режим ИК(0)/видимый спектр(1)/двойной(2)
           false,    // визуализация периода архива BMP
           true,     // визуализация периода архива JPEG
           true,     // визуализация периода в AVI
           false,    // визуализация периода в GIF
           true,     // звуковое логгирование операций
           _codec    // кодек при сохранении в AVI    
           );
    except end;
   
    // обращение к VCL и разрешаем воспроизведение
    Synchronize(f);
  end

 end
end;
...
Пример использования в Excel (макроса в VBA):
Declare Function meteo Lib "SpaceMeteoAPI.DLL" (ByVal delta_day As Integer, ByVal flag_ik As Integer, ByVal flag_bmp As Boolean, ByVal flag_jpg As Boolean, ByVal flag_avi As Boolean, ByVal flag_gif As Boolean, ByVal flag_play As Boolean, ByVal codec As String) As String

Sub TestMacros()
 RESULT = meteo(0, 1, true, true, true, true, true, "XVID")
End Sub


Private Sub Command1_Click()
 MsgBox meteo(0, 1, true, true, true, true, true, "XVID")
End Sub
Пример использования через dynwrapX.dll в VBS:
' регистрируем COM объект DynamicWrapperX в тихом режиме
Dim WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run ("regsvr32.exe dynwrapx.dll /s"),3, true

' создаем объект DynamicWrapperX
Set Wrap = CreateObject("DynamicWrapperX")
Wrap.Register "SpaceMeteoAPI.dll", "meteo", "i=llbbbbbs", "f=s", "r=s"

' вызываем функцию
txt = Wrap.meteo(0, 2, 0, 1, 1, 0, 1, "XVID")
WScript.Sleep 1500 'кол-во миллисекунд

ПОРЯДОК ИСПОЛЬЗОВАНИЯ
  1. Параметр 'delta_day' функции 'meteo()' определяет смещение (назад) в днях от текущего момента и задает временной период наблюдения визуализации. При установке параметра =0, будет проведена выборка за текущий день.
  2. При задании всех логических параметров функции 'meteo()' в FALSE, параметр 'flag_avi' будет принудительно установлен в TRUE.
  3. Параметр 'flag_ik' функции 'meteo()' задает режим наблюдения за облачными массами в ИК спектре (=0) или видимом участке диапазона (=1), либо же совмещение обеих режимов в одном кадре для удобства анализа (=2). В последнем случае, для сохранения исходного разрешения снимков и четкости формат кадра удваивается по ширине.
  4. Обратите внимание, при выборе временного периода для сборки в GIF более 4-х дней (считая с нулевого) требуется более гигабайта оперативной памяти, при сборке в AVI требований по дополнительной памяти нет.
  5. Поддерживаемые форматы архивации и сборки: GIF, AVI (с компрессией), BMP, JPEG



скачать

Комментариев нет:

Отправить комментарий

В комментариях уважайте собеседника, внимательно читайте посты и не додумывайте. Просьбы и предложения из разряда: «можно ваш Skype/Viber/телефон», «напишите мне в vk/FB», а также другие им подобные — игнорируются. Выход новых версий ПО, внешняя ссылка, переставшая работать с течением времени и т.п. не является основанием для претензий. Желающие спокойно подискутировать и высказаться — Welcome. Желающие спонсировать блог — Donate. Нарушение этих простых правил ведет к бану и удалению комментариев без предупреждения.