Universitas Kristen Maranatha
PERANGKAT PENGHITUNG WAKTU KERJA
DAN PENENTUAN ANTRIAN
Disusun oleh :
Nama : Roki Fernando
NRP : 0422078
Jurusan Teknik Elektro, Fakultas Teknik, Universitas Kristen Maranatha,
Jl. Prof.Drg.Suria Sumantri, MPH no.65, Bandung, Indonesia,
email : roki_fernando@yahoo.com
ABSTRAK
Penghitungan waktu kerja akan dibutuhkan untuk perbaikan di masa yang
akan datang. Kebutuhan akan hal tersebut dapat digunakan pada bengkel-bengkel
sepeda motor.
Pada tugas akhir ini, telah dirancang dan direalisasikan perangkat untuk
mengatur sistem antrian dan penghitung waktu pengerjaan yang dilakukan
mekanik bengkel. Perangkat yang dibuat menggunakan sensor
infrared
GP2D12
yang dikendalikan oleh pengontrol mikro untuk mendeteksi jarak yang kemudian
dikonversi menjadi data waktu. Data waktu akan menjadi tolok ukur untuk
pengaturan antrian dan penghitungan waktu penyelesaian pengerjaan yang
dilakukan mekanik bengkel. Data dikirim ke komputer menggunakan komunikasi
serial RS-232 dengan tampilan berbentuk
form
dua dimensi yang dibuat
menggunakan Microsoft
Visual Basic
6.0.
Dari hasil percobaan menunjukkan proses pengiriman data waktu dari
pengontrol mikro ketampilan
Visual Basic
berhasil dan perangkat penghitung
waktu pengerjaan yg dilakukan oleh mekanik bengkel telah berhasil dibuat
dengan baik.
Universitas Kristen Maranatha
WORK TIME COUNTER DEVICE AND
QUEUING DETERMINATION
Composed By :
Nama : Roki Fernando
NRP : 0422078
Electrical Engineering, Faculty of Engineering, Maranatha Christian University
,
Jl. Prof.Drg.Suria Sumantri, MPH no.65, Bandung, Indonesia,
email: roki_fernando@yahoo.com
ABSTRACT
Time counter of work will be required for improvement in the future. The
need for it is can be used in motorcycle workshops.
In this final project, has been designed and realized a device to regulate the
queuing system and processing time by a mechanics. The device is made by using
an infrared GP2D12 censor which controlled by micro controller to detect the
distance and then converted into time data. The data will be a benchmarks for
setting queues and counting the time to completion of work on the mechanical
workshop. The data will be sent to a computer using RS-232 series
communication in two dimension form which is made with Microsoft Visual
Basic 6.0.
The results of the experiments, shows that transmission of the data from
micro controllers to the Visual Basic appearance managed and the time counter
device for mechanical workshop were successful made it well.
Universitas Kristen Maranatha
DAFTAR ISI
Halaman
ABSTRAK ...
i
ABSTRACT ...
ii
KATA PENGANTAR ...
iii
DAFTAR ISI ...
v
DAFTAR TABEL ...
viii
DAFTAR GAMBAR ...
ix
BAB I
PENDAHULUAN
I.1 Latar Belakang ...
1
I.2 Identifikasi Masalah ...
2
I.3 Perumusan Masalah ...
2
I.4 Tujuan ...
2
I.5 Pembatasan Masalah ...
2
I.6 Spesifikasi Alat ...
2
I.7 Sistematika Penulisan ...
3
BAB II LANDASAN TEORI
II.1 Antrian ...
4
II.1.1 Karakteristik Sistem Antrian ...
4
II.1.1.1 Pola Kedatangan ...
4
II.1.1.2 Antrian ...
5
II.1.1.3 Fasilitas Pelayanan ...
5
II.2 Sensor ...
8
II.2.1 Sensor
Infrared
...
8
II.3 Pengontrol Mikro ...
10
II.3.1 Pengontrol Mikro ATmega16 ...
10
II.3.1.1 Fitur ATmega16 ...
10
Universitas Kristen Maranatha
II.3.1.3 Diagram Blok ATmega16 ...
14
II.3.1.4
General Purpose Register
ATmega16 ...
15
II.3.1.5 Peta Memori ATmega16 ...
16
II.3.2. Pemrograman pada AVR ATmega 16 ...
18
II.4 Visual Basic ...
18
II.4.1 Pengaksesan dengan Menggunakan Kontrol MSComm
pada Visual Basic ...
22
II.5 Tata Cara Komunikasi Data Serial ...
22
II.5.1 Alasan Penggunaan Port Serial ...
23
II.5.2 Pengenalan Antarmuka RS-232 ...
23
BAB III PERANCANGAN DAN REALISASI
III.1 Perancangan Aplikasi Alat Penghitung Waktu ...
26
III.2 Perancangan dan Realisasi Aplikasi Alat Penghitung
Waktu Kerja ...
27
III.2.1 Perancangan dan Realisasi Rangkaian Sensor ...
28
III.3 Pengontrol Mikro ...
29
III.3.1 Skematik Pengontrol Berbasis Pengontrol Mikro ATmega16 ...
29
III.3.2 Antarmuka Komunikasi Serial RS-232 ...
32
III.4 Perangkat Lunak pada Pengontrol Mikro ...
32
III.5 Perancangan Antar Muka Pemakai (
User Interface
) ...
35
BAB IV DATA PENGAMATAN DAN ANALISA
IV.1 Pengujian Perangkat Lunak ...
38
IV.2 Pengujian Simulasi Sistem ...
41
BAB V KESIMPULAN DAN SARAN
V.1 Kesimpulan ...
46
V.2 Saran ...
46
Universitas Kristen Maranatha
LAMPIRAN A FOTO PERANGKAT ALAT
Universitas Kristen Maranatha
DAFTAR TABEL
Halaman
Tabel 2.1 Fungsi Khusus Port B ...
13
Tabel 2.2 Fungsi Khusus Port C ...
13
Tabel 2.3 Fungsi Khusus Port D ...
14
Tabel 2.4 Konfigurasi Pin dan Nama Sinyal Konektor Serial ...
24
Universitas Kristen Maranatha
DAFTAR GAMBAR
Halaman
Gambar 2.1 Single Channel, Single Server ...
6
Gambar 2.2 Single Channel, Multi Server ...
6
Gambar 2.3 Multi Channel, Single Server ...
7
Gambar 2.4 Multi Channel, Multi Server ...
7
Gambar 2.5 Bentuk Sensor
Infrared
...
9
Gambar 2.6 Pengaruh Jarak Terhadap Besarnya Sudut ...
9
Gambar 2.7 Konfigurasi Pin ATmega16 ...
12
Gambar 2.8 Diagram Blok ATmega16 ...
15
Gambar 2.9
General Purpose Register
ATmega16 ...
16
Gambar 2.10 Peta Memori Program ATmega16 ...
17
Gambar 2.11 Peta Memori Data ATmega16...
17
Gambar 2.12 Tampilan Microsoft Visual Basic 6.0 ...
19
Gambar 2.13 Konektor Serial DB-9
Male
pada Bagian Belakang CPU ....
23
Gambar 2.14 Konektor Serial DB-9
Female
pada Bagian Belakang
CPU ...
24
Gambar 3.1 Diagram Blok Sistem Antrian ...
26
Gambar 3.2 Dimensi Perangkat Tampak Atas ...
27
Gambar 3.3 Dimensi Perangkat Tampak Depan ...
28
Gambar 3.4 Alokasi Pin Sensor
Infrared
...
29
Gambar 3.5 Skematik Pengontrol Berbasis Mikro ATmega16 ...
31
Gambar 3.6 Skematik Antarmuka RS-232...
32
Gambar 3.7 Diagram Alir Perangkat Lunak pada Pengontrol Mikro ...
33
Gambar 3.8 Diagram Alir
Subroutine
Sensor
Infrared
GP2d12...
34
Gambar 3.9 Diagram Alir
Subroutine
Waktu ...
34
Gambar 3.10 Tampilan Awal
Form
pada MS-Visual Basic ...
35
Gambar 3.11 Tampilan
Form
Data Pekejaan pada MS-Visual Basic ...
36
Gambar 3.12 Tampilan
Form
Data Pendaftaran pada MS-Visual Basic ..
36
Universitas Kristen Maranatha
Gambar 4.1 Tampilan Form Menu Utama ...
38
Gambar 4.2 Input Data Pekerjaan A ...
39
Gambar 4.3 Input Data Pekerjaan B ...
39
Gambar 4.4 Tampilan Form Pendaftaran A ...
40
Gambar 4.5 Tampilan Form Pendaftaran B ...
40
Gambar 4.6 Tampilan Form Antrian ...
41
Gambar 4.7 Tampilan Ketika Sepeda Motor Antrian
Terakhir yaitu Antrian Kelima Keluar dari Pit A...
42
Gambar 4.8 Tampilan Segala Aktivitas
Service
...
42
Gambar 4.9 Tampilan Ketika Sepeda Motor Antrian
Terakhir yaitu Antrian Kelima Keluar dari Pit A...
43
Gambar 4.10 Tampilan Segala Aktivitas
Service
...
44
Gambar 4.11 Tampilan Ketika Sepeda Motor Antrian
Terakhir yaitu Antrian Kelima Keluar dari Pit A...
45
LAMPIRAN A
A-1
A-2
A-3
LAMPIRAN B
PROGRAM PADA PENGONTROL MIKRO
B-1
Program Utama
/*****************************************************
This program was produced by the
CodeWizardAVR V1.25.3 Standard
Automatic Program Generator
© Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 23/01/2011
Author : F4CG
Company : F4CG
Comments:
Chip type : ATmega16
Program type : Application
Clock frequency : 11,095200 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
*****************************************************/
#include <mega16.h>
#include <stdio.h>
#include <delay.h>
#include <math.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>
#define ADC_VREF_TYPE 0x60
// Read the 8 most significant bits
// of the AD conversion result
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
B-2
ADCSRA|=0x40;// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}
// Declare your global variables here
char text[16];
char text1[16];
char text2[16];
char text4[16];
unsigned int dl,sl,dr,sr,t1,t2;
/*
void sensor(void)
{
// sensor 1
sr=read_adc(1);
if(sr<30)
sr=20;
dr=2141.72055*(pow(sr,-1.078867));
if(dr<30)
t1++;
lcd_clear();
sprintf(text,"j1=%3dcm/%7dj2=%3dcm/%7d",dr,t1,dl,t2);
lcd_puts(text);
delay_ms(50);
// sensor 2
sl=read_adc(2);
if(sl<30)
sl=20;
dl=2141.72055*(pow(sl,-1.078867));
if(dl<30)
//t1++;
lcd_clear();
//sprintf(text,"j1=%3dcm/%7dj2=%3dcm/%7d",dr,t1,dl,t2);
B-3
delay_ms(50);}
*/
void sensor_infrared(void)
{
sr=read_adc(1);
if(sr<30)
sr=20;
dr=2141.72055*(pow(sr,-1.078867));
sprintf(text,"In1=%3u",dr);
sl=read_adc(2);
if(sl<30)
sl=20;
dl=2141.72055*(pow(sl,-1.078867));
sprintf(text1,"In2=%3u",dl);
lcd_clear();
lcd_gotoxy(0,0);
lcd_puts(text);
lcd_gotoxy(9,0);
lcd_puts(text1);
delay_ms(50);
}
void timer_1(void)
{
t1++;
lcd_clear();
sprintf(text2,"t1=%4d",t1);
lcd_gotoxy(0,1);
lcd_puts(text2);
B-4
}void timer_2(void)
{
t2++;
lcd_clear();
sprintf(text4,"t2=%4d",t2);
lcd_gotoxy(0,1);
lcd_puts(text4);
delay_ms(50);
}
void timer_bareng(void)
{
t1++;
lcd_clear();
sprintf(text4,"t2=%4d",t1);
lcd_gotoxy(0,1);
lcd_puts(text4);
t2++;
sprintf(text4,"t2=%4d",t2);
lcd_gotoxy(0,1);
lcd_puts(text2);
delay_ms(50);
}
void reset(void)
{
t1=1;
lcd_clear();
lcd_gotoxy(0,1);
lcd_puts(text2);
t2=1;
B-5
lcd_puts(text4);delay_ms(50);
}
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0xff;
DDRD=0xff;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
B-6
// Clock source: System Clock// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
B-7
ACSR=0x80;SFIOR=0x00;
// ADC initialization
// ADC Clock frequency: 693,450 kHz
// ADC Voltage Reference: AREF pin
// ADC Auto Trigger Source: None
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x84;
// LCD module initialization
lcd_init(16);
lcd_putsf("INFRARED");
delay_ms(2000);
while (1)
{
// Place your code here
// sr=read_adc(1);
// if(sr<30)
// sr=20;
// dr=2141.72055*(pow(sr,-1.078867));
// sprintf(text,"Infrared1=%3u",dr);
//
// // // ukur timer ---//
// //
// // if (c>=300)
// // {
// // t1++;
// // lcd_clear();
// // sprintf(text,"j1=%3dcm/%7dj2=%3dcm/%7d",a/10,t1,x/10,t2);
// // sprintf(komp,"$%3d/%7d!%3d/%7d",a/10,t1,x/10,t2);
// //
// // lcd_puts(text);
// // puts(komp); //tampilkan pesan dan ganti baris
// // putchar('');
// //
// // delay_us(20);
//
// // ---//
B-8
//// sl=read_adc(2);
// if(sl<30)
// sl=20;
// dl=2141.72055*(pow(sl,-1.078867));
// sprintf(text1,"Infrared2=%3u",dl);
//
// lcd_clear();
// lcd_gotoxy(0,0);
// lcd_puts(text);
// lcd_gotoxy(0,1);
// lcd_puts(text1);
//
// delay_ms(40);
sensor_infrared();
if(dl <= 30 && dr <= 30)
{ PORTD.0=1; PORTD.2=1; PORTD.4=1; PORTD.6=1; PORTD.1=1; PORTD.3=1; PORTD.5=1; PORTD.7=1; timer_bareng(); }
else if(dr <= 30)
{ PORTD.1=0; PORTD.3=0; PORTD.5=0; PORTD.7=0; PORTD.0=1; PORTD.2=1; PORTD.4=1; PORTD.6=1; timer_1(); //delay_ms(100); }
B-9
{PORTD.0=0;
PORTD.2=0;
PORTD.4=0;
PORTD.6=0;
PORTD.1=1;
PORTD.3=1;
PORTD.5=1;
PORTD.7=1;
timer_2();
//delay_ms(100);
}
else
reset();
};
LAMPIRAN C
PROGRAM PADA MICROSOFT
C-1
Program Antrian
Dim onLock1 As Boolean, onLock2 As Boolean, oSW1 As Integer, oSW2 As Integer
Dim Init1 As Boolean, Init2 As Boolean, BufT2 As String, BufT1 As String
Dim tmpID1 As String, tmpID2 As String
Private Sub Command1_Click()
Dim ts As String
If Command1.Caption = "Run" Then
Timer1.Enabled = True
Command1.Caption = "Stop"
ElseIf Command1.Caption = "Stop" Then
Timer1.Enabled = False
Command1.Caption = "Run"
End If
onLock1 = False
onLock2 = False
oSW1 = 0
oSW2 = 0
End Sub
Sub LoadAntrian(krit As String)
With DE.Commands("QSelect")
.CommandText = "SELECT * FROM t_service " & IIf(krit = "", "", krit)
Set RSTp = .Execute
If Not RSTp.BOF Then RSTp.MoveFirst
LsAntre.Clear
LVID.Clear
Do Until RSTp.EOF
LVID.AddItem RSTp.Fields(0)
LsAntre.AddItem RSTp.Fields(5)
RSTp.MoveNext
Loop
' JR = CDbl(RSTp.RecordCount)
' fr.SB.Panels(1).Text = CStr(RSTp.RecordCount) & " Record(s)"
End With
End Sub
C-2
Dim LL As ListBox, LR As ListBox, rsLOC As New ADODB.Recordset, LB As Label
Dim Lind As ListBox
Dim TotTime As Integer
If pit = "A" Then
Set LL = JD1
Set LR = AVT1
Set LB = TAT1
Set Lind = ListA1
ElseIf pit = "B" Then
Set LL = JD2
Set LR = AVT2
Set LB = TAT2
Set Lind = ListB1
End If
With DE.Commands("QSelect")
.CommandText = "SELECT * FROM t_detservice WHERE idsvc = '" & kyt & "'"
Set rsLOC = .Execute
If Not rsLOC.BOF Then rsLOC.MoveFirst
LL.Clear
LR.Clear
TotTime = 0
Do Until rsLOC.EOF
LL.AddItem rsLOC.Fields(2)
LR.AddItem rsLOC.Fields(3)
TotTime = TotTime + rsLOC.Fields(3)
rsLOC.MoveNext
Loop
LB.Caption = TotTime
Lind.AddItem TotTime
' JR = CDbl(RSTp.RecordCount)
' fr.SB.Panels(1).Text = CStr(RSTp.RecordCount) & " Record(s)"
End With
End Sub
Sub RecordData(pit As String)
Dim LTL As ListBox, LTR As ListBox, rsLOC As New ADODB.Recordset, LBT As Label
Dim LBS As ListBox
C-3
If pit = "A" ThenSet LTL = ListA2
Set LTR = ListA3
Set LBT = TAT1
Set LBS = ListA1
ElseIf pit = "B" Then
Set LTL = ListB2
Set LTR = ListB3
Set LBT = TAT2
Set LBS = ListB1
End If
If LBS.ListCount = 0 Then Exit Sub
If pit = "A" Then
LTL.AddItem BufT1
' Eft = (CDbl(BufT1) / CDbl(LBT.Caption)) * 100
Eft = CDbl(LBT.Caption) - CDbl(BufT1)
ElseIf pit = "B" Then
LTL.AddItem BufT2
' Eft = (CDbl(BufT2) / CDbl(LBT.Caption)) * 100
Eft = CDbl(LBT.Caption) - CDbl(BufT2)
End If
LTR.AddItem Round(Eft, 3)
'--- Save ke Database ---
Call UpdateTable("t_service", "jamservice = '" & Format(Time, "hh:mm:ss") & _
"', pit = '" & pit & "', tavt = " & LBS.List(0) & ", totaltime = " & _
IIf(pit = "A", CStr(CInt(BufT1)), CStr(CInt(BufT2))) & ", selisih = " & _
Replace(Round(Eft, 3), ",", ".", , , vbTextCompare) & _
" WHERE idsvc = '" & IIf(pit = "A", tmpID1, tmpID2) & "'")
End Sub
Private Sub Command2_Click()
Call LoadAntrian("WHERE pit = ''")
If LsAntre.ListCount > 0 Then Command1.Enabled = True
C-4
"Pastikan Device dalam Posisi ON sebelum klik RUN"End Sub
Private Sub Form_Load()
Dim j As Integer
MSComm1.CommPort = 1
MSComm1.Settings = "9600,N,8,1"
MSComm1.InputLen = 0
MSComm1.PortOpen = True
onLock1 = False
onLock2 = False
Init1 = True
Init2 = True
Call LoadAntrian(" WHERE pit is null")
End Sub
Private Sub Form_Unload(Cancel As Integer)
MSComm1.PortOpen = False
End Sub
Private Sub TBuf1_Timer()
End Sub
Private Sub TBuf2_Timer()
End Sub
Private Sub TBuf_Timer()
BufT2 = T2.Text
BufT1 = T1.Text
End Sub
Private Sub Timer1_Timer()
Dim sf1 As String, sf2 As String, sf3 As String, sf4 As String, sf5 As String, sf6 As String, v As Integer
Dim ambil As String, pck As String
C-5
On Error GoTo ConError
status.Caption = "ON-LINE"
hasil = MSComm1.Input
If hasil = "" Then GoTo ConError
sf1 = Replace(hasil, Chr(10), "", , , vbTextCompare)
sf2 = Replace(sf1, Space(1), "0", , , vbTextCompare)
For t = 1 To Len(hasil)
If Mid(sf2, t, 1) <> "" Then
If Asc(Mid(sf2, t, 1)) > 47 And Asc(Mid(sf2, t, 1)) < 58 Then
pck = pck & Mid(Trim(sf2), t, 1)
End If
If Asc(Mid(sf2, t, 1)) = 47 Then
pck = pck & Mid(Trim(sf2), t, 1)
End If
If Asc(Mid(sf2, t, 1)) = 33 Then
pck = pck & Mid(Trim(sf2), t, 1)
End If
If Asc(Mid(sf2, t, 1)) = 36 Then
pck = pck & Mid(Trim(sf2), t, 1)
End If
End If
Next t
If Len(Trim(pck)) >= 24 Then
ambil = Left(Trim(pck), 32)
End If
List1.AddItem ambil
Text1.Text = ambil
part = Split(ambil, "$")
C-6
If LBound(pecah) = 0 ThenSen1 = Split(pecah(0), "/")
J1.Text = Sen1(0)
T1.Text = Sen1(1)
End If
If UBound(pecah) = 1 Then
If Len(pecah(1)) = 11 Then
Sen2 = Split(pecah(1), "/")
J2.Text = Sen2(0)
T2.Text = Sen2(1)
End If
End If
If J1.Text = "" Or J2.Text = "" Then Exit Sub
If Init1 = True And CInt(J1.Text) <> 0 Then
NOA1.Caption = LsAntre.List(0)
ListA.AddItem LsAntre.List(0)
tmpID1 = LVID.List(0)
Call FillDetails("A", LVID.List(0))
LsAntre.RemoveItem 0
LVID.RemoveItem 0
Init1 = False
End If
If Init2 = True And CInt(J2.Text) <> 0 Then
NOA2.Caption = LsAntre.List(0)
ListB.AddItem LsAntre.List(0)
tmpID2 = LVID.List(0)
Call FillDetails("B", LVID.List(0))
LsAntre.RemoveItem 0
LVID.RemoveItem 0
Init2 = False
C-7
If CInt(J1.Text) < 30 And CInt(T1.Text) <> 0 And ListA.ListCount <> ListA2.ListCount Then
LS1.ForeColor = vbRed
LS1.Caption = "IN"
Timer3.Enabled = True
ElseIf CInt(J1.Text) > 30 And CInt(T1.Text) = 0 Then
LS1.ForeColor = vbGreen
LS1.Caption = "OUT"
End If
If CInt(J2.Text) < 30 And CInt(T2.Text) <> 0 And ListB.ListCount <> ListB2.ListCount Then
LS2.ForeColor = vbRed
LS2.Caption = "IN"
Timer2.Enabled = True
ElseIf CInt(J2.Text) > 30 And CInt(T2.Text) = 0 Then
LS2.ForeColor = vbGreen
LS2.Caption = "OUT"
End If
If onLock1 = True And LS2.Caption = "OUT" Then
If CInt(T2.Text) = 0 And oSW1 = 0 Then
Call RecordData("B")
If LsAntre.ListCount <> 0 Then
NOA2.Caption = LsAntre.List(0)
ListB.AddItem LsAntre.List(0)
tmpID2 = LVID.List(0)
Call FillDetails("B", LVID.List(0))
LsAntre.RemoveItem 0
LVID.RemoveItem 0
Else
If ListA.ListCount = ListA2.ListCount Then
JD2.Clear
AVT2.Clear
TAT2.Caption = ""
NOA2.Caption = ""
LS2.Caption = ""
Label5.Caption = ""
Timer1.Enabled = False
End If
End If
C-8
oSW1 = 1onLock1 = False
End If
Else
oSW1 = 0
End If
If onLock2 = True And LS1.Caption = "OUT" Then
If CInt(T1.Text) = 0 And oSW2 = 0 Then
Call RecordData("A")
If LsAntre.ListCount <> 0 Then
NOA1.Caption = LsAntre.List(0)
ListA.AddItem LsAntre.List(0)
tmpID1 = LVID.List(0)
Call FillDetails("A", LVID.List(0))
LsAntre.RemoveItem 0
LVID.RemoveItem 0
Else
If ListB.ListCount = ListB2.ListCount Then
JD1.Clear
AVT1.Clear
TAT1.Caption = ""
NOA1.Caption = ""
LS1.Caption = ""
Label6.Caption = ""
Timer1.Enabled = False
End If
End If
Label6.Caption = ""
oSW2 = 1
onLock2 = False
End If
Else
oSW2 = 0
End If
Exit Sub
ConError:
C-9
status.Caption = "OFF-LINE - No Data Received"Else
status.Caption = "OFF-LINE" & " " & Err.Description
End If
J1.Text = "000"
T1.Text = "0000000"
J2.Text = "000"
T2.Text = "0000000"
LS1.Caption = ""
LS2.Caption = ""
Label5.Caption = ""
Label6.Caption = ""
End Sub
Private Sub Timer2_Timer()
If CInt(T2.Text) > 50 And ListB.ListCount <> ListB2.ListCount Then
onLock1 = True
Label5.Caption = "WORKING"
Timer2.Enabled = False
End If
End Sub
Private Sub Timer3_Timer()
If CInt(T1.Text) > 50 And ListA.ListCount <> ListA2.ListCount Then
onLock2 = True
Label6.Caption = "WORKING"
Timer3.Enabled = False
End If
C-10
Program Pendaftaran
Dim Mode As Integer, TotBeli As Double, onKlik As Boolean, RPO As Integer
Dim tmKDB As String, tmKDS As String, onsdet As Boolean
Function CekBasket(kn As String) As Boolean
Dim i As Integer
CekBasket = True
For i = 1 To GRB.Rows - 1
If GRB.TextMatrix(i, 0) = kn Then
CekBasket = False
Exit For
End If
Next i
End Function
Sub DisplayDetail(ky As String)
pnDet.Visible = False
With DE.Commands("QSelect")
.CommandText = "select a.idsvc, b.nojob, b.jobname, b.averagetime from " & _
"t_detservice a inner join t_jobS b on a.nojob=b.nojob where a.idsvc = '" & ky & "'"
Set rsdt = .Execute
Set GRDT.DataSource = rsdt
GRDT.Columns(0).Width = 1200
GRDT.Columns(2).Width = 900
GRDT.Columns(3).Width = 1000
End With
pnDet.Visible = True
End Sub
Private Sub B1_Click()
Mode = 1
I1.Text = NewKeys("t_service", "idsvc", "S")
Call KunciTeks(0, True)
Call AturTombol(FDaftar, "00110")
I9.Text = AutoUrut("t_service")
End Sub
C-11
Dim rsLOC As New ADODB.RecordsetWith DE.Commands("QSelect")
.CommandText = "SELECT stokakhir from t_barang WHERE id_barang = '" & ky & "'"
Set rsLOC = .Execute
If rsLOC.RecordCount = 0 Then
GetStok = 0
Else
GetStok = rsLOC.Fields(0)
End If
Set rsLOC = Nothing
End With
End Function
Private Sub B10_Click()
Dim subttl As Double
With GRB
.TextMatrix(RPO, 0) = tmKDB
.TextMatrix(RPO, 1) = I3.Text
.TextMatrix(RPO, 2) = I6.Text
Call SumGrid
TBELI.Caption = Format(TotBeli, "###,###,###")
Call Bersih(1)
B10.Enabled = False
B7.Enabled = False
B2.Enabled = False
B8.Enabled = False
Mode = 1
I3.SetFocus
End With
End Sub
Private Sub B2_Click()
Dim y As Integer
Mode = 2
tmKDB = GRB.TextMatrix(GRB.Row, 0)
For y = 0 To I3.ListCount - 1
If GRB.TextMatrix(GRB.Row, 1) = I3.List(y) Then
C-12
Exit ForEnd If
Next y
I5.Text = GRB.TextMatrix(GRB.Row, 0)
I6.Text = GRB.TextMatrix(GRB.Row, 2)
' I6.Text = GRB.TextMatrix(GRB.Row, 4)
B8.Enabled = False
B10.Enabled = True
B2.Enabled = False
B7.Enabled = False
End Sub
'Function CekKodeNIP() As Boolean
'Dim rsLOC As New ADODB.Recordset
'With DE.Commands("QSelect")
' .CommandText = "SELECT nip from pembelian WHERE nip = '" & _
' I1.Text & "'"
' Set rsLOC = .Execute
' If rsLOC.RecordCount = 0 Then
' CekKodeNIP = True
' Else
' CekKodeNIP = False
' End If
'End With
'End Function
Private Sub B3_Click()
Dim j As Integer, cStok As Double
If GRB.Rows = 1 Then
MsgBox "Keranjang masih kosong", vbExclamation, "Validasi"
Exit Sub
End If
If I8.Text = "" Or I9.Text = "" Then
MsgBox "Masih ada yang kosong", vbExclamation, "Validasi"
Exit Sub
End If
'If Mode = 1 Then
' If CekKodeNIP = False Then
C-13
' Exit Sub' End If
'End If
If Mode = 1 Then
Call InsertTable("t_service", "idsvc, tglservice, jamservice, nostnk, pit, noantri," & _
"tavt, totaltime, efisiensi", "'" & _
I1.Text & "','" & Format(Date, "dd/mm/yyyy") & "','','" & I8.Text & "',''," & I9.Text & _
",0,0,0")
For j = 1 To GRB.Rows - 1
Call InsertTable("t_detservice", "idsvc, nojob, jobname, averagetime", "'" & _
I1.Text & "','" & GRB.TextMatrix(j, 0) & "','" & GRB.TextMatrix(j, 1) & "'," & _
GRB.TextMatrix(j, 2))
Next j
End If
Mode = 0
TotBeli = 0
' Call PreviewNota(I1.Text)
Call DisplayData(FDaftar, "t_service", "")
Set GRD.DataSource = RSTp
Call Bersih(0)
Call KunciTeks(0, False)
Call KunciTeks(1, False)
Call AturTombol(FDaftar, IIf(JR = 0, "10000", "10001"))
End Sub
Private Sub B4_Click()
Mode = 0
Call Bersih(0)
Call KunciTeks(0, False)
Call KunciTeks(1, False)
Call AturTombol(FDaftar, IIf(JR = 0, "10000", "10001"))
C-14
Private Sub B5_Click()If MsgBox("Hapus PO dengan Nomor PO " & RSTp.Fields(0) & "?", _
vbQuestion + vbYesNo, "Hapus") = vbNo Then Exit Sub
With DE.Commands("QInsert")
.CommandText = "DELETE FROM po WHERE no_po='" & RSTp.Fields(0) & "'"
.Execute
.CommandText = "DELETE FROM po_detail WHERE no_po='" & RSTp.Fields(0) & "'"
.Execute
End With
Mode = 0
Call DisplayData(FDaftar, "po", "")
Set GRD.DataSource = RSTp
Call AturTombol(FDaftar, IIf(JR = 0, "10000", "10001"))
End Sub
Private Sub Command5_Click()
Unload Me
End Sub
Private Sub B6_Click()
Unload Me
End Sub
Private Sub B7_Click()
Dim pgl() As String, subttl As Double, cStok As Double
If CekBasket(tmKDB) = False Then
MsgBox "Pekerjaan sudah ditambahkan", vbExclamation, "Validasi"
Exit Sub
End If
With GRB
pgl = Split(LV2.List(I3.ListIndex), "#")
.AddItem pgl(0) & vbTab & I3.Text & vbTab & I6.Text
End With
C-15
TBELI.Caption = Format(TotBeli, "###,###,###")Call KunciTeks(0, False)
Call Bersih(1)
I3.SetFocus
End Sub
Sub SumGrid()
Dim e As Integer
TotBeli = 0
For e = 1 To GRB.Rows - 1
TotBeli = TotBeli + CDbl(GRB.TextMatrix(e, 2))
Next e
End Sub
Private Sub B8_Click()
If GRB.Rows <> 1 Then
TotBeli = TotBeli - GRB.TextMatrix(GRB.Rows - 1, 2)
GRB.Rows = GRB.Rows - 1
Call SumGrid
TBELI.Caption = Format(TotBeli, "###,###,###")
B8.Enabled = False
Mode = 1
B2.Enabled = False
If GRB.Rows = 1 Then
B10.Enabled = False
End If
End If
End Sub
Private Sub bBersih_Click()
If MsgBox("Hapus Semua Transaksi ?", _
vbQuestion + vbYesNo, "Hapus") = vbNo Then Exit Sub
With DE.Commands("QInsert")
.CommandText = "DELETE FROM t_service"
.Execute
.CommandText = "DELETE FROM t_detservice"
C-16
End WithMode = 0
Call DisplayData(FDaftar, "t_service", "")
Set GRD.DataSource = RSTp
pnDet.Visible = False
Call AturTombol(FDaftar, IIf(JR = 0, "10000", "10001"))
End Sub
Private Sub bHapus_Click()
If MsgBox("Hapus Transaksi dengan Nomor : " & RSTp.Fields(0) & "?", _
vbQuestion + vbYesNo, "Hapus") = vbNo Then Exit Sub
With DE.Commands("QInsert")
.CommandText = "DELETE FROM t_service WHERE idsvc='" & RSTp.Fields(0) & "'"
.Execute
.CommandText = "DELETE FROM t_detservice WHERE idsvc='" & RSTp.Fields(0) & "'"
.Execute
End With
Mode = 0
Call DisplayData(FDaftar, "t_service", "")
Set GRD.DataSource = RSTp
pnDet.Visible = False
Call AturTombol(FDaftar, IIf(JR = 0, "10000", "10001"))
End Sub
Private Sub Command6_Click()
If Cari.ListIndex < 0 Then Exit Sub
With RSTp
If Not .BOF Then .MoveFirst
.Find Cari.Text & "='" & Tcr.Text & "'", , adSearchForward, 0
If .EOF Then
MsgBox "Data Tidak Ditemukan", vbExclamation, "Cari"
Exit Sub
End If
Tcr.Text = ""
C-17
End WithEnd Sub
Private Sub Form_Activate()
Mode = 0
onKlik = False
onsdet = False
tgl.Caption = Format(Date, "dd mmmm yyyy")
Call SetupGrid
Call RaiseData(1)
Call DisplayData(FDaftar, "t_service", " ORDER BY idsvc")
Set GRD.DataSource = RSTp
GRD.Columns(0).Width = 600
GRD.Columns(1).Width = 1000
GRD.Columns(2).Width = 900
GRD.Columns(3).Width = 1000
GRD.Columns(4).Width = 600
GRD.Columns(5).Width = 800
GRD.Columns(6).Width = 800
GRD.Columns(7).Width = 800
GRD.Columns(8).Width = 800
GRD.Columns(3).NumberFormat = "Rp###,###,###"
B7.Enabled = False
If onCash = 1 Then
Label20.Enabled = False
I15.Enabled = False
End If
Call AturTombol(FDaftar, IIf(JR = 0, "10000", "10001"))
End Sub
Sub IsiEdit()
With RSTp
I1.Text = .Fields(0)
I2.Text = .Fields(1)
I3.Text = .Fields(2)
I2.SetFocus
End With
C-18
Sub Bersih(md As Integer)If md = 0 Then
I1.Text = ""
I3.ListIndex = -1
I5.Text = ""
I6.Text = "0"
I8.Text = ""
I9.Text = ""
pnBarang.Visible = False
TotBeli = 0
TBELI.Caption = "0"
GRB.Rows = 1
ElseIf md = 1 Then
I3.ListIndex = -1
I5.Text = ""
I6.Text = "0"
End If
End Sub
Sub KunciTeks(md As Integer, ak As Boolean)
If md = 0 Then
I8.Enabled = ak
If ak = True Then I8.SetFocus
Else
I3.Enabled = ak
I5.Enabled = ak
End If
End Sub
Private Sub Form_Load()
Dim j As Integer
Call KunciTeks(0, False)
Call KunciTeks(1, False)
End Sub
Sub RaiseData(ix As Integer, Optional krit As String)
Dim tbl As String, rsLOC As New ADODB.Recordset, sqle As String
C-19
Select Case ixCase 1
tbl = "t_barang"
Set cmb = I3
Set Ls = LV2
sqle = "SELECT * FROM t_jobs ORDER BY nojob"
Case 2
tbl = "t_pelanggan"
Set cmb = I7
Set Ls = Lv3
sqle = "SELECT * FROM t_pelanggan order by id_pelanggan"
End Select
With DE.Commands("QSelect")
.CommandText = sqle
Set rsLOC = .Execute
If rsLOC.RecordCount = 0 Then Exit Sub
cmb.Clear
JKel = CStr(rsLOC.RecordCount)
Ls.Clear
Do Until rsLOC.EOF
If ix = 1 Then
cmb.AddItem rsLOC.Fields(1)
Ls.AddItem rsLOC.Fields(0) & "#" & rsLOC.Fields(2)
Else
cmb.AddItem rsLOC.Fields(1)
Ls.AddItem rsLOC.Fields(0) & "#" & rsLOC.Fields(2) & "#" & rsLOC.Fields(3)
End If
rsLOC.MoveNext
Loop
End With
End Sub
Sub SetupGrid()
On Error Resume Next
With GRB
.FixedCols = 0
.FixedRows = 1
.Cols = 3
.Rows = 1
C-20
.TextMatrix(0, 0) = "No Job".TextMatrix(0, 1) = "Nama Pekerjaan"
.TextMatrix(0, 2) = "Average" & vbCrLf & "Time(ms)"
.ColWidth(1) = 2700
.ColWidth(2) = 1400
End With
End Sub
Private Sub GRB_Click()
onKlik = True
End Sub
Private Sub GRB_RowColChange()
If onKlik = False Then Exit Sub
RPO = GRB.Row
B2.Enabled = True
B7.Enabled = False
B8.Enabled = True
End Sub
Private Sub GRD_Click()
onsdet = True
End Sub
Private Sub GRD_RowColChange(LastRow As Variant, ByVal LastCol As Integer)
If RSTp.RecordCount = 0 Then Exit Sub
If onsdet = True Then
bHapus.Enabled = True
Call DisplayDetail(RSTp.Fields(0))
End If
End Sub
Private Sub I11_Change()
If I11.Text = "" Then I11.Text = "0"
If TotBeli = 0 Then Exit Sub
Dim tem As Double
tem = TotBeli - CDbl(I11.Text)
C-21
NETTO.Caption = CStr(tem + CDbl(PPN.Caption))End Sub
Function CekisPO(kp As String) As Boolean
Dim rsLOC As New ADODB.Recordset
With DE.Commands("QSelect")
.CommandText = "SELECT no_ro from po WHERE no_ro = '" & kp & "'"
Set rsLOC = .Execute
If rsLOC.RecordCount = 0 Then
CekisPO = True
Else
CekisPO = False
End If
End With
End Function
Private Sub I2_Click()
If I2.ListIndex < 0 Then Exit Sub
Dim ptg() As String
ptg = Split(Lv1.List(I2.ListIndex), "#")
tmKDS = ptg(0)
If CekisPO(tmKDS) = False Then
MsgBox "Request Order telah terdaftar pada Purchase Order", vbExclamation, "Validasi"
Exit Sub
End If
I7.Text = ptg(1)
I8.Text = ptg(2)
I9.Text = ptg(3)
I10.Text = ptg(4)
pnBarang.Visible = True
Call RaiseData(1, ptg(0))
End Sub
Private Sub I3_Click()
If I3.ListIndex < 0 Then Exit Sub
C-22
ptg = Split(LV2.List(I3.ListIndex), "#")tmKDB = ptg(0)
I5.Text = ptg(0)
I6.Text = ptg(1)
If Mode = 1 Then B7.SetFocus
End Sub
Private Sub I5_Change()
If Mode = 2 Then Exit Sub
If I5.Text = "" Or I6.Text = "" Then
B7.Enabled = False
Else
B7.Enabled = True
End If
End Sub
Private Sub I6_Change()
If Mode = 2 Then Exit Sub
If I5.Text = "" Or I6.Text = "" Then
B7.Enabled = False
Else
B7.Enabled = True
End If
End Sub
Private Sub I7_Click()
If I7.ListIndex < 0 Then Exit Sub
Dim ptg() As String
ptg = Split(Lv3.List(I7.ListIndex), "#")
tmKDS = ptg(0)
I8.Text = ptg(2)
I9.Text = ptg(1)
pnBarang.Visible = True
C-23
I3.SetFocusEnd Sub
Private Sub I8_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 13 Then
pnBarang.Visible = True
Call KunciTeks(1, True)
I3.SetFocus
End If
End Sub
Private Sub Tcr_Change()
pnDet.Visible = False
onsdet = False
C-24
Program Data Pekerjaan
Dim Mode As Integer
Private Sub B1_Click()
Mode = 1
I1.Text = NewKeys("t_jobs", "nojob", "J")
Call KunciTeks(True)
Call AturTombol(FJob, "00110")
End Sub
Private Sub B2_Click()
Mode = 2
Call KunciTeks(True)
Call AturTombol(FJob, "00110")
Call IsiEdit
End Sub
Function CekKunci() As Boolean
Dim rsLOC As New ADODB.Recordset
With DE.Commands("QSelect")
.CommandText = "SELECT nojob from t_jobs WHERE nojob = '" & _
I1.Text & "'"
Set rsLOC = .Execute
If rsLOC.RecordCount = 0 Then
CekKunci = True
Else
CekKunci = False
End If
End With
End Function
Function CekNama() As Boolean
Dim rsLOC As New ADODB.Recordset
With DE.Commands("QSelect")
.CommandText = "SELECT Jobname from t_jobs WHERE jobname = '" & _
I2.Text & "'"
Set rsLOC = .Execute
If rsLOC.RecordCount = 0 Then
CekNama = True
C-25
CekNama = FalseEnd If
End With
End Function
Private Sub B3_Click()
If I1.Text = "" Or I2.Text = "" Or I3.Text = "" Then
MsgBox "Masih ada yang belum terisi", vbExclamation, "Validasi"
Exit Sub
End If
If Not IsNumeric(I3.Text) Then
MsgBox "Waktu Rata2 Pekerjaan harus dengan Angka", vbExclamation, "Validasi"
Exit Sub
End If
If Mode = 1 Then
If CekKunci = False Then
MsgBox "No Pekerjaan sudah terdaftar", vbExclamation, "Error"
Exit Sub
End If
If CekNama = False Then
MsgBox "Nama Pekerjaan sudah terdaftar", vbExclamation, "Error"
Exit Sub
End If
End If
If Mode = 1 Then
Call InsertTable("t_jobs", "nojob, jobname, " & _
"averagetime", "'" & I1.Text & "','" & I2.Text & _
"','" & I3.Text & "'")
ElseIf Mode = 2 Then
Call UpdateTable("t_jobs", "jobname = '" & I2.Text & _
"',averagetime = '" & I3.Text & _
"' WHERE nojob='" & I1.Text & "'")
End If
Mode = 0
Call DisplayData(FJob, "t_jobs", "")
C-26
Call BersihCall KunciTeks(False)
Call AturTombol(FJob, IIf(JR = 0, "10000", "10001"))
End Sub
Private Sub B4_Click()
Mode = 0
Call Bersih
Call KunciTeks(False)
Call AturTombol(FJob, IIf(JR = 0, "10000", "10001"))
End Sub
Private Sub B5_Click()
If MsgBox("Hapus Pekerjaan dengan Nama " & RSTp.Fields(1) & "?", _
vbQuestion + vbYesNo, "Hapus") = vbNo Then Exit Sub
With DE.Commands("QInsert")
.CommandText = "DELETE FROM t_jobs WHERE nojob='" & RSTp.Fields(0) & "'"
.Execute
End With
Mode = 0
Call DisplayData(FJob, "t_jobs", "")
Set GRD.DataSource = RSTp
Call AturTombol(FJob, IIf(JR = 0, "10000", "10001"))
End Sub
Private Sub Command5_Click()
Unload Me
End Sub
Private Sub B6_Click()
Unload Me
End Sub
Private Sub Command6_Click()
If Command6.Caption = "Cari" Then
If Cari.ListIndex < 0 Then Exit Sub
Call DisplayData(FJob, "t_jobs", " WHERE " & Cari.Text & " LIKE '%" & Tcr.Text & "%'")
Set GRD.DataSource = RSTp
C-27
MsgBox "Data Tidak Ditemukan", vbExclamation, "Cari"Exit Sub
End If
Tcr.Text = ""
Call AturTombol(FJob, "11001")
Command6.Caption = "Refresh"
ElseIf Command6.Caption = "Refresh" Then
Call AturTombol(FJob, "11001")
Command6.Caption = "Cari"
Cari.ListIndex = -1
Call DisplayData(FJob, "t_jobs", "")
Set GRD.DataSource = RSTp
End If
End Sub
Private Sub Form_Activate()
Mode = 0
Call DisplayData(FJob, "t_jobs", "")
Set GRD.DataSource = RSTp
Call AturTombol(FJob, IIf(JR = 0, "10000", "10001"))
End Sub
Sub IsiEdit()
With RSTp
I1.Text = .Fields(0)
I2.Text = .Fields(1)
I3.Text = .Fields(2)
I2.SetFocus
End With
End Sub
Sub Bersih()
I1.Text = ""
I2.Text = ""
I3.Text = ""
End Sub
Sub KunciTeks(ak As Boolean)
I1.Enabled = ak
I2.Enabled = ak
C-28
If ak = True Then I2.SetFocusEnd Sub
Private Sub Form_Load()
Call KunciTeks(False)
End Sub
Private Sub GRD_Click()
onKlik = True
Call AturTombol(FJob, "11001")
C-29
Program Menu Utama
Sub SwitchMenus(sets As String)
M1.Enabled = KonvBool(Mid(sets, 1, 1))
M2.Enabled = KonvBool(Mid(sets, 2, 1))
M3.Enabled = KonvBool(Mid(sets, 3, 1))
bOK.Visible = Not KonvBool(Mid(sets, 3, 1))
PD.Enabled = Not KonvBool(Mid(sets, 3, 1))
UN.Enabled = Not KonvBool(Mid(sets, 3, 1))
End Sub
Private Sub bOK_Click()
If UN.Text = "admin" Then
If PD.Text = "987123" Then
Call SwitchMenus("111")
Else
MsgBox "Password Salah"
End If
Else
MsgBox "UserID Salah"
End If
End Sub
Private Sub Form_Load()
Call SwitchMenus("000")
End Sub
Private Sub M01_Click()
End
End Sub
Private Sub M1_Click()
FJob.Show
End Sub
Private Sub M2_Click()
FDaftar.Show
End Sub
C-30
FAntre.ShowEnd Sub
Private Sub PD_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 13 Then bOK_Click
End Sub
Private Sub UN_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 13 Then PD.SetFocus
LAMPIRAN D
1
Universitas Kristen MaranathaBAB I
PENDAHULUAN
Pada bab ini berisi tentang latar belakang, identifikasi masalah, perumusan
masalah, tujuan, pembatasan masalah, spesifikasi alat, dan sistematika penulisan
laporan tugas akhir.
I.1
Latar Belakang
Setiap layanan jasa mengutamakan pelayanan yang memuaskan untuk
pelanggan. Baik itu dari segi waktu antrian, pelayanan keluhan, waktu tunggu
selama pelayanan, dan hasil yang ingin dicapai oleh pelanggan. Kepuasan
pelanggan dalam memperoleh pelayanan adalah tujuan akhir yang ingin dicapai
dari setiap perusahaan jasa.
Perusahaan yang mengutamakan kepuasan pelayanan untuk pelanggan
harus membuat sistem yang efektif.
1.
Dari segi pelayanan pelanggan.
2.
Sistem dapat memberikan layanan yang memuaskan.
3.
Dalam proses pengerjaan keluhan pelanggan, dapat meminimalisasi
kesalahan.
Perusahaan yang mengutamakan antrian yang efektif salah satu contohnya
adalah bengkel perbaikan sepeda motor. Keterkaitan sistem antrian yang dibuat
agar pelanggan memperoleh layanan yang memuaskan, dapat dilihat dari
pengerjaan mekanik bengkel yang dapat mengerjakan pekerjaan dengan cepat dan
efektif, serta ditunjang dengan pelayanan yang baik juga.
BAB I PENDAHULUAN
Universitas Kristen Maranatha
2
I.2
Identifikasi Masalah
Identifikasi masalah pada tugas akhir ini adalah kebutuhan perhitungan
sistem antrian dari segi waktu layanan untuk kepuasan pelanggan.
1.3
Perumusan Masalah
Bagaimana merealisasikan sistem dan program untuk menghitung lama
waktu pengerjaan mekanik bengkel?
I.4
Tujuan
Tujuan dari Tugas Akhir ini adalah membuat perangkat lunak untuk
penghitungan waktu mekanik bengkel dan penentuan antrian pelanggan berbasis
pengontrol mikro AVR dan menggunakan bahasa pemrograman
Visual Basic
.
I.5
Pembatasan Masalah
Pembatasan masalah pada tugas akhir ini dibatasi oleh :
1.
Sistem antrian yang dibuat hanya dua kanal antrian.
2.
Masukan diperoleh dari komputer admin secara manual.
3.
Keluaran berupa informasi yang ditunjukkan oleh tampilan berupa nomor
urut antrian berikutnya dan hasil penghitungan waktu.
4.
Sistem antrian berdasarkan disiplin antrian FIFO (
First In First Out).
5.
Data keluaran yang diperoleh hanya untuk komputer admin saja, tidak dapat
dipublikasikan.
6.
Tampilan
Visual Basic
di komputer disesuaikan dengan kebutuhan admin.
I.6
Spesifikasi Alat yang digunakan
Spesifikasi alat yang digunakan adalah :
1.
Sistem dapat secara otomatis mendeteksi waktu apabila ada kendaraan yang
masuk dalam sistem.
BAB I PENDAHULUAN
Universitas Kristen Maranatha
3
3.
Berbentuk perangkat keras yang menggunakan dua buah sensor jarak
infrared
GP2D12 untuk mendeteksi kendaraan yang masuk berupa sepeda
motor dengan cara mengukur jaraknya.
4.
Tampilan pada komputer admin menggunakan Microsoft
Visual Basic
6.0
sebagai program untuk menampilkan hasil penghitungan waktu dan antrian
pada layar komputer.
I.7
Sistematika Penulisan
Laporan terdiri dari beberapa bab dengan garis besar sebagai berikut :
BAB I PENDAHULUAN
Pada bab ini berisi tentang latar belakang, identifikasi masalah, perumusan
masalah, tujuan, pembatasan masalah, spesifikasi alat, serta sistematika penulisan
laporan tugas akhir.
BAB II LANDASAN TEORI
Pada bab ini dijelaskan mengenai teori-teori penunjang yang diperlukan dalam
merealisasikan tugas akhir yaitu berupa teori tentang antrian FIFO, cara kerja
sensor jarak, pengontrol mikro,
serial port
yang digunakan untuk komunikasi dari
komputer ke pengontrol mikro, dan bahasa pemograman Microsoft
Visual Basic
6.0
untuk tampilan serta pengaturan antrian.
BAB III PERANCANGAN DAN REALISASI
Pada bab ini diuraikan tentang perancangan aplikasi dan realisasi perangkat
penghitung waktu. Diagram blok, cara kerja alat penghitung waktu mekanik
bengkel, perangkat keras (ATmega16 dan sensor jarak). serta perangkat lunak
yang dilengkapi dengan diagram alir.
BAB IV ANALISA DAN DATA PENGAMATAN
Pada bab ini dijelaskan proses pengambilan data pengamatan yang dilakukan oleh
sistem antrian dan analisanya.
BAB V KESIMPULAN DAN SARAN
Universitas Kristen Maranatha
46
BAB V
KESIMPULAN DAN SARAN
Pada bab ini berisi kesimpulan dari Tugas Akhir dan saran-saran yang
perlu dilakukan untuk perbaikan di masa mendatang.
V.1
Kesimpulan
Dalam
Perancangan alat penghitung waktu kerja, dapat disimpulkan
beberapa hal seperti berikut :
1.
Dari hasil tiga kali percobaan dengan memasukkan lima buah data antrian,
menunjukkan proses pengiriman data waktu dari pengontrol mikro
ketampilan
Visual Basic
berhasil.
2.
Perangkat dapat menghitung waktu pengerjaan yg dilakukan oleh mekanik
bengkel dengan baik.
V.2
Saran
Saran-saran yang dapat diberikan untuk perbaikan dan pengembangan
Tugas Akhir ini di masa mendatang adalah :
Universitas Kristen Maranatha Universitas Kristen Maranatha
47
DAFTAR PUSTAKA
1.
Adrian, A.,
Laporan Tugas Akhir : Aplikasi Perintah Suara untuk
Menggerakkan Robot,
Teknik Elektro, Universitas Kristen Maranatha,
Bandung, 2009.
2.
Andrianto, H.,
Buku Panduan : Pelatihan Mikrokontroler AVR ATmega16
,
2008.
3.
Budiharto, W.,
Panduan Praktikum : Mikrokontroler AVR Atmega16
, Jakarta :
Gramedia, 2008.
4.
Sembiring, F.,
Laporan Tugas Akhir : Aplikasi Sensor Kompas untuk Pencatat
Rute Perjalanan,
Teknik Elektro, Universitas Kristen Maranatha, Bandung,
2010.
5.
Setiadi, A.,
Laporan Tugas Akhir : Robot Humanoid,
Teknik Elektro,
Universitas Kristen Maranatha, Bandung, 2009.
6.
http://www.atmel.com