Minggu, 21 Agustus 2011

Memperkecil size Lazarus


Perkecil size Executable Lazarus
Pertama kali saya heran, aplikasi sederhana  yang saya bikin dengan Lazarus cukup mencengangkan... Wah kok size file executablenya kok sampai 25 MB wah kok bisa membengkak sampai segitu ya? padahal pada komponen yang saya tempatkan pada form hanya beberapa komponen saja tidak lebih dari 4 komponen saja. katanya ukuran yang membengkak itu disebabkan karena file itu mengandung debug information yang dipergunakan gdb (GNU debugger).
Terus saya iseng - iseng otak atik kesana kemai, eh akhirnya bisa juga file sizenya diperkecil,,, coba kita bahas disini. Caranya masuk 
  1. Project -> Project Options -> Code Generation -> Smart Linkable (-CX) -> dicentang

  2. Project -> Project Options -> Linking|Debugging -> yang dicentang hanya Strip Symbols From Executable (-Xs)

  3. Project -> Project Options|Linking -> Link Style -> Link Smart (-XX) -> dicentang

Nah setelah saya atur terlebih dahulu sebelum membuat aplikasi sederhana, size yang awalnya 25 MB sekarang bisa mengeceil sampai 1.5 MB. Tapi inget sebelum membuat aplikasi program anda setting pengaturan diatas terlebih dahulu baru jalankan Run (F9). Semoga artikel kecil ini bisa membantu..

Jumat, 19 Agustus 2011

Lazarus

LAZARUS

Lagi asik-asiknya belajar Delphi, bikin program - program kecil,, eh ternyata harus beli lisensi kalau di pakai di kantor.. Wah kalau harganya ga lebih mahal dari harga 1 bungkus nasi seh ga ada masalah... Terus iseng-iseng lagi berselancar di dunia maya eh ketemu deh dengan namanya Lazarus, awalnya seh ga tahu sama sekali terus saya instal dikomputerku kok tampilanya mirip sama sekali dengan Delphi terus kok tampilan screen savernya kok Free Pascal wah ternyata Lazarus lisensinya GPL (gratis nih dan open source lagi).

Lazarus merupakan salah satu bahasa pemrograman yang didasarkan atas komponen-komponen visual/non visual yang berbasis free pascal.  Lazarus merupakan software RAD (Rapid Application Development) untuk tool pengembangan pascal sehingga kita dapat mengembangkan aplikasi secara mudah dan cepat.  Lazarus dapat berjalan diatas lingkungan  Linux, Mac OS X, BSD dan tentunya Windows yang merupakan software gratis dan open source serta Library component yang dibutuhkan dibawah lisensi GNU Lasser General Public License. 

Lazarus merupakan sebuah alat pengembangan aplikasi yang bersifat cross-platform dan merupakan IDE (integrated development environment) untuk bahasa pemrogaman pascal yang berbasis object Free Pascal Compiler.  Lazarus memiliki arsitektur pemrograman yang mirip dengan Borland Delphi.

Lazarus merupakan IDE (integrated development environment) untuk bahasa pemrograman pascal yang berbasis object. Compiler free pascal menyediakan IDE ini dalam Lazarus.  Lazarus merupakan IDE yang mempunyai kemampuan RAD (Rapid Application Development) yang memudahkan dalam pengembangan program-program grafis yang sebagian besar mirip dengan Delphi. Perbedaannya hanya pada compilernya, Delphi berdasarkan compiler Delphi sedangkan Lazarus berdasarkan free pascal compiler (FPC) yang secara luas kompatibel dengan Delphi 2007. FPC ini dapat mendeteksi kode yang tidak kompatibel dan menghasilkan peringatan kesalahan. Hal ini dikarenakan FPC mencakup ekstensi dari pascal.

Kelebihan yang lain, Lazarus tidak hanya berjalan dilingkungan sistem operasi Windows, namun dapat berjalan lingkungan Linux, MacOS X, platform BSD dan lainnya.

Paket komponen grafis untuk lazarus dinamakan dengan LCL (Lazarus Component Library).  Banyak paket komponen yang memiliki nama dan fungsi yang sama seperti di Delphi, sehingga source code di Delphi dapat langsung diposting ke Lazarus. Namun lazarus bukan termasuk Delphi. Perbedaan utama yang lain yaitu lazarus mendukung penuh open source.


Lazarus merupakan sebuah alat pengembangan aplikasi yang bersifat cross-platform dan merupakan IDE (integrated development environment) untuk bahasa pemrogaman pascal yang berbasis object Free Pascal Compiler. Lazarus memiliki arsitektur pemrograman yang mirip dengan Borland Delphi. 
 
Lazarus merupakan IDE (integrated development environment) untuk bahasa pemrograman pascal yang berbasis object. Compiler free pascal menyediakan IDE ini dalam Lazarus. Lazarus merupakan IDE yang mempunyai kemampuan RAD (Rapid Application Development) yang memudahkan dalam pengembangan program-program grafis yang sebagian besar mirip dengan Delphi. Perbedaannya hanya pada compilernya, Delphi berdasarkan compiler Delphi sedangkan Lazarus berdasarkan free pascal compiler (FPC) yang secara luas kompatibel dengan Delphi 2007. FPC ini dapat mendeteksi kode yang tidak kompatibel dan menghasilkan peringatan kesalahan. Hal ini dikarenakan FPC mencakup ekstensi dari pascal.

Kelebihan yang lain, Lazarus tidak hanya berjalan dilingkungan sistem operasi Windows, namun dapat berjalan lingkungan Linux, MacOS X, platform BSD dan lainnya..

Paket komponen grafis untuk lazarus dinamakan dengan LCL (Lazarus Component Library). Banyak paket komponen yang memiliki nama dan fungsi yang sama seperti di Delphi, sehingga source code di Delphi dapat langsung diposting ke Lazarus. Namun lazarus bukan termasuk Delphi. Perbedaan utama yang lain yaitu lazarus mendukung penuh open source.

- Download lazarus. 

 



Kamis, 18 Agustus 2011

Ping IP dengan Delphi II

Ping IP dengan Delphi II

Pada artikel yang saya bahas sebelumnya (ping IP dengan Delphi) mempunyai kelemahan jika koneksi yang terhubung menggunakan jaringan radio maupun speedy alias bisa berfungsi dengan baik jika terhubung dalam sebuah jaringan lokal. Akhirnya saya coba cari-cari lagi, ternyata delphi sudah menyediakan komponen tersendiri untuk melakukan tugas semacam ini dengan bantuan komponen IdIcmpClient keluarga dari Indy Client. Kita langsung saja bahas aplikasi sederhana saja ya..

Pertama sediakan beberapa komponen diantaranya:
1. IdIcmpClient1  properties name ICMP
2. Memo1 properties name lstReplies
3. Timer1
4. Button1
5. Button2

source code lengkapnya ada sebagai berikit:

/////.....................................................................................
var
  Form1: TForm1;
  ipserver:string;

type
    EidSocketError=class(Exception);
    EFopenError=class(Exception);

implementation

{$R *.dfm}

procedure TForm1.ICMPReplyinduk(ASender: TComponent;
  const ReplyStatus: TReplyStatus);
var
  sTime: string;
begin
  if (ReplyStatus.MsRoundTripTime = 0) then
    sTime := '<1'
  else
    sTime := '=';
    ipserver:=Format('%s', [ReplyStatus.FromIpAddress]);
    if ipserver='127.0.0.1' then
      begin
        lstReplies.Items.Add(Format('Koneksi 127.0.0.1 Lancar: bytes=%d time%s%d ms TTL=%d',
        [ReplyStatus.BytesReceived,
        sTime,
        ReplyStatus.TimeToLive,
        ReplyStatus.MsRoundTripTime]));
      end
    else
      begin
        lstReplies.Items.Add(Format('Koneksi 127.0.0.1 Lemah: bytes=%d time%s%d ms TTL=%d',
        [ReplyStatus.BytesReceived,
        sTime,
        ReplyStatus.TimeToLive,
        ReplyStatus.MsRoundTripTime]));
      end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  try
    ICMP.OnReply := ICMPReplyinduk;
    ICMP.ReceiveTimeout := 1000;
    ICMP.Host :='127.0.0.1' ;
    ICMP.Ping;
    Application.ProcessMessages;
  except
    begin
      lstReplies.Items.Add('Tidak bisa terhubung ke jaringan');
    end;
  end;
end;

procedure TForm1.btncekClick(Sender: TObject);
begin
  if btncek.Caption ='Cek Koneksi' then
    begin
      btncek.Caption:='Stop';
      timer1.Enabled:=true;
    end
  else
  if btncek.Caption ='Stop' then
    begin
      btncek.Caption:='Cek Koneksi';
      timer1.Enabled:=false;
      lstReplies.Clear;
    end;
end;

procedure TForm1.btnexitClick(Sender: TObject);
begin
  application.Terminate ;
end;
/////.....................................................................................

Monggo dicoba semoga bermanfaat...

Sabtu, 28 Mei 2011

Ping IP dengan Delphi

Ping IP dengan Delphi

       Setelah kemaren kita belajar cara mengambil informasi yang didapatkan dari perintah yang kita ketikkan di command prompt, Sekarang saya coba membagi hasil temuan saya didunia maya, yaitu cara melakukan cek koneksi ke nomor IP tertentu dalam suatu jaringan. Seperti halnya di command prompt jika kita ingin mengetahui komputer dengan nomor IP tertentu tersambung dengan jariangan komputer kita kettikkan "ping nomor_IP' dicommand prompt. Pada kesempatan kali ini kita coba akab belajar cara melakukan ping nomor IP tertentu dalam sebuah jaringan dengan program Visual yaitu dengan Delphi tidak lagi dengan mengetikkan perintah di DOS.
      Pertama siapkan beberapa komponen diantaranya :
1. Button,
2. Edit
3. Timer
4. Label
     dengan tampilan program sebagai contoh seperti ini:
     Sekarang kita kettikan subroutin program seperti dibawah ini:

unit UContoh;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, WinSock, StdCtrls, ExtCtrls, WinSkinData, SUIForm;

type
  TForm1 = class(TForm)
    suiForm1: TsuiForm;
    Label1: TLabel;
    Label2: TLabel;
    Bevel1: TBevel;
    Memo1: TMemo;
    Edit1: TEdit;
    Button2: TButton;
    Timer1: TTimer;
    procedure Button2Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

type
  IPINFO = record
  Ttl     :char;
  Tos     :char;
  IPFlags :char;
  OptSize :char;
  Options :^char;
end;

type
  ICMPECHO = record
  Source  :longint;
  Status  :longint;
  RTTime  :longint;
  DataSize:Shortint;
  Reserved:Shortint;
  pData   :^variant;
  i_ipinfo:IPINFO;
end;

TIcmpCreateFile = function():integer; {$IFDEF WIN32} stdcall; {$ENDIF}
TIcmpCloseHandle = procedure(var handle:integer);{$IFDEF WIN32} stdcall; {$ENDIF}
TIcmpSendEcho = function(var handle:integer; endereco:DWORD; buffer:variant; tam:WORD; IP:IPINFO; ICMP:ICMPECHO; tamicmp:DWORD; tempo:DWORD):DWORD;{$IFDEF WIN32} stdcall; {$ENDIF}


var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);
begin
    Close;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
wsadt     : wsadata;
icmp      : icmpecho;
HNDicmp   : integer;
Host      : PHostEnt;
Destino   : in_addr;
IP        : ipinfo;
Retorno   : integer;
x         : integer;

IcmpCreateFile  : TIcmpCreateFile;
IcmpCloseHandle : TIcmpCloseHandle;
IcmpSendEcho    : TIcmpSendEcho;

begin

Memo1.Clear;

if (edit1.Text = '') then
  begin
      edit1.Text:='localhost';
  exit;
  end;  


HNDicmp := LoadLibrary('ICMP.DLL');

if (HNDicmp <> 0) then
  begin

  @IcmpCreateFile := GetProcAddress(HNDicmp,'IcmpCreateFile');
  @IcmpCloseHandle := GetProcAddress(HNDicmp,'IcmpCloseHandle');
  @IcmpSendEcho := GetProcAddress(HNDicmp,'IcmpSendEcho');

  if (@IcmpCreateFile=nil) or (@IcmpCloseHandle=nil) or (@IcmpSendEcho=nil) then
    begin

    Application.MessageBox('Error getting ICMP Adress','error', MB_OK);
    FreeLibrary(HNDicmp);

    end;

  end;

Retorno := WSAStartup($0101,wsadt);

if (Retorno <> 0) then
  begin

  Application.MessageBox('Can´t Load WinSockets','WSAStartup', MB_OK);
  WSACleanup();
  FreeLibrary(HNDicmp);

  end;

Destino.S_addr := inet_addr(Pchar(Edit1.text));

if (Destino.S_addr = 0) then
  Host := GetHostbyName(PChar(Edit1.text))
else
  Host := GetHostbyAddr(@Destino,sizeof(in_addr), AF_INET);

if (host = nil) then
  begin
  memo1.Clear;
  //MessageDlg('IP yang anda maksudkan tidak diketemukan...',mtInformation,[mbOK],0);
  memo1.Lines.Add('Tidak bisa koneksi ke '+ edit1.Text );
  memo1.Lines.Add('Tidak bisa koneksi ke '+ edit1.Text );
  memo1.Lines.Add('Tidak bisa koneksi ke '+ edit1.Text );
  memo1.Lines.Add('Tidak bisa koneksi ke '+ edit1.Text );
  memo1.Lines.Add('Tidak bisa koneksi ke '+ edit1.Text );
  WSACleanup();
  FreeLibrary(HNDicmp);
  exit;

  end;

for x:= 0 to 4 do
  begin
    Ip.Ttl := char(255);
    Ip.Tos := char(0);
    Ip.IPFlags := char(0);
    Ip.OptSize := char(0);
    Ip.Options := nil;
    Destino.S_addr := icmp.source;
    if (edit1.Text = '') then
      Memo1.Lines.Add('Cek Koneksi IP localhost Lancar')
    else
      Memo1.Lines.Add('Cek Koneksi IP ' + Edit1.text + ' Lancar');
  end;

FreeLibrary(HNDicmp);
WSACleanup();
end;

end.
  
          Sekarang rekan-rekan bisa mencobanya semoga bermanfaat.
Share/Bookmark

Sabtu, 14 Mei 2011

Command Prompt di delphi

Command Prompt di delphi            

             Pada tutorial singkat ini saya coba bagi-bagi sedikit info. Masih berhubngan dengan delphi. Pada contoh program ini saya bikin aplikasi command prompt di visual Delphi. Sederhananya saya hanya mengambil informasi yang dihasilkan perintah dalam DOS. Misal kita ketik help di command prompt maka akan di hasilkan perintah-perintah help di layar command prompt... Nah perintah-perintah itu yang nantinya ditampilkan didelphi dengan bantuan komponen Memo. Bingung? Apa yang mau diketik lagi, langsung aja deh saya sertakan routinnya..
             Pertama siapkan beberapa komponen diantarnya:

1. Button
2. Edit
3. Memo

         Ini routin lengkapnya :
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, DBGrids, DB, ZAbstractRODataset, ZAbstractDataset,
  ZDataset, ZConnection, StdCtrls, ExtCtrls, SUIForm, SUITitleBar, DBCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Button2: TButton;
    function GetDosOutput(CommandLine: string; Work: string = 'C:\'): string;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

function TForm1.GetDosOutput(CommandLine, Work: string): string;
var
  SA: TSecurityAttributes;
  SI: TStartupInfo;
  PI: TProcessInformation;
  StdOutPipeRead, StdOutPipeWrite: THandle;
  WasOK: Boolean;
  Buffer: array[0..255] of AnsiChar;
  BytesRead: Cardinal;
  WorkDir: string;
  Handlee: Boolean;
begin
  Result := '';
  with SA do begin
    nLength := SizeOf(SA);
    bInheritHandle := True;
    lpSecurityDescriptor := nil;
  end;
  CreatePipe(StdOutPipeRead, StdOutPipeWrite, @SA, 0);
  try
    with SI do
    begin
      FillChar(SI, SizeOf(SI), 0);
      cb := SizeOf(SI);
      dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
      wShowWindow := SW_HIDE;
      hStdInput := GetStdHandle(STD_INPUT_HANDLE); // don't redirect stdin
      hStdOutput := StdOutPipeWrite;
      hStdError := StdOutPipeWrite;
    end;
    WorkDir := Work;
    Handlee := CreateProcess(nil, PChar('cmd.exe /C ' + CommandLine),
                            nil, nil, True, 0, nil,
                            PChar(WorkDir), SI, PI);
    CloseHandle(StdOutPipeWrite);
    if Handlee then
      try
        repeat
          WasOK := ReadFile(StdOutPipeRead, Buffer, 255, BytesRead, nil);
          if BytesRead > 0 then
          begin
            Buffer[BytesRead] := #0;
            Result := Result + Buffer;
          end;
        until not WasOK or (BytesRead = 0);
        WaitForSingleObject(PI.hProcess, INFINITE);
      finally
        CloseHandle(PI.hThread);
        CloseHandle(PI.hProcess);
      end;
  finally
    CloseHandle(StdOutPipeRead);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
     memo1.Text:=GetDosOutput(edit1.text);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
     close;
end;

end.

Nah ini dia hasilnya..


           Tutorial nanti yang akan saya posting gimana caranya bikin aplikasi PING IP dalam suatu jaringan, sehingga kita bisa tahu IP tersebut terkoneksi dalam jaringan..

Share/Bookmark

Jumat, 14 Januari 2011

Analisa Plant Berdasarkan Uji Bump Test

Analisa Karakteristik Plant Berdasarkan Informasi Hasil Uji Bump Test
Dalam semuai kasus pengontrolan plant industri, permasalahan utama yang cukup sulit dihadapi oleh semua praktisi salah satunya analisis plant yang di hadapi. Pengendalian dapat dilakukan setelah kita benar-benar mengerti karakteristik plant yang dihadapi sehingga kita dapat melakukan parameter-parameter kontrol yang dipakai.
Salah satu metode yang digunakan untuk menentukan model kontrol proses yaitu dengan melakukan penurunan hokum fisika terhadap plant yang kita hadapi. Namun hal ini relatif sangat sulit untuk dilakukan dalam banyak kasus. Metode yang paling mudah dilakukan yaitu dengan melakukan uji bump-test. Uji eksperimen ini dilakukan dengan membawa parameter yang diuji kedalam nilai titik terjenuh dengan jalan memberikan sinyal kontrol tertentu secara mendadak oleh operator. Model PID komersial umumnya menyediakan minimal dua mode pengontrolan yang dapat digunakan secara bebas oleh operator, yaitu mode manual dan mode auto. Mode manual adalah mode pengendalian dengan menggunakan prinsip kalang terbuka atau open loop yang mana mode pengendaliannnya dilakukan secara manual dengan memberikan sinyal kontrol oleh operator. Sedangkan mode auto merupakan mode pengendalian yang menggunakan prinsip close loop dimana kontroller bekerja berdasarkan error yang terukur.
Model self regulating process adalah model yang paling umum dijumpai di industri proses. Model ini hampir muncul pada setiap kasus pengotrolan praktis, seperti pengontrolan temperatur pada sistem heat exchanger,dan pengotrolan level fluida pada system tangki penampung. Model self regulating process pada dasarnya dapat didekati oleh sebuah model matematis FOPDT (First Order Plus Ded Time ) yang hanya dicirikan
oleh tiga buah parameter sebagai berikut:
· Process transport delay (delay atau keterlambatan transportasi proses) - L
· Process time constant (konstanta waktu proses)- T
· Process static gain (penguatan tetap proses) - K
Ketiga parameter yang menggambarkan dinamika proses, secara praktis dapat diperoleh atau diidentifikasi melalui eksperimen sederhana BumpTest atau sinyal tangga secara open loop pada mode kontrol manual (lihat Gambar 1 ).
Gambar 1 Percobaan BumpTest pada kontrol manual

Secara teknis percobaan Bump Test dilakukan dengan cara memberi perubahan tangga (step) sinyal output kontroler (CO) oleh operator pada saat proses mengalami keadaan steady (menetap) disekitar titik kerja nominalnya. Gambar 2. menunjukan hasil percobaan BumpTest.

Proses ini dapat didekati oleh sebuah model matematis FOFDT (First Order Plus Dead Time) yang dicirikan oleh 3 parameter yaitu L (Transport Delay=keterlambatan transportasi proses), T (Time Constant=konstanta waktu proses) dan K (Gain Static=Penguatan).
Untuk mendapatkan ketiga parameter ini biasanya dilakukan eksperimen bump test yang dilakukan dengan memeberikan sinyal tangga CO secara open loop pada mode manual. Eksperimen ini dilakukan pada saat proses telah mengalami keadaan steady disekitar titik kerja nominalnya dan respon variable output (PV) ini yang direkam dan dianalisis. Sebagai contoh bisa dilihat di bawah ini hasil grafik pengukuran eksperimen Bump Test.
Dari gambar 2 grafik diatas dicari parameter-parameter proses FOPDT sebagai berikut:
  • Keterlambatan transportasi proses (L) =, waktu yang terjadi pada proses yang dihitung sejak terjadi perubahan tangga pada CO sampai variabel proses (PV) yang dikontrol mulai menanggapi perubahan input CO.

  • Konstanta waktu (T) = Waktu yang di perlukan sehingga nilai PV mencapai kurang lebih 63 % dari keadaan steady akhir setelah waktu tunda.

  • Gain Statis Proses (K) = Perbandingan perubahan PV terhadap perubahan CO dalam keadaan steadynya. Gain statis bisa bernilai positif maupun negative tergantung jenis control valve yang di gunakan.


Prosedur Eksperimen Bump Test yaitu di antaranya pastikan terlebih dahulu kontroler berada pada mode manual dan PV berada pada disekitar level operasi atau titik kerja yang diharapkan yaitu dengan terlebih dahulu mensetting CO sedemikian rupa sehingga output PV berada disekitar nilai terharap (set point)dan pastikan output proses dalam keadaan steady tertentu. Selama melakukan uji coba dipastikan tidak terjadi perubahan beban atau gangguan. Selain itu ubah output controller dari nilai steady sebelumnya menjadi nilai step yang baru secara mendadak (CO umumnya antara 5 %-10%).
Dari hasil uji Bumptest diatas maka dapat dilakukan tuning parameter kontrol PID sesuai dengan metode yang akan digunakaan sehingga parameter Kp, Ki dan Td dapat dicari dan ditunning pada controler kita.

Share/Bookmark


Rabu, 17 November 2010

Kontrol PI

Kontrol PI        

         Suatu pengontrol proporsional yang memberikan aksi kontrol proporsional dengan error akan mengakibatkan efek pada pengurangan rise time dan menimbulkan kesalahan keadaan tunak (offset). Suatu pengontrol integral yang memberikan aksi kontrol sebanding dengan jumlah kesalahan akan mengakibatkan efek yang baik dalam mengurangi kesalahan keadaan tunak tetapi dapat mengakibatkan respon transien yang memburuk. Pengetahuan tentang efek yang diakibatkan oleh masing-masing pengontrol tersebut yang nantinya akan digunakan dalam penentuan nilai-nilai penguatan proporsional (Kp) dan integral (Ki). Tabel basis pengetahuan hubungan antara penguatan dan efeknya pada pengontrol PI diperlihatkan pada Tabel 1 dibawah ini.

Tabel 1 Efek dari pengontrol P dan I.

Penguatan Rise time Overshoot Setling time offset
Kp menurun meningkat perubahan kecil terjadi
Ki menurun meningkat meningkat menghilangkan

Gabungan aksi kontrol proporsional dan aksi kontrol integral membentuk aksi kontrol proporsional plus integral ( controller PI ). Gabungan aksi ini mempunyai keunggulan dibandingkan dengan masing-masing penyusunnya. Keunggulan utamanya adalah diperolehnya keuntungan dari masing-masing aksi kontrol dan kekurangan aksi kontrol yang satu dapat diatasi. Dengan kata lain elemen-elemen controller P dan I secara keseluruhan bertujuan untuk mempercepat reaksi sebuah sistem dan menghilangkan offset.
Dalam waktu kontinyu, sinyal keluaran pengendali PI dapat dirumuskan sebagai berikut.


dengan
Co = sinyal keluaran pengendali PI.
Kp = konstanta proporsional.

Ti = waktu integral.
Ki = konstanta integral.
e(t) = sinyal kesalahan.
e(t) = referensi – keluaran plant).

Diagram blok pengendali PI dapat dilihat pada Gambar 1.


Gambar 1 Diagram blok pengendali PI.

Pengolahan parameter-parameter PI menjadi konstanta-konstanta pengendalian secara diskrit sesuai dengan penjelasan perhitungan berikut. Berdasarkan persamaan 2.1 dengan menggunakan Transformasi Laplace, didapatkan persamaan PI dalam kawasan S sebagai berikut.

Persamaan ini diubah kembali ke kawasan waktu, sehingga menjadi :
Untuk mengubah persamaan diatas ke dalam bentuk diskrit, digunakan persamaan backward difference, di mana :
Sehingga persamaannya menjadi:

Persamaan ini  menunjukkan persamaan pengendali PI dalam bentuk diskrit. Dari persamaan ini dapat diketahui bahwa pengendali PI menggunakan konstanta-konstanta pengendalian sebagai berikut :

dengan

          Penalaan pada pengontrol PI adalah penentuan besaran penguatan-penguatan P dan I sehingga diperoleh karakteristik sistem yang baik. Ada beberapa cara penalaan kontroler PI diantaranya yaitu metode relay feedback Ziegler-Nichols, manual (hand-tuning/trial-error), metode analitik dengan optimasi, penempatan pole (pole placement), atau swatala (auto tuning).

Artikel terkait:
- Pengendali Proporsionl
-  Pengendali Integral
 


Share/Bookmark

Twitter Delicious Facebook Digg Stumbleupon Favorites More