Anda di halaman 1dari 28

Tugas Perancangan I GEDE SURYANA S

SIMULASI LIFT PADA GEDUNG 13207191

Tugas Perancangan :

Problem :

Buat simulasi 4 lift yang digunakan untuk melayani gedung 20 lantai dengan ketinggian lantai 3 m.
Menggunakan software Matlab. Kapasitas lift 15 orang, kapasitas lantai gedung 200 orang / lantai dan
setiap lift diasumsikan menggunakan daya sebesar 10 kW. Factor yang dinilai adalah efektivitas dan
keamanan lift.

Analisis :
Untuk merancang simulasi ini ditetapkan asumsi-asumsi sebagai berikut :

 Waktu yang dibutuhkan untuk berpindah lantai = 1 detik


 Setiap lantai jumlah penumpang yang masuk ke lift dianggap sama, yaitu 2 orang

Status dari lift dibuat dalam bentuk matrix untuk mempermudah menyimpan data serta
menganalisis posisi dan permintaan penumpang. Permintaan penumpang dimasukkan sebagai input,
dimana untuk calon penumpang dapat menginput tujuannya apakah akan naik atau turun, setelah
masuk ke dalam lift, baru dapat menentukan tujuan spesifik serta lantai yang dituju.
Pada lantai 1 hanya terdapat tombol naik, sedangkan pada lantai 20 hanya terdapat tombol turun.
Jika penumpang yang ada di dalam lift menginput lebih dari lantai 20 tidak akan dilayani.
Pemilihan lift yang melayani penumpang adalah lift yang terdekat dari lantai penumpang atau
dengan selisih lantai terkecil. Sehingga efisien dimana lift tidak akan butuh terlalu banyak daya listrik
karena melayani penumpang yang terdekat dengannya.
Simulasi disajikan dalam bentuk GUI sehingga mudah dioperasikan, dan perjalanan setiap lift
dapat dipantau dengan mudah.
Namun simulasi ini masih memiliki kekurangan, yaitu belum bisa mensimulasikan keinginan dari
penumpang sebelumnya, seharusnya lebih efisien jika pada satu lift banyak penumpang dengan tujuan
lantai sama, maka penumpang yang meminta dari lantai tujuan tersebut dilayani lebih dulu, sehingga
pergerakkan lift makin efisien.
Serta belum menggambarkan adanya daya start yang besarnya bisa mencapai 5 kali daya nominal,
sehingga seharusnya dengan bisa mengambarkan model ini efisiensi dapat diperbesar.
Selain itu simulator ini belum bisa menghitung energi rata-rata yang digunakan untuk proses
mobilisasi lift.

Pada Energy yang dikeluarkan seharusnya ada 3 komponen yakni


 Komponen energy gerak tiap lantai
Disini digunakan asumsi bahwa lift akan membutuhkan daya sebesar 10 kW, jika diasumsikan lift
memilikikecepatan rata rata 1 detik perlantai maka untuk naik atau turun satu lantai akan dikeluarkan
energy sebesar 10 kJ
 Komponen energy untuk start motor lift

Rating motor lift adalah 10 kW maka besar arus starting kira kira sebesar 5 kali nomina l. Akibatnya daya
start mencapai 5 kali daya nominal atau 50 kJ

 Komponen enrgei oleh penumpang

Jika berat pengguna diasumsikan sama 70 kg maka untuk menaikan atau menurunkan pengguna dengan
jarak 3 meter (jarak tiap lantai) akan dibutuhkan energy sebesar 2,1 kJ. Sehingga energi akibat adanya
penumpan pada lift tergantung jumlah penumpang, yaitu jumlah penumpang x 2,1 kJ

Energi yang dihitung/dikeluarkan oleh lift adalah energi total yang merupaka jumlah total semua
energi diatas.

Source code :

%% Elevator Simulation Model

% Khaerul Anwar
% 13207175
% Institute Technology of Bandung
% October 30th, 2010
% if there are something wrong, please email me on
% anwar.khaerul@gmail.com

% merupakan simulasi rangkaian lift pada sebuah gedung dengan


% menggunakan GUI. pada program ini, jumlah lantai yang diset sebanyak
% 20 lantai. sedangkan jumlah lift yang dirancang pada program ini
% hanya sebanyak 4 buah.
% Namun sebenarnya pada program ini, kita dapat mengubah berapa jumlah
% lantai dan lift yang dibutuhkan pada simulasi.
% pada tiap lantai, hanya disediakan satu buah tombol 'naik' dan satu
% buah tombol 'turun'.
% pada program ini, sudah terprogram efisiensi lift.
% lift yang paling dekat dengan request yang akan melayani pelanggan.

%% Elevator Model
% variabel dan konstanta

waktu = 1.5;
% kecepatan lift pindah satu lantai / buka-tutup pintu)

npenum = 2;
% jumlah orang tiap masuk lift

elift = zeros(20,4);
% container real semua lift
% merupakan matriks [20 x 4] yang berisi nilai 1 atau 0
% nilai: 1 = isi, 0 = kosong

estate = zeros(4,4);
% Matriks keadaan semua lift
% merupakan matriks [4 x 4] yang berisi informasi sebagai berikut :
% baris 1: state lift (0: idle, 1: naik, 2: turun)
% baris 2: posisi lift (range: 1 - 20)
% baris 3: jumlah orang di lift
% baris 4: sedang membuka pintu atau tidak (0: tutup, 1 : buka)

eantnaik = zeros(20,4);
% matriks antrian naik untuk semua lift
% berupa matriks [20 x 4] yang berisi antrian lantai yang akan
% dilewati oleh lift

eantturun = zeros(20,4);
% matriks antrian turun untuk semua lift
% berupa matriks [20 x 4] yang berisi antrian lantai yang akan
% dilewati oleh lift

etunggu = zeros(1,4);
% matriks tunggu lift (0 = tidak, 1 = tunggu)
% hanya digunakan pada state idle

lanjut = true;
% true = bergerak (iterasi while do)
% false = paused (tidak ada yg diproses)

%% Kondisi Mula Elevator

for a=1:4,
estate(1,a) = 0;
estate(2,a) = 1;
estate(3,a) = 0;
estate(4,a) = 0;
elift(1,a) = 1;
etunggu(1,a) = 0;
end

%% FUNCTIONS
%% Fungsi Dasar

% fungsi gerak lift


function Naik (lidx)
% fungsi naik satu lantai
% lidx adalah index lift
if (lidx > 4)
msgbox('melebihi jumlah lift','error');
else
% iterasi pencarian lift
x = 0;
for i=1:20
if (elift(i,lidx) == 1)
x = i;
end
end
x = estate(2,lidx);
if (x == 0)

elseif (x < 20)


elift(x,lidx) = 0;
elift(x + 1,lidx) = 1;
estate(2,lidx) = x + 1;
else
msgbox('sudah lantai atas max, tidak bisa naik','=.=');

end
end
end
function NaikN (lidx, N)
% fungsi naik N lantai
for i=1:N
Naik(lidx);
end
end
function Turun (lidx)
% fungsi turun satu lantai
% lidx adalah nomor lift
if (lidx > 4)
msgbox('melebihi jumlah lift','error');
else

x = 0;
for i=1:20
if (elift(i,lidx) == 1)
x = i;
end
end
x = estate(2,lidx);

if (x == 0)

elseif (x > 1)
elift(x,lidx) = 0;
elift(x - 1,lidx) = 1;
estate(2,lidx) = x - 1;
else
msgbox('sudah lantai bawah max, tidak bisa turun','=.=');

end
end
end
function TurunN (lidx, N)
% fungsi turun N lantai
for i=1:N
Turun(lidx);
end
end

function Naik1(lidx)
% satu eksekusi pada state Naik
if (estate(4,lidx) == 1)
% masukkan orang, tutup pintu
estate(4,lidx) = 0;
estate(3,lidx) = estate(3,lidx) + npenum;
else
if (eantnaik(1,lidx) == estate(2,lidx))
% berhenti, buka pintu, orang turun
% pop antrian eantnaik
estate(4,lidx) = 1;
if (estate(3,lidx) > 0)
estate(3,lidx) = estate(3,lidx) - npenum;
end
temp = equPop(lidx);
else
% naik
Naik(lidx);
end
end
if (eantnaik(1,lidx) == 0 && eantturun(1,lidx) == 0)
% jika eantnaik kosong dan eantturun kosong, change state ke idle
estate(1,lidx) = 0;
elseif (eantnaik(1,lidx) == 0 && eantturun(1,lidx) > 0)
% jika eantnaik kosong, eantturun berisi, change state ke turun
estate(1,lidx) = 2;
end
end

function Turun1(lidx)
if (estate(4,lidx) == 1)
estate(4,lidx) = 0;
estate(3,lidx) = estate(3,lidx) + npenum;
else
if (eantturun(1,lidx) == estate(2,lidx))
% berhenti, buka pintu, orang turun

estate(4,lidx) = 1;
if (estate(3,lidx) > 0)
estate(3,lidx) = estate(3,lidx) - npenum;
end
temp = eqdPop(lidx);
else
% turun
Turun(lidx);
end
end
if (eantturun(1,lidx) == 0 && eantnaik(1,lidx) == 0)
% jika eantturun kosong dan eantnaik kosong, change state ke idle
estate(1,lidx) = 0;
elseif (eantturun(1,lidx) == 0 && eantnaik(1,lidx) > 0)
% jika eantturun kosong, eantnaik berisi, change state ke naik
estate(1,lidx) = 1;
end
end
function Idle(lidx)
% satu eksekusi pada state idle
if (estate(4,lidx) == 1 && etunggu(1,lidx) == 0)
% masukkan orang, tutup pintu
estate(4,lidx) = 0;
estate(3,lidx) = estate(3,lidx) + npenum;
elseif (estate(4,lidx) == 1 && etunggu(1,lidx) == 1)
% tunggu orang masuk
etunggu(1,lidx) = 0;
end
if (eantnaik(1,lidx) > 0)
% change state -> naik
estate(1,lidx) = 1;
Naik1(lidx);
elseif (eantturun(1,lidx) > 0)
% change state -> turun
estate(1,lidx) = 2;
Turun1(lidx);
end
end
function JalankanLift()
% satu eksekusi semua lift
for i=1:4
if (estate(1,i) == 0)
Idle(i);
elseif (estate(1,i) == 1)
Naik1(i);
elseif (estate(1,i) == 2)
Turun1(i);
end
end
end

function rentang = Jarak (x1,x2)


rentang = x1 - x2;
temp = x2 -x1;
if (temp > rentang)
rentang = temp;
end
end

% Antrian Naik Lift


function eNaikPush(lidx,x)
i = 1;
found = 0;
while (eantnaik(i,lidx) > 0)
if (eantnaik(i,lidx) == x)
found = 1;
end
i = i+1;
end

if (found == 0)
eantnaik(i,lidx) = x;
end
equSortAscending(lidx);
end
function x = equPop(lidx)
if (eantnaik(1,lidx) > 0)
x = eantnaik(1,lidx);
end
i = 1;
while(eantnaik(i,lidx) > 0)
eantnaik(i,lidx) = eantnaik(i+1,lidx);
i = i+1;
end
end
function equSortDescending(lidx)
% menghitung jumlah efektif antrian :
nq = 0;
for i=1:20
if (eantnaik(i,lidx) > 0)
nq = nq+1;
end
end
rAn = nq;
iAn = 0;
% rAn: remaining antrian
% nq: n eff antrian
% iterasi pengurutan :
while (rAn > 1)
rAn = rAn - 1;
iAn = iAn + 1;
idxmax = equGetIdxMax(lidx,iAn);
if (iAn == idxmax)

else

temp = eantnaik(idxmax,lidx);
eantnaik(idxmax,lidx) = eantnaik(iAn,lidx);
eantnaik(iAn,lidx) = temp;
end
end
end
function equSortAscending(lidx)

% Jumlah efektif antrian :


nq = 0;
for i=1:20
if (eantnaik(i,lidx) > 0)
nq = nq+1;
end
end
rAn = nq;
iAn = 0;
% rAn: remaining antrian
% nq: n eff antrian
% iterasi pengurutan :
while (rAn > 1)
rAn = rAn - 1;
iAn = iAn + 1;
idxmin = equGetIdxMin(lidx,iAn);
if (iAn == idxmin)
else

temp = eantnaik(idxmin,lidx);
eantnaik(idxmin,lidx) = eantnaik(iAn,lidx);
eantnaik(iAn,lidx) = temp;
end
end
end
function rentang = equGetIdxMax(lidx, startidx)
max = eantnaik(startidx,lidx);
rentang = startidx;
for i=startidx:20
if (eantnaik(i,lidx) > max)
max = eantnaik(i,lidx);
rentang = i;
end
end
end
function rentang = equGetIdxMin(lidx, startidx)
min = eantnaik(startidx,lidx);
rentang = startidx;
for i=startidx:20
if (eantnaik(i,lidx) < min && eantnaik(i,lidx) > 0)
min = eantnaik(i,lidx);
rentang = i;
end
end
end

% Antrian Turun Lift


function eTurunPush(lidx,x)
i = 1;
found = 0;
while (eantturun(i,lidx) > 0)
if (eantturun(i,lidx) == x)
found = 1;
end
i = i+1;
end

if (found == 0)
eantturun(i,lidx) = x;
end
eNaikSortDescending(lidx);
end
function x = eqdPop(lidx)
if (eantturun(1,lidx) > 0)
x = eantturun(1,lidx);
end
i = 1;
while(eantturun(i,lidx) > 0)
eantturun(i,lidx) = eantturun(i+1,lidx);
i = i+1;
end
end
function eNaikSortDescending(lidx)
% Jumlah efektif antrian :
nq = 0;
for i=1:20
if (eantturun(i,lidx) > 0)
nq = nq+1;
end
end
rAn = nq;
iAn = 0;
% rAn: remaining antrian
% nq: n eff antrian
% iterasi pengurutan :
while (rAn > 1)
rAn = rAn - 1;
iAn = iAn + 1;
idxmax = eNaikGetIdxMax(lidx,iAn);
if (iAn == idxmax)

else
% menukar max dengan head
temp = eantturun(idxmax,lidx);
eantturun(idxmax,lidx) = eantturun(iAn,lidx);
eantturun(iAn,lidx) = temp;
end
end
end
function eTurunSortAscending(lidx)
% menghitung jumlah efektif antrian :
nq = 0;
for i=1:20
if (eantturun(i,lidx) > 0)
nq = nq+1;
end
end
rAn = nq;
iAn = 0;
% rAn: remaining antrian
% nq: n eff antrian
% iterasi pengurutan :
while (rAn > 1)
rAn = rAn - 1;
iAn = iAn + 1;
idxmin = eTurunGetIdxMin(lidx,iAn);
if (iAn == idxmin)

else

temp = eantturun(idxmin,lidx);
eantturun(idxmin,lidx) = eantturun(iAn,lidx);
eantturun(iAn,lidx) = temp;
end
end
end
function rentang = eNaikGetIdxMax(lidx, startidx)
max = eantturun(startidx,lidx);
rentang = startidx;
for i=startidx:20
if (eantturun(i,lidx) > max)
max = eantturun(i,lidx);
rentang = i;
end
end
end
function rentang = eTurunGetIdxMin(lidx, startidx)
min = eantturun(startidx,lidx);
rentang = startidx;
for i=startidx:20
if (eantturun(i,lidx) < min && eantturun(i,lidx) > 0)
min = eantturun(i,lidx);
rentang = i;
end
end
end

function rentang = GetFinalDest (lidx, ud)


rentang = 0;
if (ud == 1)
for k=1:20
if(eantnaik(k,lidx) > 0)
rentang = eantnaik(k,lidx);
end
end
elseif (ud == 2)
for k=1:20
if(eantturun(k,lidx) > 0)
rentang = eantturun(k,lidx);
end
end
end
end

% debugging functions
function Showequ()
disp('EQU =');
disp(eantnaik);
disp('estate(2,i) =');
disp(estate(2,:));
end
function Showeqd()
disp('EQD =');
disp(eantturun);
disp('estate(2,:) =');
disp(estate(2,:));
end
function Showelev()
disp('E =');
disp(elift);
disp('estate(2,:) =');
disp(estate(2,:));
end
% Strategical methods
function lidx = TentukanLift (rf, ud)
% rf = lantai tujuan
% ud = naik atau turun (1 = naik, 2 = turun)

g = zeros(1,4);
for j=1:4
if (estate(1,j) == ud && estate(1,j) > 0)
% jika request u/d sama dengan state, tidak sama dgn nol
g(1,j) = Jarak(rf,estate(2,j));
elseif(estate(1,j) == 0)
% jika state idle
g(1,j) = Jarak(rf,estate(2,j));
else
% jika request u/d berbeda dengan state
fd = GetFinalDest(j,estate(1,j));
g1 = Jarak(rf,fd);
g2 = Jarak(fd,estate(2,j));
g(1,j) = g1 + g2;
end
end

min = g(1,1);
lidx = 1;
for i=2:4
if (g(1,i) < min)
min = g(1,i);
lidx = i;
end
end
end

%% Permintaan

% Permintaan dari Luar (tombol di luar ruangan lift)


% rf = Lantai tujuan
function PNaik(rf)
if (rf <= 20)
lidx = TentukanLift(rf,1);
if(rf > estate(2,lidx))
eNaikPush(lidx,rf);
% Showequ(); % debug
elseif(rf < estate(2,lidx))
eTurunPush(lidx,rf);
% Showeqd(); % debug
elseif(rf == estate(2,lidx))
estate(4,lidx) = 1;
etunggu(1,lidx) = 1;
end

if(eantnaik(1,lidx) == 0 && eantturun(1,lidx) == 0)


if(rf > estate(2,lidx))
estate(1,lidx) = 1;
elseif(rf < estate(2,lidx))
estate(1,lidx) = 2;
elseif(rf == estate(2,lidx))
estate(1,lidx) = 0;
end
end
end
end
function PTurun(rf)
if (rf <= 20)
lidx = TentukanLift(rf,2);
if(rf > estate(2,lidx))
eNaikPush(lidx,rf);
% Showequ(); % debug
elseif(rf < estate(2,lidx))
eTurunPush(lidx,rf);
% Showeqd(); % debug
elseif(rf == estate(2,lidx))
estate(4,lidx) = 1;
etunggu(1,lidx) = 1;
end

if(eantnaik(1,lidx) == 0 && eantturun(1,lidx) == 0)


if(rf > estate(2,lidx))
estate(1,lidx) = 1;
elseif(rf < estate(2,lidx))
estate(1,lidx) = 2;
elseif(rf == estate(2,lidx))
estate(1,lidx) = 0;
end
end
end
end

% Permintaan dari Dalam Ruangan Lift


% rdf = lantai tujuan
function InReq(rdf,lidx)
if(lidx <= 4 && lidx > 0 && rdf <= 20 && rdf > 0)
if(estate(1,lidx) == 1)
if(estate(2,lidx) < rdf)
% jika state naik, dan requested floor lebih dari current
floor,
% masukkan ke eantnaik
eNaikPush(lidx,rdf);
elseif(estate(2,lidx) > rdf)
% jika state naik, dan requested floor kurang dari current
% floor, masukkan eantturun
eTurunPush(lidx,rdf);
elseif(estate(2,lidx) == rdf)
% jika state naik, dan requested floor sama dgn current
% floor, masukkan eantnaik
eNaikPush(lidx,rdf);
% estate(4,lidx) = 1;
end
elseif(estate(1,lidx) == 2)
if(estate(2,lidx) < rdf)
% jika state turun, dan requested floor lebih dari current
floor,
% masukkan ke eantnaik
eNaikPush(lidx,rdf);
elseif(estate(2,lidx) > rdf)
% jika state turun, dan requested floor kurang dari
current
% floor, masukkan eantturun
eTurunPush(lidx,rdf);
elseif(estate(2,lidx) == rdf)
% jika state turun, dan requested floor sama dgn current
% floor, masukkan eantturun
eTurunPush(lidx,rdf);
% estate(4,lidx) = 1;
end
elseif(estate(1,lidx) == 0)
if(estate(2,lidx) < rdf)
% jika state idle, dan requested floor lebih dari current
floor,
% masukkan ke eantnaik, state diubah jadi naik
eNaikPush(lidx,rdf);
estate(1,lidx) = 1;
elseif(estate(2,lidx) > rdf)
% jika state idle, dan requested floor kurang dari current
% floor, masukkan eantturun, state diubah jadi turun
eTurunPush(lidx,rdf);
estate(1,lidx) = 2;
elseif(estate(2,lidx) == rdf)
% jika state idle, dan requested floor sama dgn current
% floor, buka pintu, wait for people
% eTurunPush(lidx,rdf);
estate(4,lidx) = 1;
etunggu(1,lidx) = 1;
end
end
end
end

%% Functions Debug

% mengatur posisi awal lift

c = 0;
add = (20/4);
for k=1:4
c = c + 0;
NaikN(k,c);
end

% NaikN(1,20);
% melakukan request naik di semua lantai
% for i=1:20
% PNaik(i);
% PTurun(i);
% end

%% Graphics & UI
% create figure
figure('units','normalized',...
'Position',[.2 .1 .6 .8],...
'color',[1 1 1],...
'menubar','none',...
'numbertitle','off',...
'name','Simulation of Efficient Elevator')

%% Penomoran Lantai
uicontrol('Style','text',...
'String','Lantai 1',...
'units','normalized',...
'Position',[.25 .045 .075 .04],...
'fonts',10,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','garamond');
uicontrol('Style','text',...
'String','Lantai 2',...
'units','normalized',...
'Position',[.25 .09 .075 .04],...
'fonts',10,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','garamond');
uicontrol('Style','text',...
'String','Lantai 3',...
'units','normalized',...
'Position',[.25 .135 .075 .04],...
'fonts',10,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','garamond');
uicontrol('Style','text',...
'String','Lantai 4',...
'units','normalized',...
'Position',[.25 .18 .075 .04],...
'fonts',10,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','garamond');
uicontrol('Style','text',...
'String','Lantai 5',...
'units','normalized',...
'Position',[.25 .225 .075 .04],...
'fonts',10,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','garamond');
uicontrol('Style','text',...
'String','Lantai 6',...
'units','normalized',...
'Position',[.25 .27 .075 .04],...
'fonts',10,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','garamond');
uicontrol('Style','text',...
'String','Lantai 7',...
'units','normalized',...
'Position',[.25 .315 .075 .04],...
'fonts',10,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','garamond');
uicontrol('Style','text',...
'String','Lantai 8',...
'units','normalized',...
'Position',[.25 .36 .075 .04],...
'fonts',10,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','garamond');
uicontrol('Style','text',...
'String','Lantai 9',...
'units','normalized',...
'Position',[.25 .405 .075 .04],...
'fonts',10,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','garamond');
uicontrol('Style','text',...
'String','Lantai 10',...
'units','normalized',...
'Position',[.25 .445 .075 .04],...
'fonts',10,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','garamond');
uicontrol('Style','text',...
'String','Lantai 11',...
'units','normalized',...
'Position',[.25 .49 .075 .04],...
'fonts',10,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','garamond');
uicontrol('Style','text',...
'String','Lantai 12',...
'units','normalized',...
'Position',[.25 .535 .075 .04],...
'fonts',10,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','garamond');
uicontrol('Style','text',...
'String','Lantai 13',...
'units','normalized',...
'Position',[.25 .58 .075 .04],...
'fonts',10,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','garamond');
uicontrol('Style','text',...
'String','Lantai 14',...
'units','normalized',...
'Position',[.25 .625 .075 .04],...
'fonts',10,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','garamond');
uicontrol('Style','text',...
'String','Lantai 15',...
'units','normalized',...
'Position',[.25 .67 .075 .04],...
'fonts',10,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','garamond');
uicontrol('Style','text',...
'String','Lantai 16',...
'units','normalized',...
'Position',[.25 .715 .075 .04],...
'fonts',10,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','garamond');
uicontrol('Style','text',...
'String','Lantai 17',...
'units','normalized',...
'Position',[.25 .76 .075 .04],...
'fonts',10,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','garamond');
uicontrol('Style','text',...
'String','Lantai 18',...
'units','normalized',...
'Position',[.25 .805 .075 .04],...
'fonts',10,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','garamond');
uicontrol('Style','text',...
'String','Lantai 19',...
'units','normalized',...
'Position',[.25 .85 .075 .04],...
'fonts',10,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','garamond');
uicontrol('Style','text',...
'String','Lantai 20',...
'units','normalized',...
'Position',[.25 .895 .075 .04],...
'fonts',10,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','garamond');
% IN_REQUEST
% labels
uicontrol('Style','text',...
'String','Tombol dlm Lift',...
'units','normalized',...
'Position',[.76 .3 .21 .04],...
'fonts',14,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','courier',...
'fontweight','bold');
uicontrol('Style','text',...
'String',' Lift :',...
'units','normalized',...
'Position',[.76 .245 .075 .04],...
'fonts',12,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','calibri');
uicontrol('Style','text',...
'String','Lantai',...
'units','normalized',...
'Position',[.76 .195 .075 .04],...
'fonts',12,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','calibri');
% buttons
uicontrol('Style','pushbutton',...
'String','jalan',...
'units','normalized',...
'Position',[.91 .2 .07 .09],...
'Callback',@doinreq);
% editboxes
e_inreq=uicontrol('style','edit',...
'units','normalized',...
'position',[.84 .25 .06 .04],...
'backgroundcolor',[1 1 1],...
'fontweight','bold',...
'fonts',11);
e_inreq1 = uicontrol('style','edit',...
'units','normalized',...
'position',[.84 .2 .06 .04],...
'backgroundcolor',[1 1 1],...
'fontweight','bold',...
'fonts',11);

%% OUT_REQUEST
% labels
uicontrol('Style','text',...
'String','Tombol luar Lift',...
'units','normalized',...
'Position',[.565 .695 .23 .04],...
'fonts',12,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','courier',...
'fontweight','bold');
uicontrol('Style','text',...
'String','SIMULASI 4 LIFT',...
'units','normalized',...
'Position',[.02 .895 .23 .04],...
'fonts',12,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','courier',...
'fontweight','bold');
uicontrol('Style','text',...
'String','I Gede SuryanA S',...
'units','normalized',...
'Position',[.765 .895 .23 .04],...
'fonts',12,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','courier',...
'fontweight','bold');
uicontrol('Style','text',...
'String','13207191',...
'units','normalized',...
'Position',[.840 .865 .23 .04],...
'fonts',12,...
'Backgroundcolor','w',...
'horizontalAlignment','left',...
'fontname','courier',...
'fontweight','bold');

%% UP request
function dooutrequp1(varargin)
PNaik(1);
if (lanjut == false)
dolanjutkan();
end
end
function dooutrequp2(varargin)
PNaik(2);
if (lanjut == false)
dolanjutkan();
end
end
function dooutrequp3(varargin)
PNaik(3);
if (lanjut == false)
dolanjutkan();
end
end
function dooutrequp4(varargin)
PNaik(4);
if (lanjut == false)
dolanjutkan();
end
end
function dooutrequp5(varargin)
PNaik(5);
if (lanjut == false)
dolanjutkan();
end
end
function dooutrequp6(varargin)
PNaik(6);
if (lanjut == false)
dolanjutkan();
end
end
function dooutrequp7(varargin)
PNaik(7);
if (lanjut == false)
dolanjutkan();
end
end
function dooutrequp8(varargin)
PNaik(8);
if (lanjut == false)
dolanjutkan();
end
end
function dooutrequp9(varargin)
PNaik(9);
if (lanjut == false)
dolanjutkan();
end
end
function dooutrequp10(varargin)
PNaik(10);
if (lanjut == false)
dolanjutkan();
end
end
function dooutrequp11(varargin)
PNaik(11);
if (lanjut == false)
dolanjutkan();
end
end
function dooutrequp12(varargin)
PNaik(12);
if (lanjut == false)
dolanjutkan();
end
end
function dooutrequp13(varargin)
PNaik(13);
if (lanjut == false)
dolanjutkan();
end
end
function dooutrequp14(varargin)
PNaik(14);
if (lanjut == false)
dolanjutkan();
end
end
function dooutrequp15(varargin)
PNaik(15);
if (lanjut == false)
dolanjutkan();
end
end
function dooutrequp16(varargin)
PNaik(16);
if (lanjut == false)
dolanjutkan();
end
end
function dooutrequp17(varargin)
PNaik(17);
if (lanjut == false)
dolanjutkan();
end
end
function dooutrequp18(varargin)
PNaik(18);
if (lanjut == false)
dolanjutkan();
end
end
function dooutrequp19(varargin)
PNaik(19);
if (lanjut == false)
dolanjutkan();
end
end

%% DOWN request
function dooutreqdown2(varargin)
PTurun(2);
if (lanjut == false)
dolanjutkan();
end
end
function dooutreqdown3(varargin)
PTurun(3);
if (lanjut == false)
dolanjutkan();
end
end
function dooutreqdown4(varargin)
PTurun(4);
if (lanjut == false)
dolanjutkan();
end
end
function dooutreqdown5(varargin)
PTurun(5);
if (lanjut == false)
dolanjutkan();
end
end
function dooutreqdown6(varargin)
PTurun(6);
if (lanjut == false)
dolanjutkan();
end
end
function dooutreqdown7(varargin)
PTurun(7);
if (lanjut == false)
dolanjutkan();
end
end
function dooutreqdown8(varargin)
PTurun(8);
if (lanjut == false)
dolanjutkan();
end
end
function dooutreqdown9(varargin)
PTurun(9);
if (lanjut == false)
dolanjutkan();
end
end
function dooutreqdown10(varargin)
PTurun(10);
if (lanjut == false)
dolanjutkan();
end
end
function dooutreqdown11(varargin)
PTurun(11);
if (lanjut == false)
dolanjutkan();
end
end
function dooutreqdown12(varargin)
PTurun(12);
if (lanjut == false)
dolanjutkan();
end
end
function dooutreqdown13(varargin)
PTurun(13);
if (lanjut == false)
dolanjutkan();
end
end
function dooutreqdown14(varargin)
PTurun(14);
if (lanjut == false)
dolanjutkan();
end
end
function dooutreqdown15(varargin)
PTurun(15);
if (lanjut == false)
dolanjutkan();
end
end
function dooutreqdown16(varargin)
PTurun(16);
if (lanjut == false)
dolanjutkan();
end
end
function dooutreqdown17(varargin)
PTurun(17);
if (lanjut == false)
dolanjutkan();
end
end
function dooutreqdown18(varargin)
PTurun(18);
if (lanjut == false)
dolanjutkan();
end
end
function dooutreqdown19(varargin)
PTurun(19);
if (lanjut == false)
dolanjutkan();
end
end
function dooutreqdown20(varargin)
PTurun(20);
if (lanjut == false)
dolanjutkan();
end
end

%% UP buttons
uicontrol('Style','pushbutton',...
'String','Naik',...
'units','normalized',...
'Position',[.5 .045 .03 .045],...
'Callback',@dooutrequp1);
uicontrol('Style','pushbutton',...
'String','Naik',...
'units','normalized',...
'Position',[.5 .09 .03 .045],...
'Callback',@dooutrequp2);
uicontrol('Style','pushbutton',...
'String','Naik',...
'units','normalized',...
'Position',[.5 .135 .03 .045],...
'Callback',@dooutrequp3);
uicontrol('Style','pushbutton',...
'String','Naik',...
'units','normalized',...
'Position',[.5 .18 .03 .045],...
'Callback',@dooutrequp4);
uicontrol('Style','pushbutton',...
'String','Naik',...
'units','normalized',...
'Position',[.5 .225 .03 .045],...
'Callback',@dooutrequp5);
uicontrol('Style','pushbutton',...
'String','Naik',...
'units','normalized',...
'Position',[.5 .27 .03 .045],...
'Callback',@dooutrequp6);
uicontrol('Style','pushbutton',...
'String','Naik',...
'units','normalized',...
'Position',[.5 .315 .03 .045],...
'Callback',@dooutrequp7);
uicontrol('Style','pushbutton',...
'String','Naik',...
'units','normalized',...
'Position',[.5 .36 .03 .045],...
'Callback',@dooutrequp8);
uicontrol('Style','pushbutton',...
'String','Naik',...
'units','normalized',...
'Position',[.5 .405 .03 .045],...
'Callback',@dooutrequp9);
uicontrol('Style','pushbutton',...
'String','Naik',...
'units','normalized',...
'Position',[.5 .45 .03 .045],...
'Callback',@dooutrequp10);
uicontrol('Style','pushbutton',...
'String','Naik',...
'units','normalized',...
'Position',[.5 .495 .03 .045],...
'Callback',@dooutrequp11);
uicontrol('Style','pushbutton',...
'String','Naik',...
'units','normalized',...
'Position',[.5 .54 .03 .045],...
'Callback',@dooutrequp12);
uicontrol('Style','pushbutton',...
'String','Naik',...
'units','normalized',...
'Position',[.5 .585 .03 .045],...
'Callback',@dooutrequp13);
uicontrol('Style','pushbutton',...
'String','Naik',...
'units','normalized',...
'Position',[.5 .63 .03 .045],...
'Callback',@dooutrequp14);
uicontrol('Style','pushbutton',...
'String','Naik',...
'units','normalized',...
'Position',[.5 .675 .03 .045],...
'Callback',@dooutrequp15);
uicontrol('Style','pushbutton',...
'String','Naik',...
'units','normalized',...
'Position',[.5 .72 .03 .045],...
'Callback',@dooutrequp16);
uicontrol('Style','pushbutton',...
'String','Naik',...
'units','normalized',...
'Position',[.5 .765 .03 .045],...
'Callback',@dooutrequp17);
uicontrol('Style','pushbutton',...
'String','Naik',...
'units','normalized',...
'Position',[.5 .81 .03 .045],...
'Callback',@dooutrequp18);
uicontrol('Style','pushbutton',...
'String','Naik',...
'units','normalized',...
'Position',[.5 .855 .03 .045],...
'Callback',@dooutrequp19);

%% tombol Turun
uicontrol('Style','pushbutton',...
'String','Trn',...
'units','normalized',...
'Position',[.53 .09 .03 .045],...
'Callback',@dooutreqdown2);
uicontrol('Style','pushbutton',...
'String','Trn',...
'units','normalized',...
'Position',[.53 .135 .03 .045],...
'Callback',@dooutreqdown3);
uicontrol('Style','pushbutton',...
'String','Trn',...
'units','normalized',...
'Position',[.53 .18 .03 .045],...
'Callback',@dooutreqdown4);
uicontrol('Style','pushbutton',...
'String','Trn',...
'units','normalized',...
'Position',[.53 .225 .03 .045],...
'Callback',@dooutreqdown5);
uicontrol('Style','pushbutton',...
'String','Trn',...
'units','normalized',...
'Position',[.53 .27 .03 .045],...
'Callback',@dooutreqdown6);
uicontrol('Style','pushbutton',...
'String','Trn',...
'units','normalized',...
'Position',[.53 .315 .03 .045],...
'Callback',@dooutreqdown7);
uicontrol('Style','pushbutton',...
'String','Trn',...
'units','normalized',...
'Position',[.53 .36 .03 .045],...
'Callback',@dooutreqdown8);
uicontrol('Style','pushbutton',...
'String','Trn',...
'units','normalized',...
'Position',[.53 .405 .03 .045],...
'Callback',@dooutreqdown9);
uicontrol('Style','pushbutton',...
'String','Trn',...
'units','normalized',...
'Position',[.53 .45 .03 .045],...
'Callback',@dooutreqdown10);
uicontrol('Style','pushbutton',...
'String','Trn',...
'units','normalized',...
'Position',[.53 .495 .03 .045],...
'Callback',@dooutreqdown11);
uicontrol('Style','pushbutton',...
'String','Trn',...
'units','normalized',...
'Position',[.53 .54 .03 .045],...
'Callback',@dooutreqdown12);
uicontrol('Style','pushbutton',...
'String','Trn',...
'units','normalized',...
'Position',[.53 .585 .03 .045],...
'Callback',@dooutreqdown13);
uicontrol('Style','pushbutton',...
'String','Trn',...
'units','normalized',...
'Position',[.53 .63 .03 .045],...
'Callback',@dooutreqdown14);
uicontrol('Style','pushbutton',...
'String','Trn',...
'units','normalized',...
'Position',[.53 .675 .03 .045],...
'Callback',@dooutreqdown15);
uicontrol('Style','pushbutton',...
'String','Trn',...
'units','normalized',...
'Position',[.53 .72 .03 .045],...
'Callback',@dooutreqdown16);
uicontrol('Style','pushbutton',...
'String','Trn',...
'units','normalized',...
'Position',[.53 .765 .03 .045],...
'Callback',@dooutreqdown17);
uicontrol('Style','pushbutton',...
'String','Trn',...
'units','normalized',...
'Position',[.53 .81 .03 .045],...
'Callback',@dooutreqdown18);
uicontrol('Style','pushbutton',...
'String','Trn',...
'units','normalized',...
'Position',[.53 .855 .03 .045],...
'Callback',@dooutreqdown19);
uicontrol('Style','pushbutton',...
'String','Trn',...
'units','normalized',...
'Position',[.53 .9 .03 .045],...
'Callback',@dooutreqdown20);

% tambahan : zooming buttons


uicontrol('Style','pushbutton',...
'units','normalized',...
'String','Perbesar',...
'Position',[.83 .09 .07 .045],...
'Callback','if camva <= 1;return;else;camva(camva-1);end');

uicontrol('Style','pushbutton',...
'units','normalized',...
'String','Perkecil',...
'Position',[.91 .09 .07 .045],...
'Callback','if camva >= 179;return;else;camva(camva+1);end');

%% Button clicks

function doup (varargin)


lidx=str2double(get(e_outreq,'string'));
if(lidx<=4 && lidx>0)
Naik1(lidx);
end
% Showelev();
DrawAllBoxes();
end
function dodown (varargin)
lidx=str2double(get(e_outreq,'string'));
if(lidx<=4 && lidx>0)
Turun1(lidx);
end
% Showelev();
DrawAllBoxes();
end
function dooutrequp(varargin)
% get number of requesting floor and turn it from string to number
rf=str2double(get(e_outreq,'string'));
PNaik(rf);
if (lanjut == false)
dolanjutkan();
end
end
function dooutreqdown(varargin)
% get number of requesting floor and turn it from string to number
rf=str2double(get(e_outreq,'string'));
PTurun(rf);
if (lanjut == false)
dolanjutkan();
end
end
function doinreq (varargin)
lidx = str2double(get(e_inreq,'string'));
rdf = str2double(get(e_inreq1,'string'));
InReq(rdf,lidx);
if (lanjut == false)
dolanjutkan();
end
end
function dolanjutkan(varargin)
% iterasi perjalanan lift di sini
lanjut = true;
while (lanjut == true)
% penggunaan waktu di sini
pause(waktu);
JalankanLift();
DrawAllBoxes;

% menganggap sudah selesai, pause -> lanjut = false


lanjut = false;
% jika ada yang perlu dijalankan
for lidx=1:4
if (eantnaik(1,lidx) > 0 || eantturun(1,lidx) > 0 ||
etunggu(1,lidx) == 1 || estate(4,lidx) == 1)
lanjut = true;
end
end
end

end

%% System Drawing
% menggambarkan lift ke axes

ver= [0 0 0;
1 0 0;
1 1 0;
0 1 0;
0 0 1;
1 0 1;
1 1 1;
0 1 1];

face= [1 2 6 5;
2 3 7 6;
3 4 8 7;
4 1 5 8;
1 2 3 4;
5 6 7 8];

% create axes
axes('position',[.15 .1 .5 .8],'color',[1 1 1])
% variasi tampilan
% axis square % #1 normal view, keep aspect ratio
axis vis3d % #2 realistic view
grid on % hide/show grid
axis off % hide axis

% variables
sbox = ver;

function DrawAllBoxes()
cla;
for i=1:4
sbox = ver;
sbox(:,1) = sbox(:,1) + i -1;
for j=1:20
sbox(:,3) = sbox(:,3) + j -1;
if(elift(j,i) == 0)
% draw empty box (soft blue)
sbox =
patch('vertices',sbox,'faces',face,'edgecolor','w','facecolor',[.5 .2 1],...
'facevertexalphadata',0.15,'facealpha','flat');
elseif (elift(j,i) == 1)
% draw the lift
if (estate(4,i) == 0)
% pintu tertutup (blue)
sbox =
patch('vertices',sbox,'faces',face,'edgecolor','w','facecolor',[1 0 0],...
'facevertexalphadata',0.3,'facealpha','flat');
elseif(estate(4,i) == 1)
% pintu terbuka (red)
sbox =
patch('vertices',sbox,'faces',face,'edgecolor','w','facecolor',[0 1 0],...
'facevertexalphadata',0.3,'facealpha','flat');
end
end
sbox = ver;
sbox(:,1) = sbox(:,1) + i -1;
end
end
end

% initial draw
DrawAllBoxes();

% setting view
view(10,20);
camva(camva-2);

dolanjutkan();

end

Anda mungkin juga menyukai