воскресенье, 8 ноября 2015 г.

Читаем мультиметр. Описание API вызова библиотеки APPA109N.DLL

Данная библиотека (далее DLL), для работы с мультиметром APPA-109N через физический или виртуальный СOM-порт over USB в ОС NT/2000/2003/XP/Vista/7/8, предназначена для осуществления запросов, чтения и декодирования данных измерений по протоколу APPA WinDMM100 95/98. DLL предоставляет универсальный доступ для других приложений вне зависимости от языка в среде Win OS. Для использования DLL в своих проектах соблюдайте соглашение об stdcall-вызовах. Тип соглашения о вызове объявляется после прототипа функции, будь то объявление функционального типа или же объявление функции.



Cистемные требования и зависимости:

  1. Windows XP/Vista/7/8/8.1.
  2. Наличие виртуального или физического COM-порта.
  3. Мультиметр APPA-109N.
 Таблица расшифровок параметров экспортируемой функции 'reinit()' библиотеки:
 Параметр Функционал Тип переменной
 ============================================================
 comnum [in] Номер COM порта Byte
 enable [in] Активировать/деактивировать Boolean
 result [out] Признак выполнения Boolean
Таблица расшифровок параметров экспортируемой процедуры 'getdata()' библиотеки:
 Параметр Функционал Тип переменной
 ===============================================================
 bluecode [out] Mode PAnsiChar
 rotorcode [out] Edinizi izm PAnsiChar
 rangecode [out] Range PAnsiChar
 main_func [out] Main function PAnsiChar
 main_unit [out] Main unit PAnsiChar
 sub_func [out] Sub function PAnsiChar
 sub_unit [out] Sub unit PAnsiChar
 main_value [out] Main value DWord
 sub_value [out] Sub value DWord
 main_exp [out] Main exponente Byte
 sub_exp [out] Sub exponente Byte
 gl_count [out] Количество принятых пакетов Integer
Пример динамического подключения (Delphi 6/7/2006/2009/2010/TDL/XE5):
var en_com: boolean;
    getdata:procedure(var bluecode,   // mode
                      rotorcode,      // edinizi izm
                      rangecode,      // range
                      main_func,      // main function
                      main_unit,      // main unit
                      sub_func,       // sub function
                      sub_unit        // sub unit
                      : pansichar;
                      var main_value, // main value
                      sub_value       // sub value
                      : dword;
                      var main_exp,   // main exponente
                      sub_exp         // sub exponente
                      : byte;
                      var gl_count: integer // количество принятых пакетов
                      ); stdcall;
  reinit:function(comnum: byte; enable: boolean): boolean; stdcall;
  LibHandle: THandle;


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


{ инициализация }
 LibHandle:= LoadLibrary('APPA109N.dll');
 if LibHandle<>0 then begin
  getdata:= LinkProc('getdata');
  reinit := LinkProc('reinit');

  reinit(1 {COM1}, true);
 end;

...


{ деинициализация }
 if LibHandle<>0 then begin
  reinit(0, false);
  freelibrary(LibHandle)
 end;
...


{ чтение данных }
var bluecode, rotorcode, rangecode, main_func,
    main_unit, sub_func, sub_unit: pansichar;
    main_value,sub_value: dword;
    main_exp,sub_exp: byte;
    gl_count: integer;
begin
  getdata(bluecode,   // mode
          rotorcode,  // edinizi izm
          rangecode,  // range
          main_func,  // main function
          main_unit,  // main unit
          sub_func,   // sub function
          sub_unit,   // sub unit
          main_value, // main value
          sub_value,  // sub value
          main_exp,   // main exponente
          sub_exp,    // sub exponente
          gl_count    // количество принятых пакетов
          );

  list.Cells[1, 1] := bluecode;
  list.Cells[1, 2] := rotorcode;
  list.Cells[1, 3] := rangecode;
  list.Cells[1, 4] := main_func;
  list.Cells[1, 5] := main_unit;
  list.Cells[1, 6] := format('%d', [main_exp]);
  list.Cells[1, 7] := format('%d', [main_value]);
  list.Cells[1, 8] := sub_func;
  list.Cells[1, 9] := sub_unit;
  list.Cells[1, 10]:= format('%d', [sub_exp]);
  list.Cells[1, 11]:= format('%d', [sub_value]);
  list.Cells[1, 12]:= format('%d', [gl_count]);
...

ПОРЯДОК ИСПОЛЬЗОВАНИЯ и ОГРАНИЧЕНИЯ
  1. Вы можете произвольно задавать COM порт в процедуре 'reinit()' с постоянно поднятым флагом активации, в библиотеке это обрабатывается.
  2. Параметр gl_count процедуры 'getdata' отображает количество принятых пакетов данных из COM-порта вне зависимости от CRC.
  3. Выдача данных осуществляется при совпадении контрольной суммы в принятом пакете данных и расчетной контрольной суммы по данным пакета, при несовпадении в параметре bluecode будет задан текст 'CRC invalid.'.

cкачать или скачать (с моего SourceForge)

1 комментарий:

  1. Выпущено обновление библиотеки APPA109N.DLL для поддержки старых версий мультиметров APPA серии 100. Ссылка для скачивания прежняя.

    ОтветитьУдалить

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