среда, 2 декабря 2015 г.

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

Данная библиотека (далее DLL), для работы с абсолютным энкодером Baumer GXM7W-RS485 (интеллектуальным датчиком оборотов) по сети RS-485 через физический или виртуальный СOM-порт over USB в ОС NT/2000/2003/XP/Vista/7/8, предназначена для осуществления запросов, чтения и декодирования данных о номере оборота, шага (угла) и мгновенной скорости c 4-х энкодеров на одной линии. Опрос энкодеров осуществляется автоматически.



Видео, присланное Вадимом Хановым с результатами тестов моей библиотеки на энкодере:



Cистемные требования и зависимости
  1. Windows XP/Vista/7/8/8.1.
  2. Наличие виртуального или физического COM-порта over RS-485 (конвертор RS-485/USB/RS-232).
  3. Абсолютный энкодер Baumer GXM7W-RS485.
  4. Двухпроводная диффлиния RS-485.
DLL предоставляет универсальный доступ для других приложений вне зависимости от языка в среде Win OS. Для использования DLL в своих проектах соблюдайте соглашение об stdcall-вызовах. Тип соглашения о вызове объявляется после прототипа функции, будь то объявление функционального типа или же объявление функции.

 Таблица расшифровок параметров экспортируемой функции 'reinit()' библиотеки:
 Параметр Функционал Тип переменной
 =============================================================
 comnum [in] Номер COM порта Byte
 enable [in] Активировать/деактивировать Boolean
 result [out] Признак выполнения Boolean
Таблица расшифровок параметров экспортируемой процедуры 'getdata()' библиотеки:
 Параметр Функционал Тип переменной
 ===========================================================
 address [out] Адрес ответившего энкодера Byte
 oborot [out] Номер оборота Word
 step [out] Шаг (угол) Word
 gl_count [out] Количество принятых пакетов Integer
 vm [out] Мгновенная скорость (об/сек) Double
 result [out] Статус CRC PAnsiChar
Пример динамического подключения (Delphi 6/7/2006/2009/2010/TDL/XE5):
var en_com: boolean;
    getdata:function(var adr: byte;        // receiver address
                     var oborot: word;     // oborot
                     var step: word;       // step
                     var gl_count: integer;// number of packets
                     var vm: double        // speed, ob/sec
                     ): pansichar;         // CRC status
                     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('GXM7WRS485.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 adr: byte;         // receiver address
    oborot,            // oborot
    step: word;        // step
    gl_count: integer; // number of packets
    vm: double;
    status: pansichar;
begin
 if en_com then begin
  statusbar1.panels[0].Text:= 'connected!';

  status:= getdata(adr,
                   oborot,
                   step,
                   gl_count,
                   vm
                  );

  list.Cells[1, 1]:= format('%d', [adr]);
  list.Cells[1, 2]:= format('%d', [oborot]);
  list.Cells[1, 3]:= format('%d', [step]);
  list.Cells[1, 4]:= status;
  list.Cells[1, 5]:= format('%d', [gl_count]);
  list.Cells[1, 6]:= format('%f', [vm]);
 end else begin
  statusbar1.panels[0].Text:= 'not connected...';

  list.Cells[1, 1]:= '';
  list.Cells[1, 2]:= '';
  list.Cells[1, 3]:= '';
  list.Cells[1, 4]:= '';
  list.Cells[1, 5]:= '';
  list.Cells[1, 6]:= '';
 end;
...
ПОРЯДОК ИСПОЛЬЗОВАНИЯ и ОГРАНИЧЕНИЯ
  1. Вы можете произвольно задавать COM порт в процедуре 'reinit()' с постоянно поднятым флагом активации, в библиотеке это обрабатывается. В библиотеке осуществляется автоотслеживание выдергивания конвертора RS-485/USB (через SetupAPI) и переподключение на заданный при инициализации порт.
  2. Параметр gl_count процедуры 'getdata' отображает количество принятых пакетов данных из COM-порта вне зависимости от CRC.
  3. Выдача данных осуществляется при совпадении контрольной суммы в принятом пакете данных и расчетной контрольной суммы по данным пакета, при несовпадении функция вернет текст 'CRC invalid'. 
  4. Количество шагов на один оборот 8192.
  5. Aдрес энкодера [2...5] задается физически комбинацией подтяжек к земле пинов 4 и 6 вилки DIN EN 61000-6-2 (в даташите несоответствие, видимо выпущена модификация с pullup-резисторами внутри)
 Адрес Pin.4 Pin.6
 =====================
 2 1 1
 3 0 1
 4 1 0
 5 0 0
cкачать или скачать (с моего SourceForge)

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

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

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