Tuesday, September 30, 2025

Panduan Praktis Mengirim dan Menerima Data melalui Serial Port dengan Lazarus dan CPort

 

Panduan Praktis Mengirim dan Menerima Data melalui Serial Port dengan Lazarus dan CPort


    Dalam era Internet of Things (IoT) dan otomatisasi industri, komunikasi serial port COM menjadi kunci penting dalam menghubungkan perangkat keras dan perangkat lunak. Dengan menggunakan Lazarus dan CPort, Anda dapat dengan mudah mengakses dan mengontrol serial port COM, membuka peluang untuk mengembangkan aplikasi yang inovatif dan efektif. Dalam artikel ini, kita akan membahas bagaimana memanfaatkan serial port COM dengan Lazarus dan CPort untuk membuat aplikasi yang cerdas dan terintegrasi.

Jadi tanpa banyak basa - basi kita langsung saja terjun untuk membuat aplikasinya, jadi yang di perlukan adalah komponen Cport yang sudah terinstall pada ide lazarus kalian (saya tidak akan bahas disini) dan Cport juga adalah komponen open source dan free jadi enak untuk digunakan. 

jika tidak mempunyai port serial anda bisa gunakan usb to serial device, agar bisa menggunakan komunikasi ini jika hanya untuk test internal antar program bisa juga menggunakan virtual serial port, banyak macam softwarenya tapi saya menggunakan free program yang bisa di download yaitu com0com, program sederhana ini sangat memuaskan untuk digunakan sebagai virtual serial port karena tidak ada batasanya hanya saya hanya menyediakan koneksi pair saja

penampakkan com0com

selain itu juga untuk contoh kali ini jelas ketika kita mencoba software yang kita buat kita juga membutuhkan software termite (serial terminal) karena siapa yang mau menerima data yang kita kirimkan ? ya kecuali nanti pada saat aplikasi mungkin kita akan berkomunikasi dengan microcontroller atau bahkan dengan software proteus dll 





Software Termite

bahan yang di butuhkan :
1. Cport for lazarus
2. com0com
3. Pascal Lazarus
4. termite

tidak juga harus dengan software itu yang penting fungsinya sama.

untuk pertama kita akan buat formnya seperti ini :

form


dan berikut ini adalah listingnya :

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, CPort,
  CPortCtl;

type

  { TForm1 }

  TForm1 = class(TForm)
    btn2: TButton;
    btn1: TButton;
    btn3: TButton;
    btn4: TButton;
    cbb1: TComComboBox;
    edt3: TEdit;
    edt2: TEdit;
    edt1: TEdit;
    GroupBox2: TGroupBox;
    GroupBox3: TGroupBox;
    GroupBox4: TGroupBox;
    port1: TComPort;
    GroupBox1: TGroupBox;
    procedure btn1Click(Sender: TObject);
    procedure btn2Click(Sender: TObject);
    procedure btn3Click(Sender: TObject);
    procedure btn4Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure port1RxChar(Sender: TObject; Count: Integer);
  private
    procedure SendByte(Value: Byte);
  public

  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }
procedure TForm1.SendByte(Value: Byte);
begin
  port1.Write(Value, 1);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  cbb1.ComProperty:= cpPort; // dilakukan disini karena error jika lewat ide lazarus
end;

procedure TForm1.port1RxChar(Sender: TObject; Count: Integer);
var
  s: string;
begin
   port1.ReadStr(s,Count);
   edt3.Text:= s;
end;

procedure TForm1.btn1Click(Sender: TObject);
begin
  if port1.Connected = false then
    begin
      port1.Port:= cbb1.Text;
      port1.Open;
    end;
end;

procedure TForm1.btn2Click(Sender: TObject);
begin
  if port1.Connected = true then port1.Close;
end;

procedure TForm1.btn3Click(Sender: TObject);
begin
  SendByte(strtoint(edt1.Text));
end;

procedure TForm1.btn4Click(Sender: TObject);
begin
  port1.WriteStr(edt2.Text);
end;

end.



🔧 1. Komponen yang Digunakan

Unit yang di-uses:

  • Classes, SysUtils: Unit standar untuk operasi dasar Pascal.

  • Forms, Controls, Graphics, Dialogs, StdCtrls: Untuk komponen antarmuka pengguna (form, tombol, edit box, dll).

  • CPort, CPortCtl: Unit untuk menangani komunikasi serial (COM port).


🧱 2. Desain Form dan Komponen

Komponen pada TForm1:

  • 4 Tombol:

    • btn1: Tombol untuk membuka koneksi ke COM port.

    • btn2: Tombol untuk menutup koneksi ke COM port.

    • btn3: Tombol untuk mengirim byte (nilai angka).

    • btn4: Tombol untuk mengirim string (teks).

  • 3 Edit Box:

    • edt1: Tempat pengguna memasukkan angka (byte) untuk dikirim.

    • edt2: Tempat pengguna memasukkan string untuk dikirim.

    • edt3: Menampilkan data yang diterima dari COM port.

  • 1 ComboBox Khusus COM Port (TComComboBox):

    • cbb1: Combo box untuk memilih COM port yang tersedia di sistem.

  • 1 Objek TComPort:

    • port1: Objek yang digunakan untuk menangani komunikasi serial.

    • port1 : masih menggunakan default speed 9600 baud

    • port1 : menggunakan 8 data, no parity, 1 stop bit  (default) 

  • 4 GroupBox:

    • Untuk mengelompokkan komponen dalam tampilan GUI (tidak memiliki logika program langsung).


⚙️ 3. Logika Program

3.1. FormCreate(Sender: TObject)

cbb1.ComProperty := cpPort;
  • Mengatur cbb1 agar menampilkan daftar port COM yang tersedia. Ini harus dilakukan secara manual karena jika diset lewat properti di IDE bisa menyebabkan error.


3.2. btn1Click(Sender: TObject)Open COM Port

if not port1.Connected then begin port1.Port := cbb1.Text; port1.Open; end;
  • Mengecek apakah port1 belum terbuka, lalu membuka port yang dipilih di cbb1.


3.3. btn2Click(Sender: TObject)Close COM Port

if port1.Connected then port1.Close;
  • Menutup koneksi ke port jika sedang terbuka.


3.4. btn3Click(Sender: TObject)Kirim Byte

SendByte(StrToInt(edt1.Text));
  • Mengambil angka dari edt1, mengubahnya ke tipe Byte, lalu mengirimkannya.

Fungsi Pendukung:

procedure TForm1.SendByte(Value: Byte); begin port1.Write(Value, 1); end;
  • Mengirim satu byte ke port serial.


3.5. btn4Click(Sender: TObject)Kirim String

port1.WriteStr(edt2.Text);
  • Mengirim string yang dimasukkan di edt2 melalui port serial.


3.6. port1RxChar(Sender: TObject; Count: Integer)Terima Data

var s: string; begin port1.ReadStr(s, Count); edt3.Text := s; end;
  • Dipanggil otomatis saat data diterima dari COM port (Count karakter).

  • Membaca data dan menampilkannya di edt3.


🔁 Alur Kerja Program

  1. Saat form dijalankan, daftar COM port akan dimuat ke cbb1.

  2. Pengguna memilih COM port dari daftar.

  3. Tekan tombol btn1 → membuka koneksi ke COM port.

  4. Pengguna dapat:

    • Mengirim byte dengan tombol btn3.

    • Mengirim string dengan tombol btn4.

  5. Data yang diterima dari COM port akan langsung tampil di edt3.

  6. Tekan tombol btn2 → menutup koneksi COM port.


🛠️ Catatan Teknis Tambahan

  • Pastikan Anda menggunakan komponen CPort yang sudah diinstal di Lazarus.

  • Perlu mengatur BaudRate, Parity, StopBits, dan DataBits dari port1 agar sesuai dengan perangkat yang dikomunikasikan. (Belum diatur dalam kode ini, jadi memang masih default 9600 8N1).

  • Saat mengirim data byte, pastikan edt1.Text benar-benar angka valid (0–255), jika tidak bisa menyebabkan error runtime. Oleh karena itu edt1 di set "only Number" properties nya







Source Code dapat di download di Link ini





No comments:

Post a Comment