Интернет-магазин

Просмотр корзины
В корзине:

товаров - 0 шт.



§ 26. WoodmanUSB. Программирование в Delphi

Дмитрий Иванов, 09 Декабря 2013

Файлы к статье скачать
Имя: KA026.zip (ZIP архив)
Размер: 232 КБ

Знаю, что значительная часть программистов работает на языке Delphi, поэтому считаю необходимым рассмотреть программирование WoodmanUSB и на этом языке. Сделаем приложение, как в прошлой статье, но на языке Delphi в среде разработки Borland Delphi 7.0.

Запускаем среду разработки и сразу же попадаем к заготовке пустой формы для нашего приложения. Лучше сразу же сохранить проект командой File -> Save Project as...

Предлагаю оставить внешний вид программы без изменений, как он был в прошлой статье. Тогда, добавляем на форму необходимые элементы управления. В результет должно получиться нечто вроде такого:

Теперь займемся кодом программы. В первую очерь, необходимо каким либо образом подключить библиотеку WUSBdrv.dll к проетку. Будем использовать динамическое включение. Для этого поместите библиотеку в папку к проекту. Далее в коде опишем объявления функций, которые будут экспортироваться из библиотеки:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

  function WUSB_Open():Longint; cdecl; external 'WUSBdrv.dll';
  function WUSB_SetupPortA(iomsk: Byte):Longint; cdecl; external 'WUSBdrv.dll';
  function WUSB_WritePortA(value: Byte):Longint; cdecl; external 'WUSBdrv.dll';
  function WUSB_ReadPortA(value: Pointer):Longint; cdecl; external 'WUSBdrv.dll';

type
  TForm1 = class(TForm)
.........

Итак, функции библиотеки описали. Теперь можно заняться и обработчиками нажатий на кнопки формы. Начнем, разумеется, с кнопки Open WoodmanUSB. Дваждя щелкаем на нее. Нас переносит к пустой заготовке обработчика. Дополняем код до следующего вида:

procedure TForm1.Button1Click(Sender: TObject);
var
    status: Longint;
begin
    status:=WUSB_Open();
    if status = 1 then
      begin
        MessageDlg('Open Ok', mtInformation, [mbOK], 0);
      end
      else
      begin
        MessageDlg('Open Error...', mtError, [mbOK], 0);
      end
end;

Я думаю пояснять данный код не следует, за исключением значения с которым анализируется переменная status. В коде на C++ мы использовали константы WUSB_OK и WUSB_ERROR определенные через оператор препроцессора #define. В Delphi коде необходимо переопределить эти константы. Для такой простой программы я этого не делал, а просто указал числовое значение данной константы.


Опишем обработчик кнопки установки маски ввода-вывода. По уже отлаженной схеме добавляем следующий код:

procedure TForm1.Button2Click(Sender: TObject);
var
    status: Longint;
begin
    status := WUSB_SetupPortA(StrToInt(Edit1.Text));
    if status = 0 then
      begin
        MessageDlg('Setup Error', mtInformation, [mbOK], 0);
      end
      else
      begin
         MessageDlg('Setup OK', mtInformation, [mbOK], 0);
      end
end;

Здесь я позволил себе не проводить дополнительных проверок на адекватность вводимых данных. В функцию WUSB_SetupPortA() необходимо передать число. Получаем его из соответствующего окошка ввода-вывода, используя функцию StrToInt(), преобразующую текст в число. Остальное должно быть вполне понятным.


Обработчик кнопки записи данных:

procedure TForm1.Button3Click(Sender: TObject);
var
    status: Longint;
begin
    status := WUSB_WritePortA(StrToInt(Edit2.Text));
    if status = 0 then
      begin
        MessageDlg('Write Error', mtInformation, [mbOK], 0);
      end
end;

Ну и под конец обработчик кнопки чтения данных:

procedure TForm1.Button4Click(Sender: TObject);
var
    status: Longint;
    data: Byte;
begin
    status := WUSB_ReadPortA(@data);
    if status = 0 then
      begin
        MessageDlg('Read Error', mtInformation, [mbOK], 0);
      end
    else
      begin
        Edit3.Text:= IntToStr(data);
      end
end;


На этом все. Можно компилировать и запускать. Должно все работать. Не забудьте только модуль к компьютеру подключить.

режимы работы порта PORTB модуля WoodmanUSB WoodmanUSB

© Дмитрий Иванов
09 Декабря 2013 года
http://www.kernelchip.ru



© KERNELCHIP 2006 - 2017