Berkenalan Dengan pdScript, Interpreter Pascal Buatan Precision Software And Consulting – Membuat Program Kontroler Modul Relay LPT-8REL


pdScript_About

pdScript (Precision Delphi Script) adalah sebuah program interpreter bahasa skrip Delphi/Pascal yang didukung dengan fasilitas pemrograman GUI yang cukup lengkap. Interpreter pdScript bersifat freeware untuk keperluan pribadi, pendidikan, ataupun korporasi.

Interpreter pdScript dapat mengeksekusi skrip Delphi/Pascal langsung dari lingkungan Windows, dari command-line, atau dari interpreter dynamic-library yang dijalankan dari dalam suatu program aplikasi (embedded script).

Dengan pdScript, kita juga dapat menghasilkan file executable dengan pilihan enkripsi untuk keperluan proteksi program. Untuk program-program aplikasi sederhana kita bisa menggunakan pdScript, sehingga dapat menjadi alternatif dari Delphi. Mantab, bukan?πŸ™‚

Berikut adalah aplikasi pdScript (simply copy-pasted from pdScript website):

  • Tasks automation – easy to use, yet powerful way to solve the current and/or recurring tasks
  • Externally used scripts – can be used as an independent (external) extension for your own applications
  • Integrated scripting – can serve as a scripting engine for your application’s plug-in mechanism
  • Development – can be used to design and run a simple, but ready to use, applications
  • At school – possibility of learning the Object Pascal language in simplified Delphi like environment

Untuk mendukung interpreter pdScript, Precision Software & Consulting juga menyediakan produk pdScript IDE. Lisensi pdScript IDE versi Lite dapat dibeli seharga 11 euro. Kalau dirupiahkan sekitar 140an ribu. Sangat terjangkau bukan?πŸ™‚

Memang tidak semua fitur Delphi ada pada pdScript karena memang pdScript tidak ditujukan untuk menggantikan Delphi. Yang sangat menarik adalah, pdScript IDE memiliki visual designer seperti layaknya Delphi. Komponen bawaannya juga banyak, sangat memadai untuk aplikasi desktop. Dan komponen penting yang jarang ditemukan pada IDE yang lain adalah komponen TStringGrid dan TSpeedButton. Keduanya adalah komponen favorit saya.πŸ™‚

pdScript_GUI

Untuk membuktikan sedikit kemampuan dari pdScript, marilah kita mencoba membuat program sederhana yakni program kontrol modul relay LPT-8REL.

image

Desain user-interface dari program kontrol modul relay LPT-8REL ditunjukkan oleh gambar di samping. Sangat sederhana, hanya terdiri dari 8 pasang button ON/OFF untuk masing-masing relay (RELAY-1 s/d RELAY-8) dan beberapa label, image, dan timer.

Untuk menyederhanakan skrip, maka kita berikan nomor tag pada setiap button. Untuk button RELAY-1: ON dan RELAY-1: OFF, kita berikan nilai properti Tag=1. Untuk button RELAY-2: ON dan RELAY-2: OFF, kita berikan nilai properti Tag=2. Dan seterusnya hingga button RELAY-8.

Nomor Tag ini nantinya akan digunakan untuk mengidentifikasi button manakah yang di-klik oleh user. Dengan teknik ini, skrip akan jauh lebih sederhana. Perhatikan listing program selengkapnya berikut ini.

//Controller LPT-8RELAY – Chandra MDE – http://teknikelektrolinks.com
program LPT8Relay;

var
  LPTAddress: Word;
  LPTValue: Byte;
  RelayOn: array[1..8] of Byte;
  RelayOff: array[1..8] of Byte;
function Inp32(PortAdr: word): byte; external ‘Inp32@inpout32.dll stdcall’;
function Out32(PortAdr: word; Data: byte): byte; external ‘Out32@inpout32.dll stdcall’;

procedure Relay(n: Byte; s: Byte);
begin
  LPTValue:= Inp32(LPTAddress);
  if s=0 then
    LPTValue:= LPTValue AND RelayOff[n]
  else
    LPTValue:= LPTValue OR RelayOn[n];
  Out32(LPTAddress, LPTValue);
end;

procedure ButtonClick(Sender: TObject);
begin
  if TButton(Sender).Caption=’ON’ then
  begin
    Relay(TButton(Sender).Tag, 1);
  end else if TButton(Sender).Caption=’OFF’ then
  begin
    Relay(TButton(Sender).Tag, 0);
  end;
end;

procedure Timer1_OnTimer(Sender: TObject);
begin
  Label3.Caption:= ‘Today: ‘ + FormatDateTime(‘dd/mm/yyyy – hh:mm:ss’, Now);
end;

procedure AssignEvents;
begin
  Button1.OnClick := @ButtonClick;
  Button2.OnClick := @ButtonClick;
  Button3.OnClick := @ButtonClick;
  Button4.OnClick := @ButtonClick;
  Button5.OnClick := @ButtonClick;
  Button6.OnClick := @ButtonClick;
  Button7.OnClick := @ButtonClick;
  Button8.OnClick := @ButtonClick;
  Button9.OnClick := @ButtonClick;
  Button10.OnClick := @ButtonClick;
  Button11.OnClick := @ButtonClick;
  Button12.OnClick := @ButtonClick;
  Button13.OnClick := @ButtonClick;
  Button14.OnClick := @ButtonClick;
  Button15.OnClick := @ButtonClick;
  Button16.OnClick := @ButtonClick;
  Timer1.OnTimer := @Timer1_OnTimer;
end;

var
  n: Byte;
begin
  RelayOn[1]:= 1;
  RelayOn[2]:= 2;
  RelayOn[3]:= 4;
  RelayOn[4]:= 8;
  RelayOn[5]:= 16;
  RelayOn[6]:= 32;
  RelayOn[7]:= 64;
  RelayOn[8]:= 128;
  for n:= 1 to 8 do RelayOff[n]:= 255-RelayOn[n];
  LPTValue:= 0;
  LPTAddress:= $378;
  AssignEvents;
end.

Jika Anda perhatikan, pada prosedur AssignEvents, Button1 s/d Button16 memiliki prosedur event-handler yang sama yakni ButtonClick. Dan pada prosedur ButtonClick dilakukanlah seleksi/identifikasi button manakah yang di-klik oleh user. Bandingkan jika masing-masing button memiliki prosedur event-handler sendiri-sendiri, pasti skripnya jauh lebih panjang.

Satu lagi yang perlu diketahui adalah pada pdScript kita tidak bisa menginisialisasi nilai variabel pada saat pendeklarasian seperti layaknya Delphi. Itulah sebabnya nilai array RelayOn dan RelayOff diisi secara manual menggunakan baris-baris perintah program.

Skrip di atas menggunakan library InpOut32.dll untuk mengakses port paralel LPT. Untuk itu perlu adanya pendeklarasian fungsi eksternal sebagai berikut:

function Inp32(PortAdr: word): byte; external ‘Inp32@inpout32.dll stdcall’;
function Out32(PortAdr: word; Data: byte): byte; external ‘Out32@inpout32.dll stdcall’;

Deklarasi tersebut sedikit berbeda dengan pendeklarasian pada Delphi/Lazarus.

Nah, bagaimanakah hasilnya jika skrip di atas kita running? Berikut adalah screenshot hasil interpretasi skrip di atas oleh pdScript.

image

Sederhana tapi mantab, bukan?πŸ˜€

Semoga bermanfaat!

πŸ™‚

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