Program Kontrol Modul USB-2REL Menggunakan Lazarus/Free Pascal Dengan LibUSB.Pas


usb2rel_lazarus_libusb

Pada tulisan terdahulu, program kontrol modul USB-2REL versi Lazarus/Free Pascal masih menggunakan fungsi ShellExecute untuk mengeksekusi program USB2R.EXE. Tapi (alhamdulillaah) tidak demikian dengan program yang akan kita bahas pada tulisan ini.

Program kita kali ini akan langsung mengakses port USB menggunakan library libusb0.dll yang merupakan bawaan paket driver libusb-win32.

Special thanks to Stephan Meyer, Johannes Erdfelt, and Yvo Nelemans for providing the special unit LibUSB.Pas.

File LibUSB.Pas yang saya dapat dari sebuah forum berbahasa Jerman ini dibuat menggunakan Delphi, oleh karenanya perlu dilakukan sedikit modifikasi agar sesuai dengan aturan kompiler Free Pascal. Untuk versi Delphi, silakan baca di sini.πŸ˜€

File libusb.pas untuk Lazarus/Free Pascal lengkap dengan project Lazarus USB-2REL dapat Anda miliki dengan memberikan komentar pada tulisan ini. Cantumkan nama dan alamat email yang benar dan secepatnya akan saya emailkan link untuk mengunduh file project Lazarus yang dimaksud.πŸ™‚

Agar program dapat berkomunikasi dengan modul USB-2REL, maka program harus memiliki handle (pointer) dari modul USB-2REL. Untuk keperluan itu, kita buat sebuah fungsi untuk mencari dan mendapatkan handle suatu piranti USB sebagai berikut:

function USBFindDevice(VID, PID: word): pUSB_Device;
var
  bus: PUSB_BUS;
  dev: PUSB_device;
begin
  result := nil;
  usb_init();
  usb_find_busses();
  usb_find_devices();
  bus:=USB_get_Busses;
  while (bus<>nil) do
  begin
    dev:= bus^.devices;
    while (dev<>nil) do begin
      if (dev^.descriptor.idVendor=VID) and (dev^.descriptor.idProduct=PID) then
        result:=dev;
      dev:=dev^.next;
    end;
    bus:=bus^.next;
  end;
end;

Dengan menggunakan fungsi USBFindDevice(), program mencari dan mendapatkan handle dari modul USB-2REL ketika form diciptakan. Berikut adalah rutin dari event FormCreate:

procedure TForm1.FormCreate(Sender: TObject);
begin
  USB2REL_Device:= USBFindDevice(5824, 1500);
  USB2REL_Handle:= usb_open(USB2REL_Device);
end;

Jika rutin di atas berhasil, maka handle dari modul USB-2REL akan tersimpan pada variabel USB2REL_Handle.

Catatan: Pada contoh program ini tidak dilakukan proses validasi apakah fungsi berhasil mendapatkan handle ataukah tidak. Silakan ditambahkan sendiri ya.πŸ˜€

Untuk mengontrol relay-relay modul USB-2REL, digunakan fungsi usb_control_msg() sebagai berikut:

procedure TForm1.btnRelay1OnClick(Sender: TObject);
begin
  usb_control_msg(USB2REL_Handle, $40, 1, 1, 1, buffer, sizeof(buffer), 5000);
  grpRelay1.Caption:= ‘ RELAY-1 = ON ‘;
end;

procedure TForm1.btnRelay1OffClick(Sender: TObject);
begin
  usb_control_msg(USB2REL_Handle, $40, 1, 0, 1, buffer, sizeof(buffer), 5000);
  grpRelay1.Caption:= ‘ RELAY-1 = OFF ‘;
end;

procedure TForm1.btnRelay2OnClick(Sender: TObject);
begin
  usb_control_msg(USB2REL_Handle, $40, 1, 1, 2, buffer, sizeof(buffer), 5000);
  grpRelay2.Caption:= ‘ RELAY-2 = ON ‘;
end;

procedure TForm1.btnRelay2OffClick(Sender: TObject);
begin
  usb_control_msg(USB2REL_Handle, $40, 1, 0, 2, buffer, sizeof(buffer), 5000);
  grpRelay2.Caption:= ‘ RELAY-2 = OFF ‘;
end;

procedure TForm1.btnAllRelayOnClick(Sender: TObject);
begin
  usb_control_msg(USB2REL_Handle, $40, 2, 0, 0, buffer, sizeof(buffer), 5000);
  grpRelay1.Caption:= ‘ RELAY-1 = ON ‘;
  grpRelay2.Caption:= ‘ RELAY-2 = ON ‘;
end;

procedure TForm1.btnAllRelayOffClick(Sender: TObject);
begin
  usb_control_msg(USB2REL_Handle, $40, 3, 0, 0, buffer, sizeof(buffer), 5000);
  grpRelay1.Caption:= ‘ RELAY-1 = OFF ‘;
  grpRelay2.Caption:= ‘ RELAY-2 = OFF ‘;
end;

Project selengkapnya dapat Anda miliki dengan memberikan komentar Anda pada tulisan ini. Cantumkan nama dan alamat email yang benar dan secepatnya akan kami kirimkan download link untuk mengunduh file project Lazarus yang dimaksud.

Modul USB-2REL dapat Anda peroleh di: http://teknikelektrolinks.com.

Selamat belajar dan selamat berkarya!

πŸ™‚

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s