Anda di halaman 1dari 20

LAPORAN PRAKTIKUM

KOMUNIKASI DATA
KONVERSI TEXT TO PDU dan PDU TO TEXT
Laporan ini disusun untuk memenuhi
tugas kuliah semester lima mata kuliah
Praktikum komunikasi data

Oleh :
Iga Revva Princiss Jeinever
1441160099 / JTD-3A

POLITEKNIK NEGERI MALANG


JURUSAN TEKNIK ELEKTRO
PROGRAM STUDI JARINGAN TELEKOMUNIKASI
DIGITAL
2016

PRAKTIKUM KOMUNIKASI DATA


KONVERSI TEXT TO PDU dan PDU TO TEXT
I.

Tujuan
1) Mampu mengkonversi teks yang dikirim dan diterima ke format Protocol Data Unit.

II.

Tujuan Umum
1) Dapat merubah format teks ke dalam format Protocol Data Unit (PDU) dengan
program Delphi.

III.

Alat dan Bahan


1) Program Delphi versi 7
2) Komputer 1 unit

IV.

Teori Dasar
A. Protocol Data Unit (PDU)
Format data yang diterima atau yang dikirim handphone berupa Protocol Data
Unit (PDU), PDU yang diterima dari handphone berbeda dengan PDU yang di kirim,
namun tetap menggunakan aturan yang sama. Perbedaannya terutama pada field yang
dikandung, baik nilai maupun fungsinya. Untuk format PDU yang dikirim memiliki
jumlah header sebanyak 8 bagian. Berikut ini ke delapan header dari PDU yang
dikirimkan :
Nomor SMS
Center
(tergantung
operator)

Tipe
SMS/SM
S
SUBMIT
(8 bit)

Nomor
Referensi
SMS (8
bit)

Nomor

Skema

Ponsel

Bentuk

Encodin

Penerima

SMS

g Data

(targantung

(8 bit)

I/O (7 bit

operator)

/ 8 bit)

Jangka Waktu

Isi SMS (jumlah

Sebelum

bit tergantung pada

SMS Expired

jumlah karakter

(8 bit)

yang dikirim)

Gambar 1. Header Protocol PDU beserta ukuran bit


1. Nomor SMS Center
Header pertama ini terbagi atas tiga subheader,yaitu:
a. Jumlah pasangan heksadesimal SMS-Center dalam bilangan heksa.
b. Kode nasional/internasional untuk negara Indonesia
Untuk national , kode subheader-nya adalah 81
Untuk international, kode subheader-nya adalah 91
c. Nomor SMS-Center-nya sendiri dalam pasangan heksa dibalik-balik
Jika tertinggal satu angka heksa yang tidak memiliki pasangan, angka tersebut
akan dipasangkan dengan F didepannya.

Contoh: nomor SMS-Center Indosat-IM3 dapat ditulis dengan dua cara sebagai
berikut:
Cara 1 (nasional):
0855000000 diubah menjadi:
a. 0855000000 : ada 5 pasang nomor smsc
Total pasangan SMSC dank ode
b. 81 : 1 pasang
nasional 6 pasang
c. 80-55-00-00-00: 5 pasang nomor smsc yang sudah dibalik perpasangan
Digabung menjadi: 06818055000000
Cara 2 (internasional):
a. 62855000000F : ada 6 pasang
Total 7 pasang
b. 91 : ada 1 pasang
c. 26-58-05-00-00-F0 : 6 pasang smsc yang sudah dibalik perpasangan
Digabung menjadi 07912658050000F0
Berikut beberapa contoh nomor SMS-Center operator seluler di Indonesia.
Tabel 1.1 Nomor SMS Center dengan Cara 1
NO

Operator Seluler

SMS-Center

Kode PDU

.
1.
2.
3.
4.

Telkomsel
Satelindo
Excelcom
Indosat-IM3

0811000000
0816124
0818445009
0855000000

06818011000000
0581806121F4
0681081440590
06818055000000

Tabel 1.2 Nomor SMS Center dengan cara 2


NO

Operator Celuler

SMS-Center

Kode PDU

.
1.
2.
3.
4.

Telkomsel
Satelindo
Excelcom
Indosat-IM3

62811000000
62816124
62818445009
62855000000

07912618010000F0
059126181642
07912618485400F9
07912658050000F0

2. Tipe SMS (SMS SUBMIT)


Tipe SMS SUBMIT = 11 (kode pengiriman SMS).
3. Nomor Referensi SMS
Nomor referensi dibiarkan 0. Jadi, bilangan heksanya 00. Selanjutnya akan diberikan
sebuah nomor referensi otomatis oleh ponsel/alat SMS-gateway.
4. Nomor Ponsel Penerima
Sama seperti menulis PDU Header untuk SMS-Center, header ini juga terbagi atas
tiga bagian, yaitu:

a. Jumlah bilangan desimal nomor ponsel yang dituju dalam bilangan heksa.
b. Kode nasional/internasional untuk negara Indonesia
c. Untuk nasional, kode subheader-nya: 81
d. Untuk internasional, kode subheader-nya: 91.
e. Nomor ponsel yang dituju dalam pasangan heksa dibalik-balik.
Jika tertinggal satu angka heksa yang tidak memiliki pasangan, angka tersebut
dipasangkan dengan huruf F didepannya.
Contoh:
Nomor ponsel yang dituju 628129573337 maka dapat ditulis dengan dua cara , yaitu
sebagai berikut :
Cara 1 (nasional): 08129573337 diubah menjadi:
a. 0B: ada 11 angka (jumlah bilangan desimal dari nomor tujuan)
b. 81 (subheader nasional)
c. 80-21-59-37-33-F7 (penggabungan nomor tujuan yang dibalik, apabila
tertinggal 1 angka maka ditambahkan huruf F didepanya)
Digabung menjadi: 0B818021593733F7
Cara 2: 628129573337 diubah menjadi:
a. 0C: ada 12 angka (jumlah bilangan desimal dari nomor tujuan)
b. 91 (subheader nasional)
c. 26-81-92-75-33-F7 (penggabungan nomor tujuan yang dibalik, apabila
tertinggal 1 angka maka ditambahkan huruf F didepanya)
Digabung menjadi: 0C91261892753373
5. Bentuk SMS
0 00 dikirim sebagai SMS
1 01 dikirim sebagai telex
2 02 dikirim sebagai fax
Dalam hal ini, pengiriman dalam bentuk SMS tentu saja memakai 00.
6. Skema Encoding Data I/O
Ada dua skema, yaitu:
a. Skema 7 bit ditandai dengan angka 0 00
b. Skema 8 bit ditandai dengan angka lebih besar dari 0 yang diubah ke heksa.
Kebanyakan ponsel/SMS Gateway yang ada di pasaran sekarang menggunakan skema
7 bit sehingga kita menggunakan kode 00.
7. Jangka Waktu Sebelum SMS Expired

Jika bagian ini di-skip, berarti kita tidak membatasi waktu berlakunya SMS, sehingga
tidak perlu memberikan nilai apapun di PDU headernya. Selain dengan cara tersebut
juga dapat dilakukan dengan memberikan nilai heksa FF yang juga berarti
memberikan waktu validitas maksimum. Sementara itu, jika kita mengisinya dengan
suatu bilangan integer yang kemudian diubah ke pasangan heksa tertentu, bilangan
yang kita berikan tersebut akan mewakili jumlah waktu validitas SMS tersebut.
8. Isi SMS
Header terdiri atas dua subheader, yaitu:
a. Panjang isi (jumlah huruf dari isi)
Misalnya: untuk kata hello ada 5 huruf 05
b. Isi berupa pasangan bilangan heksa
Ponsel/SMS Gateway berskema encoding 7 bit berarti jika kita mengetikkan suatu
huruf dari keypad-nya, kita telah membuat 7 angka I/O berturutan.
Ada dua langkah yang harus kita lakukan untuk mengkonversi isi SMS, yaitu:
Langkah pertama : mengubah menjadi kode 7 bit.
Langkah kedua

: mengubah kode 7 bit menjadi 8 bit, yang diwakili oleh

pasangan

heksa.

Contoh: untuk kata hello


Langkah pertama:
Bit

110

1000

110

0101

110

1100

110

1100

110

1111

langkah kedua:
E
h

1 110

1000

00 11
9

100 1
F

1111

0010 1
B
1011 00
D
1101 100

0000

0 110

1111

Oleh karena total 7 bit x 5 huruf = 35 bit, sedangkan yang kita perlukan adalah
8 bit x 5 bit = 40 bit, maka diperlukan 5 bit dummy yang diisi dengan bilangan 0.
Setiap 8 bit mewakili suatu pasangan heksa. Setiap 4 bit mewakili suatu angka
heksa, tentu saja karena secara logika 24 = 16. Dengan demikian,maka kata hello
hasil konversinya menjadi E8329BFD06.
Setelah semua header terbentuk, maka selanjutnya adalah menggabungkan
semua header yang terbentuk, Masing-masing header maupun subheader untuk
mengirim SMS diatas harus digabungkan menjadi sebuah PDU yang lengkap.
Contoh: jika mengirimkan kata hello ke ponsel nomor 628129573337 lewat
SMS-Center Indosat-M3, denagan waktu valid maksimum, maka PDU lengkapnya
adalah :
07912658050000F011000C912618927533730000FF05E8329BFD06

V.

Perencanaan

VI.

Pembahasan
Pertama-tama yang dilakukan dalam membuat tampilan Komunikasi Serial
adalah melakukan identifikasi pada setiap fungsi-fungsi yang diperlukan. Identifikasi
ini dilakukan dengan mengedit pada menu Box Inspector sesuai dengan yang
diinginkan sehingga pada listing program akan muncul otomatis sepeti ini.
unit un_PDU_Cobalagi;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
Memo1: TMemo;
edsms: TEdit;
edhasil: TEdit;
edno: TEdit;
edhasil2: TEdit;
Memo2: TMemo;
T2P: TButton;
P2T: TButton;
bthapus1: TButton;
Memo3: TMemo;
Memo4: TMemo;
edsms2: TEdit;
edhsl: TEdit;
edno2: TEdit;
edhsl2: TEdit;
Memo5: TMemo;
Button1: TButton;
Button2: TButton;
Button3: TButton;
// procedure edsmsChange(Sender: TObject);
procedure T2PClick(Sender: TObject);

procedure P2TClick(Sender: TObject);


procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure bthapus1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
t_biner,t_biner2,t_heksa,t_heksa1,t_heksa2:String;
t_desimal,t_temp:Integer;
implementation
{$R *.dfm}
procedure kebiner1(t_Hexa:string);
var
data : string;
begin
data := t_hexa;
if data = '0' then data :='000';
if data = '1' then data :='001';
if data = '2' then data :='010';
if data = '3' then data :='011';
if data = '4' then data :='100';
if data = '5' then data :='101';
if data = '6' then data :='110';
if data = '7' then data :='111';
if data = '8' then data :='1000';
t_biner := data;
end;
procedure kebiner2 (t_Hexa:string);
var
data : string;
begin
data := t_hexa;
if data = '0' then data :='0000';
if data = '1' then data :='0001';
if data = '2' then data :='0010';
if data = '3' then data :='0011';
if data = '4' then data :='0100';
if data = '5' then data :='0101';
if data = '6' then data :='0110';
if data = '7' then data :='0111';

if data = '8' then data :='1000';


if data = '9' then data :='1001';
if data = 'A' then data :='1010';
if data = 'B' then data :='1011';
if data = 'C' then data :='1100';
if data = 'D' then data :='1101';
if data = 'E' then data :='1110';
if data = 'F' then data :='1111';
t_biner := t_biner+data;
t_biner2:= data;
end;
procedure keheksa1 (data:string);
var
temp : string;
begin
temp :=data;
if temp = '000' then temp :='0';
if temp = '001' then temp :='1';
if temp = '010' then temp :='2';
if temp = '011' then temp :='3';
if temp = '100' then temp :='4';
if temp = '101' then temp :='5';
if temp = '110' then temp :='6';
if temp = '111' then temp :='7';
t_heksa1 := temp;
end;
procedure keheksa2 (data:string);
var
temp : string;
begin
temp :=data;
if temp = '0000' then temp :='0';
if temp = '0001' then temp :='1';
if temp = '0010' then temp :='2';
if temp = '0011' then temp :='3';
if temp = '0100' then temp :='4';
if temp = '0101' then temp :='5';
if temp = '0110' then temp :='6';
if temp = '0111' then temp :='7';
if temp = '1000' then temp :='8';
if temp = '1001' then temp :='9';
if temp = '1010' then temp :='A';
if temp = '1011' then temp :='B';
if temp = '1100' then temp :='C';
if temp = '1101' then temp :='D';
if temp = '1110' then temp :='E';
if temp = '1111' then temp :='F';
t_heksa := temp+t_heksa;

t_heksa2:= temp;
end;
procedure kedesimal (data:string);
var
temp : string;
desimal:Integer;
begin
temp :=data;
if temp = '0' then t_desimal :=0;
if temp = '1' then t_desimal :=1;
if temp = '2' then t_desimal :=2;
if temp = '3' then t_desimal :=3;
if temp = '4' then t_desimal :=4;
if temp = '5' then t_desimal :=5;
if temp = '6' then t_desimal :=6;
if temp = '7' then t_desimal :=7;
if temp = '8' then t_desimal :=8;
if temp = '9' then t_desimal :=9;
if temp = 'A' then t_desimal :=10;
if temp = 'B' then t_desimal :=11;
if temp = 'C' then t_desimal :=12;
if temp = 'D' then t_desimal :=13;
if temp = 'E' then t_desimal :=14;
if temp = 'F' then t_desimal :=15;
end;
procedure sms_center(data:string);
var jumlah_pasangan, a:integer;
nomer,kode,temp:string;
begin
a:=1;
if length(data) mod 2=1 then data := data+'F';
nomer:=data;
temp:=data;
if nomer [1]='0' then kode:='81' else kode:='91';
jumlah_pasangan:=length(data)div 2+1;
while(a<=length(data)+2) do
begin
nomer[a+1]:=temp[a];
nomer[a]:=temp[a+1];
a:=a+2;
end;
form1.Edhasil.Text:='0'+inttostr(jumlah_pasangan)+kode+nomer;
end;
procedure nomer_penerima(data:string);
var
a:integer;
nomer,kode,temp,jumlah_nomer:string;

begin
a:=1;
nomer:=data;
jumlah_nomer:=inttohex(length(data),1);
if length(data)mod 2=1 then data := data +'F';
nomer:=data;
temp:=data;
if nomer[1]='0' then kode:='81' else kode:='91';
while(a<=Length(data)+2)do
begin
nomer[a+1]:=temp[a];
nomer[a]:=temp[a+1];
a:=a+2;
end;
form1.Edhasil2.Text:='0'+jumlah_nomer+kode+nomer;
end;
procedure text2pdu(data:string);
var
jumlah_kata,pesan,hexa,temp,temp2:string;
a,b,c:integer;
begin
b:=0;c:=0;
jumlah_kata:=inttohex(length(data),1);
if length(jumlah_kata)<2 then jumlah_kata:='0'+jumlah_kata;
pesan:=data;
for a:=length(pesan) downto 1 do
begin
hexa:=inttohex(ord(pesan[a]),2);
kebiner1(hexa[1]);
kebiner2(hexa[2]);
temp:=temp+t_biner;
end;
if length(temp) mod 8<>0 then
begin
b:=length(pesan);
if b>8 then b:=b mod 8;
for a:=1 to b do
begin
temp:='0'+temp;
end;
end;
b:=0;temp2:='';hexa:='';
for a:=length(temp)downto 1 do
begin
temp2:=temp[a]+temp2;
inc(b);
if b>=4 then
begin
b:=0;

keheksa2(temp2);
inc(c);
temp2:='';
if c>=2 then
begin
hexa:=hexa+t_heksa;
c:=0;
t_heksa:='';
end;
end;
end;
form1.Memo2.Text:=jumlah_kata+hexa;
end;
procedure sms_center_pdu(pdu:string);
var
jumlah_pasangan,a,b,i:Integer;
data,nomer,temp:string;
begin
kedesimal(pdu[1]);
a:=t_desimal;
kedesimal(pdu[2]);
b:=t_desimal;
jumlah_pasangan:=(16*a)+b;
data:=copy(pdu, 1, ((jumlah_pasangan+1)*2));
Form1.edsms2.Text:=data;
i:=1;
nomer:=copy(data, 5, length(data));
temp:=nomer;
while(i<=length(nomer)) do
begin
nomer[i+1]:=temp[i];
nomer[i]:=temp[i+1];
i:=i+2;
end;
if nomer[length(nomer)] = 'F' then
Delete(nomer, length(nomer), 1);
Form1.edhsl.Text:=nomer;
t_temp:=(jumlah_pasangan*2)+6;
end;
procedure nomer_penerima_pdu(pdu:string);
var
jumlah_nomer,a,b,i:Integer;
data,nomer,temp:string;
begin
data:=copy(pdu, (t_temp+1), length(pdu));
kedesimal(data[1]);
a:=t_desimal;
kedesimal(data[2]);

b:=t_desimal;
jumlah_nomer:=(16*a)+b;
if jumlah_nomer mod 2=1 then
jumlah_nomer:=jumlah_nomer+1;
Form1.Edno2.Text:=copy(data, 1, (jumlah_nomer+4));
i:=1;
temp:=copy(data, 5, (jumlah_nomer));
nomer:=temp;
while(i<=length(nomer)) do
begin
nomer[i+1]:=temp[i];
nomer[i]:=temp[i+1];
i:=i+2;
end;
if nomer[length(nomer)] = 'F' then
Delete(nomer, length(nomer), 1);
Form1.Edhsl2.Text:=nomer;
t_temp:=t_temp+(jumlah_nomer+10);
end;
procedure pdu2text(pdu:string);
var
data,hasil,temp,temp2,temp3,biner:string;
desimal,jumlah_karakter,jumlah_ascii7,dummy_bit,a,b,c,d,i:integer;
begin
data:=copy(pdu, (t_temp+1), length(pdu));
kedesimal(data[1]);
a:=t_desimal;
kedesimal(data[2]);
b:=t_desimal;
jumlah_karakter:=(16*a)+b;
data:=copy(data, 3, length(pdu));
temp:=data;
c:=1;
d:=0;
while(c<=length(data)) do
begin
data[c+1]:=temp[length(data)-d];
data[c]:=temp[length(data)-(d+1)];
c:=c+2;
d:=d+2;
end;
for i:=1 to length(data) do
begin
kebiner2(data[i]);
biner:=biner + t_biner2;
end;
dummy_bit:=length(biner) mod 7;
delete(biner, 1, dummy_bit);
jumlah_ascii7:=length(biner) div 7;

c:=0;
d:=1;
while (c<jumlah_ascii7) do
begin
temp:=copy(biner, d, 7);
temp2:=copy(temp, 1, 3);
keheksa1(temp2);
temp3:=copy(temp, 4, 4);
keheksa2(temp3);
kedesimal(t_heksa1);
a:=t_desimal;
kedesimal(t_heksa2);
b:=t_desimal;
desimal:=(16*a)+b;
hasil:=hasil + chr(desimal);
d:=d+7;
c:=c+1;
end;
temp:=hasil;
c:=1;
d:=0;
while(c<=length(hasil)) do
begin
hasil[c]:=temp[length(hasil)-d];
c:=c+1;
d:=d+1;
Form1.Memo5.Text:=hasil;
t_heksa:='';
t_biner:='';
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo3.SelectAll;
Memo3.CopyToClipboard;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Memo4.SelectAll;
Memo4.PasteFromClipboard;
end;
procedure TForm1.bthapus1Click(Sender: TObject);
begin
edsms.Clear;
edhasil.Clear;
edno.Clear;

edhasil2.Clear;
memo1.Clear;
memo2.Clear;
memo3.Clear;
Memo4.Clear;
Memo5.Clear;
edsms2.Clear;
edhsl.Clear;
edno2.Clear;
edhsl2.Clear;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Close();
end;
procedure TForm1.P2TClick(Sender: TObject);
begin
begin
sms_center_pdu(Memo4.Text);
nomer_penerima_pdu(Memo4.Text);
pdu2text(Memo4.Text);
end;
end;
//procedure TForm1.edsmsChange(Sender: TObject);
//begin
//end;
procedure TForm1.T2PClick(Sender: TObject);
const
tipe_sms='11';
no_ref='00';
bentuk_sms='00'; //sms
encoding='00';
//7bit
expired='FF';
//maksimum
begin
sms_center(edsms.Text);
nomer_penerima(edno.Text);
text2pdu(memo1.Text);
memo3.Text:=edhasil.Text+
tipe_sms+no_ref+
bentuk_sms+encoding+expired+memo2.Text;
end;
end.

edhasil2.Text+

Selesai penulisan listing program selanjutnya klik Run. Tampilan awal saat
dilakukan Run :

Selanjutnya adalah mengisikan SMS Centre, Nomor Penerima, dan Isi Pesan pada
kolom yang telah tersedia. Lalu selanjutnya klik KonversiTEXTtoPDU dan klik
KonversiPDUtoTEXT maka akan muncul hasil konversi dari SMS Centre, Nomor
Penerima, Isi Pesan, dan hasil konversi dari Text ke PDU setelah digabungkan serta
hasil konversi dari PDU ke Text. Tampilannya seperti berikut :

Kemudian klik copy dan paste yang mana hasil converse text to pdu akan tampil pada
memo konversi pdu ke text lalu kill button pdu 2 text yang akan menampilkan konversi
pdu to text.

Jika ingin menghapus data dan memulai konversi lagi maka dapat di klik Hapus
sehingga data awal akan terhapus dan dapat dilakukan konversi kembali.

Jika ingin keluar dari program maka klik Exit.

Kesimpulan
1) Dengan menggunakan program Delphi7 dapat dilakukan pengubahan format data
ke Protocol Data Unit (PDU) atau PDU ke Text
2) Kita dapat mengetahui bagian-bagian atau header untuk mengirim maupun
menerima pesan seperti Nomor SMS Center Tipe SMS, Nomor Referensi SMS,
Nomor Ponsel Penerima, Bentuk SMS, Skema encoding Data I/O, jangka waktu
sebelum SMS expired, dan isi SMS.
VII.

Referensi
1) Panduan Praktikum Komunikasi Data