Anda di halaman 1dari 20

Praktikum IV

Komunikasi Komputer Dengan Handphone


(Pemanfaatan Protocol Data Unit)

1. Capaian Pembelajaran
 Mahasiswa mampu menghubungkan handphone dengan computer
 Mahasiswa mampu mengkonversi teks yang dikirim dan diterima ke format
protocol data unit (PDU) atau sebaliknya secara manual
 Mahasiswa dapat melakukan instalasi untuk komponen yang tidak terdapat
pada Delphi (MSCOMM)
 Mahasiswa dapat membuat program untuk komunikasi antara computer ke
handphone
 Mahasiswa dapat mengirimkan dan menerima SMS (Sort Message Service)
dari computer
 MAhasiswa dapat membuat program untuk mengubah format teks ke dalam
format protocol data unit (PDU) dengan Bahasa pemrograman program Delphi
2. Alat dan Bahan
 Program Delphi versi 6 ke atas
 Komputer serial (MSCOMM)
 HAndphone (Siemens typ M35.C45 atau A55) 1 buah
 Kabel data
 Komputer 1 buah
3. Teori penunjang
A. Protocol Darta Unit (PDU)
Format data yang diterimaatau yang dikirim handphone berupa protocol data
unit (PDU), PDU yang diterima dari handphone berbeda dengan PDU yang
dikirim, namun tetap menggunakan aturan yang sama. Perbedaannnya 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 Tipe Nomor Nomr Bentuk Skema Jangka Isi SMS
SMS SMS/ Referensi Ponsel SMS Encoding waktu (Jumlah
center SMS SMS (8 Penerima (8 bit) Data I/O sebelum bit
(tergantung SUBMIT bit) (tergantung (7 bit/ 8 SMS tergantung
operator) (8bit) operatr) bit) Expired pada
(8 bit jumlah
karakter
yang
dikirim)

1. Nomor SMS Center


Header pertama ini terbagi atas tiga subheader, yaitu :
a. Jumlah pemasangan heksadesimal SMS-Center dalam bilangan heksa
b. Kode nasional/internasional untuk negara Indonesia
Untuk nasinal , kode subheader-nya adalah 81
Untuk internasional, kode subheadernya adalah 91
c. Nomor SMS Centernya sendiri dalam pasangan heksa dibalik-balik
jika tertinggal satu angka heksa yang tidak memiliki pasangan, angka
tersebut akan dipasangkan dengan F di depannya
Contoh : nomor SMS Center Indosat IM# dapat ditulis dengan dua cara
sebagai berikut :
Cara 1 (nasional) :
0855000000 diubah menjadi :
a. 0855000000 : ada 5 pasang nomor smsc
b. 81 : 1 pasang
c. 80-55-00-00-00 : 5 pasang nomor smsc yang sudah dibalik
perpasangan
Digabung menjadi : 0681805500000
Cara 2 ( internasional):
a. 6285500000F : ada 6 pasang
b. 91 : ada 1 pasang
c. 26-58-05-00-00-0F : 6 pasang smsc yang sudah dibalik
perpasangan
Digabung menjadi 0791265805000F0
Berikut beberapa contoh nomor SMS0center operator seluler di
Indonesia.
Tabel 4.1 Nomor SMS Center dengan cara 1
No Operator Seluler SMS-Center Kode PDU
1 Telkomsel 0811000000 06818011000000
2 Satelindo 0816124 0581806121F4
3 Excelcom 0818445009 0681081440590
4 Indosat-IM3 085500000 06818055000000

No Operator Seluler SMS-Center Kode PDU


1 Telkomsel 62811000000 07912618010000F0
2 Satelindo 62816124 059126181642
3 Excelcom 62818445009 07912618485400F9
4 Indosat-IM3 6285500000 07912658050000F0
2. Tipe SMS (SMS SUBMIT)
Tipe SMS SUBMIT = 11 (kode pengirim sms).
3. Nomor referensi SMS
Nomor referensi dibiarkan 0. Jadi, bilangin heksanya 00. Selanjutnya akan
diberikan sebuah noor 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 decimal nonor 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 du acara, yaitu sebagai berikut :
Cara 1 (nasional) : 08129573337 diubah menjadi :
a. 0B : ada 11 angka (jumlah bilangan decimal dari nomor tujuan)
b. 81 (subheader nasional)
c. 80-21-59-37-33-F7 (penggabungan nomor tujuan yang dbalik,
apabila tertinggal 1 angka maka ditambahkan huruf ‘F’
didepannya)
Digabung menjadi : 0B818021593733F7
Cara 2 (internasional) : 628129573337 diubah menjadi :
a. 0C: ada 12 angka (jumlah bilangan decimal dari nomor tujuan)
b. 91 (subheader nasional)
c. 26-81-92-75-33-73 (penggabungan nomor tujuan yang dibalik,
apabila tertinggal 1 angka maka ditambahkan huruf ‘F’
didepannya)
Digabung menjadi : 0C91261892753373
5. Bentuk SMS
0  00  dikirim sebagai SMS
1  01  dikirim sebagai teks
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. Skena 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 7 1
h 110 1000
e 110 0101
l 110 1100
l 110 1100
o 110 1111
langkah kedua:
E 8

h 1 110 1000

3 2

e 00 11 0010 1

9 B

l 100 1 1011 00

F D

l 1111 1101 100

0 6

o 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

4. Langkah Kerja
1. Membuat Display tampilan program seperti berikut :

2. Menuliskan program dibawah berikut :


var
Form1: TForm1;
t_biner,t_biner2,t_biner3,t_hexa,t_heksa,simpan,t_dec:string;
implementation
//uses Unpdu2;
{$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 kebiner11 (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_biner2 := 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;
end;
procedure kebiner22 (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_biner3 := data;
end;

procedure keheksa (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;
end;

procedure kedec (data:string);


var
temp : string;
begin
temp:=data;
if temp = '1000000' then temp :='64';
if temp = '1000001' then temp :='65';
if temp = '1000010' then temp :='66';
if temp = '1000011' then temp :='67';
if temp = '1000100' then temp :='68';
if temp = '1000101' then temp :='69';
if temp = '1000110' then temp :='70';
if temp = '1000111' then temp :='71';
if temp = '1001000' then temp :='72';
if temp = '1001001' then temp :='73';
if temp = '1001010' then temp :='74';
if temp = '1001011' then temp :='75';
if temp = '1001100' then temp :='76';
if temp = '1001101' then temp :='77';
if temp = '1001110' then temp :='78';
if temp = '1001111' then temp :='79';

if temp = '1010000' then temp :='80';


if temp = '1010001' then temp :='81';
if temp = '1010010' then temp :='82';
if temp = '1010011' then temp :='83';
if temp = '1010100' then temp :='84';
if temp = '1010101' then temp :='85';
if temp = '1010110' then temp :='86';
if temp = '1010111' then temp :='87';
if temp = '1011000' then temp :='88';
if temp = '1011001' then temp :='89';
if temp = '1011010' then temp :='90';

if temp = '1100000' then temp :='96';


if temp = '1100001' then temp :='97';
if temp = '1100010' then temp :='98';
if temp = '1100011' then temp :='99';
if temp = '1100100' then temp :='100';
if temp = '1100101' then temp :='101';
if temp = '1100110' then temp :='102';
if temp = '1100111' then temp :='103';
if temp = '1101000' then temp :='104';
if temp = '1101001' then temp :='105';
if temp = '1101010' then temp :='106';
if temp = '1101011' then temp :='107';
if temp = '1101100' then temp :='108';
if temp = '1101101' then temp :='109';
if temp = '1101110' then temp :='110';
if temp = '1101111' then temp :='111';

if temp = '1000000' then temp :='112';


if temp = '1000001' then temp :='113';
if temp = '1000010' then temp :='114';
if temp = '1000011' then temp :='115';
if temp = '1000100' then temp :='116';
if temp = '1000101' then temp :='117';
if temp = '1000110' then temp :='118';
if temp = '1000111' then temp :='119';
if temp = '1001000' then temp :='120';
if temp = '1001001' then temp :='121';
if temp = '1001010' then temp :='122';

t_dec:=temp;
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 sms_pdu(data:string);
var jumlah_pasangan,a:integer;
nomer,kode,temp:string;
begin
a:=1;
nomer:=data;
temp:=data;
while(a<=length(data)+2) do
begin
nomer[a+1]:=temp[a];
nomer[a]:=temp[a+1];
a:=a+2;
end;
form1.ed2.Text:=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 nomer_pdu(data:string);
var
a:integer;
nomer,kode,temp,jumlah_nomer:string;
begin
a:=1;
nomer:=data;
temp:=data;
while(a<=length(data)+2)do
begin
nomer[a+1]:=temp[a];
nomer[a]:=temp[a+1];
a:=a+2;
end;
form1.ed4.Text:=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;
keheksa(temp2);
inc(c);
temp2:='';
if c>=2 then
begin
hexa:=hexa+t_heksa;
c:=0;
t_heksa:='';
end;
end;
form1.memo2.Text:=jumlah_kata+hexa;
end;
end;

procedure pdu2text(data:string);
var
pesan2,kotak,kotak2,kotak3,kotak4,kotak5,kotak6,kotak7:string;
c,c2:extended;
a,s,a2,b,b1,n,n2,i,konvert,b2:integer;
begin
pesan2:=data;

t_biner2:='';
t_biner3:='';
b:=length(pesan2);
c:=b/2;
n:=1;

for a:=round(c) downto 1 do


begin
kotak:=copy(pesan2,n,2);
n:=n+2;
kebiner11(kotak[1]);
kebiner22(kotak[2]);
kotak:='';
kotak2:=t_biner2+t_biner3+kotak2;
end;

i:=round((length(kotak2)/8)+1);
for a2:=i downto 0 do
begin
kotak3:=copy(kotak2,i,7);
i:=i+7;
kotak4:=kotak3+kotak4;
end;
kotak5:=kotak4;
b1:=length(kotak5);
c2:=b1/7;
n2:=1;
t_dec:='';
for s:=round(c2) downto 1 do
begin
kotak6:=copy(kotak5,n2,7);
n2:=n2+7;
kedec(kotak6);
konvert:=strtoint(t_dec);
kotak6:='';
kotak7:=kotak7+chr(konvert);
end;
form1.edit2.Text:=kotak7;
end;

procedure TForm1.Button2Click(Sender: TObject);


begin
edsms.Clear;
edhasil.Clear;
edhasil2.Clear;
edno.Clear;
memo1.Clear;
memo2.Clear;
Edit1.Clear;
Edit2.Clear;
ed1.Clear;
ed2.Clear;
ed3.Clear;
ed4.Clear;

end;

procedure TForm1.Button1Click(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);
Edit1.Text:=edhasil.Text+tipe_sms+no_ref+edhasil2.Text+bentuk_sms+encoding+
expired+memo2.Text;
end;
//end;

procedure TForm1.btP2TClick(Sender: TObject);


var
i:integer;
pdu,pdu2:string;
begin
i:=length(memo2.Text);
pdu:=copy (edit1.Text, 1,14);
pdu2:=copy (edit1.Text, 19,16);
ed1.Text:=pdu;
ed3.Text:=pdu2;
sms_pdu(copy(ed1.Text,5,10));
nomer_pdu(copy(ed3.Text,5,12));
pdu2text(copy(memo2.Text,3,i-2));
end;

end.
3. Flowchart yang digunakan adalah :
a. Flowchart teks to PDU
Start

Pilih metode
konversi

Subheader dan
format SMS
Nasional
Center
Internasional

Subheader dan
format SMS
Center Nasional

Pilih operator
seluler

Masukkan
nomor hp
tujuan

Masukkan
pesan teks

Generator kode
PDU

Finish

b. Flowchart PDU to Teks


Start

Klik button
PDU to teks

Konversi PDU
sms center dari
Teks SMS Center

Konversi PDU
nomor penerima
dari edit teks
nomor penerima

Konversi PDU
Teks

Tampilkan
Hasil

Finish

5. Hasil Percobaan
6. Analisa Data
Dari pratikum ini kita dapat menganalisa bahwa konversi Text to PDU bisa dibuat dengan
program dimana konversi yang dilkakukan sama dengan manual yaitu text diubah menjadi
kode ASCII dimana kode ASCII dalam bentuk Hexa
7. Kesimpulan
1. Untuk Nomor SMS Center Indonesia sendiri memiliki dua cara penulisan, kode
nasional dank ode internasional
2. Untuk menghubungkan antara handphone dan komputer dengan program Delphi
dibutuhkan komponen serial seperti MSCOMM.
3. Ada 8 header yang digunakan dalam format PDU yang akan dikirim, diantaranya
adalah 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.
4. Dengan menggunakan program Delphi7 dapat dilakukan pengubahan format data ke
Protocol Data Unit (PDU) atau PDU ke Text

Anda mungkin juga menyukai