Translate

Pewaktu 8 Saluran Dengan AT89C51, Bagian Kelima: Aplikasi Baca/Tulis Timer Dengan Visual Basic



Pada bagian ini kita akan membahas aplikasi yang dibuat menggunakan Visual Basic yang digunakan untuk mengelola atau mengatur perangkat pewaktu 8 zone masukan yang dibuat. Aplikasi yang akan disampaikan diutamakan untuk membaca dan mengirim data pewaktu yang diperlukan.

Jika Sobat mengikuti semua langkah yang akan dipaparkan maka akan menghasilkan tampilan jendela aplikasi seperti di bawah ini:



Untuk menghasilkan seperti di atas ikuti langkah-langkah berikut:

Bukalah aplikasi Visual Basic dan mari kita mulai pembuatan programnya. Hal pertama pada tampilan View Object, kita akan mulai mendesain tampilan dan obyek apa saja yang diperlukan. Oh iya, kita nama proyek yang dibuat dengan prjDelay8Zone.

Buatlah sebuah forms dengan nama frmDlyUtama. Property BorderStyle dipilih 1 – Fixed Single dengan ControlBox dipilih False. Pada Property Caption isilah “Aplikasi 8 Channel Delay”. Terkhir adalah menentukan StartUpPosition pada 2 – CenterScreen.

Agar tampilan jendela aplikasi kita terlihat lebih manis, kita perlu menambahkan Menu Bar. Pada keyboard tekan Ctrl+E untuk menampilkan Menu Editor. Mulailah membuat obyek yang diperlukan.



Pada Menu Editor buatlan menu dengan nama mnuTools dengan Caption “&Tools” dan mnuHelp dengan Caption “&Help”. Di bawah mnuTools akan kita buat beberapa sub-menu antara lain mnuBaca dengan Property Caption “&Retrieve” dan buatlah sebuah Shortcut “Ctrl+R”, kemudian mnuKirim dengan Caption “&Send data” dan Shortcut “Ctrl+S”, terakhir mnuKeluar dengan Caption “&Exit”. Pada mnuHelp hanya sebuah sub-menu yaitu mnuAbout dengan Caption “&About” dan Shortcut “Ctrl+A”. Nah bagian Menu Bar sudah selesai.

Forms yang kita buat akan diisi dengan beberapa obyek. Satu per satu akan dilengkapi hingga memperoleh seperti tampilan pada gambar awal tulisan ini.

Buatlan frame dengan fraTimer. Isilah Property Caption dengan “Timer Settings”. Pada fraTimer akan diisi dengan beberapa label bernama lblTimer yang dibuat secara array sebanyak 8 buah. Ubahlan Property Caption masing-masing dengan lblTimer(0) dengan “Timer 1”, lblTimer(1) dengan “Timer 2” dan seterusnya sampai lblTimer(7) dengan “Timer 8”. Kemudian masih label yang lain adalah lblMenit yang juga array sebanyak delapan dengan Property Caption sama yaitu “minutes” untuk lblMenit(0) sampai lblMenit(7). Yang lainnya dalam fraTimer adalah membuat beberapa TextBox, juga secara array yaitu txtTimer(0) sampai txtTimer(7). Pilihlah Property Alignment 1- Right Justify. Tetapkan MaxLength sebanyak 3 dan kosongkan isi Property Text.

Berikutnya tambahkan sebuah frame dengan nama fraReport dengan Property Caption dikosongkan. Di dalam fraReport kita akan menambahkan 2 buah label masing-masing dengan nama lblUnit dengan Caption “Disconnect” dan lblReport dengan Caption “Preparing connection to device” sebagai Property Caption Awal yang nanti semua akan diubah pada program Code. Kita juga menambahkan sebuah obyek Shape dengan nama shpTimer dengan Property Shape 0 – Rectangle.

Setelah kita membuat 2 buah Frame, pada obyek Forms kita akan ditambahkan 3 buah CommandButton, yaitu bernama cmdBaca dengan Caption “RETRIEVE”, cmdKirim dengan Caption “SEND” dan cmdKeluar dengan Caption “EXIT”.

Nah, semua obyek sudah kita lengkapi. Sekarang kita akan menambahkan beberapa komponen yang diperlukan. Dari ToolBox General kita akan menambahkan 2 buah komponen Timer yaitu bernama Timer 1 dengan Interval 250 dalam satuan mili detik dan Timer 2 dengan Interval 100 ms.

Agar aplikasi kita dapat menjalankan perintah komunikai serial melalui gerbang RS-232 maka kita harus menambahkan komponen MSComm. Biasanya pada Tabulasi ToolBox General komponen ini belum ada. Untuk itu ada beberapa cara untuk menampilkan Kotak dialog Components. Klik kanan mouse pada ToolBox General lalu pilih Components. Cara lainnya adalah melalui Menu Bar dengan memilih Project lalu pilih Components. Atau dengan keyboard kita bisa menekan Ctrl+T. Terserah Sobat mau pilih yang mana. Yang penting akan tampil kotak dialog seperti berikut:



Pada kotak dialog Components cari dan pilihlah Microsoft Comm Control 6.0 lalu Apply.

Pada ToolBox sekarang sudah ada ikon bergambar telepon. Masukkan ikon komponen tersebut pada form kita dengan nama MSComm1. Ubahlah Property Rthreshold dengan nilai 1.

Langkah berikutnya adalah membuat beberapa modul yang berisi pernyataan yang akan dijalankan oleh aplikasi. Pada View Code, kita lanjutkan pekerjaan membuat aplikasi.

Pertama menentukan beberapa variabel yang dibutuhkan pada aplikasi yaitu variabel Status, Scan, Buffer dan Timer yang berjenis string. Sobat bisa menggunakan pernyataan As String tapi aku lebih suka dengan tanda $. Kemudian variabel lainnya adalah Integer dengan nama Nomor dan Port.

Option Explicit

Dim Status$, Scan$, Buffer$, Nomor%, Port%, Timer$(7)

Berikut adalah modul dan pertanyaan untuk CommandButton. Pada Sub cmdBaca diawali dengan penjebakan kesalahan On Error. Perintah utamanya adalah menon-aktifkan Timer2 dan mengosongkan Buffer. Yang terpenting dari cmdBaca adalah mengirim informasi serial dengan data “<T>”.

Private Sub cmdBaca_Click()
    On Error Resume Next
    lblReport.Caption = "Request data from device": Timer2.Enabled = False: Buffer = "": MSComm1.Output = "<T>"
End Sub

Pada Sub cmdKeluar, aku sedikit show-up dengan menampilkan mnuAbout_Click sebelum menututp gerbang serial dan keluar.

Private Sub cmdKeluar_Click()
    mnuAbout_Click
    If MSComm1.PortOpen = True Then MSComm1.PortOpen = False
    End
End Sub

Pada Sub cmdKirim dimulai dengan mengisi variabel Timer$(0) sampai Timer$(7) dengan isi dari txtTimer(0).Text sampai txtTimer(7). Isi variabel timer harus berupa 3 buah karakter angka jika kurang maka akan ditambahkan dengan “0” termasuk jika isi txtTimer ternyata kosong. Pernyataan selanjutnya adalah mengisi variabel Nomor dengan 0 dan mengaktifkan Timer1 serta menon-aktifkan Timer2.

Private Sub cmdKirim_Click()
    For Nomor = 0 To 7 Step 1
        Timer(Nomor) = Right(("000" & val(txtTimer(Nomor).Text)), 3)
    Next Nomor
    Nomor = 0: lblReport.Caption = "Request to send": Timer1.Enabled = True: Timer2.Enabled = False
End Sub

Inilah modul yang pertama akan dilaksanakan saat aplikasi dijalankan. Ini akan menon-aktifkan hampir semua obyek kecuali cmdKeluar dan fraReport.

Private Sub Form_Load()
    On Error Resume Next
    Scan = "OK": fraTimer.Enabled = False: Port = 1
    cmdBaca.Enabled = False: cmdKirim.Enabled = False
    mnuBaca.Enabled = False: mnuKirim.Enabled = False
    For Nomor = 0 To 7 Step 1
        txtTimer(Nomor).Enabled = False: lblTimer(Nomor).Enabled = False
        lblMenit(Nomor).Enabled = False
    Next Nomor
End Sub

Di bawah adalah Sub mnuAbout yang berfungsi menampilkan keterangan tentang aplikasi dan pembuatnya dengan MessageBox.

Private Sub mnuAbout_Click()
    MsgBox "Remote 8 Channels Delay Trigger Software, Ver. 0.1" & vbCrLf & _
        "Create by Sigit Widodo" & vbCrLf & _
        "Powered by ARSYTEC" & vbCrLf & vbCrLf & _
        "Thank 's for use our product.", , "About Me"
End Sub

Menu-menu selanjutnya hanya akan menjalankan perintah dari modul CommandButton. Ketiga menu tersebut adalah seperti berikut ini:

Private Sub mnuKeluar_Click()
    cmdKeluar_Click
End Sub

Private Sub mnuKirim_Click()
    cmdKirim_Click
End Sub

Private Sub mnuBaca_Click()
    cmdBaca_Click
End Sub

Sub MSComm1_OnComm adalah semacam jebakan yang akan dijalankan bilamana adanya data yang diterima melalui gerbang serial. Seluruh data akan ditampung pada Buffer dan baru akan diproses setelah menjumpai karakter “>”. Karakter kode pertama dari perangkat yang diperiksa adalah “T” untuk isi dari Timer perangkat dan disimpan pada variabel Timer. Kode lainnya adalah “S” namun hanya akan digunakan untuk menentukan isi variabel Status dengan “OK”. Sub ini juga membatasi data serial yang masuk sampai dengan 35 byte pada Buffer.

Private Sub MSComm1_OnComm()
    On Error Resume Next
    Buffer = Buffer & MSComm1.Input
    If Right(Buffer, 1) = ">" Then
        If Mid(Buffer, 2, 1) = "T" Then
            Timer(0) = Mid(Buffer, 3, 3): Timer(1) = Mid(Buffer, 7, 3): Timer(2) = Mid(Buffer, 11, 3)
            Timer(3) = Mid(Buffer, 15, 3): Timer(4) = Mid(Buffer, 19, 3): Timer(5) = Mid(Buffer, 23, 3)
            Timer(6) = Mid(Buffer, 27, 3): Timer(7) = Mid(Buffer, 31, 3)
            For Nomor = 0 To 7 Step 1
                txtTimer(Nomor).Text = Val(Timer(Nomor))
            Next Nomor
            Buffer = "": lblReport.Caption = "Received data complete": Timer2.Enabled = True
        ElseIf Mid(Buffer, 2, 1) = "S" Then
            Status = "OK"
        End If
    Else
        If Len(Buffer) > 35 Then Buffer = ""
    End If
End Sub

Sub Timer1 adalah modul untuk mengirimkan data pewaktu ke perangkat dimulai dari pewaktu A sampai dengan H. Setelah selesai Sub ini akan menon-aktifkan dirinya sendiri dan menjalankan Timer2.

Private Sub Timer1_Timer()
    On Error Resume Next
    lblReport.Caption = "Sending to Timer " & Nomor + 1 & " with value " & Val(Timer(Nomor))
    Select Case Nomor
        Case 0: MSComm1.Output = "<A" & Timer(Nomor) & ">": Nomor = Nomor + 1
        Case 1: MSComm1.Output = "<B" & Timer(Nomor) & ">": Nomor = Nomor + 1
        Case 2: MSComm1.Output = "<C" & Timer(Nomor) & ">": Nomor = Nomor + 1
        Case 3: MSComm1.Output = "<D" & Timer(Nomor) & ">": Nomor = Nomor + 1
        Case 4: MSComm1.Output = "<E" & Timer(Nomor) & ">": Nomor = Nomor + 1
        Case 5: MSComm1.Output = "<F" & Timer(Nomor) & ">": Nomor = Nomor + 1
        Case 6: MSComm1.Output = "<G" & Timer(Nomor) & ">": Nomor = Nomor + 1
        Case 7: MSComm1.Output = "<H" & Timer(Nomor) & ">": Nomor = Nomor + 1
        Case 8: lblReport.Caption = "Download data completed": Timer1.Enabled = False: Timer2.Enabled = True
    End Select
End Sub

Sub Timer2 diperlukan untuk mendeteksi keberadaan perangkat dengan melakukan penyisiran atau scan pada COM1 sampai COM10. Tadinya aku sempat buat hingga 99 karena menggunakan konverter USB ke RS-232 dan mendapat jatah COM55. Meski bisa diubah menjadi COM4 tapi setiap kali baru dikonfigurasi secara otomatis oleh PC selalu kembali ke COM55. Pada saat scan Timer2 menggunakan Interval 500ms. Setelah perangkat diketemukan maka Timer2 akan melakukan penyegaran dengan Interval 5s. Baik scan atau penyegaran dengan mengirim data “<I>” ke perangkat.

Private Sub Timer2_Timer()
    On Error Resume Next
    If Status = "OK" Then
        If Scan = "OK" Then
            Scan = "": fraTimer.Enabled = True
            lblUnit.Caption = "Connected": shpTimer.FillColor = vbGreen
            lblReport.Caption = "Found device on COM" & Port - 1: Timer2.Interval = 5000
            cmdBaca.Enabled = True: cmdKirim.Enabled = True
            mnuBaca.Enabled = True: mnuKirim.Enabled = True
            For Nomor = 0 To 7 Step 1
                txtTimer(Nomor).Enabled = True: lblTimer(Nomor).Enabled = True: lblMenit(Nomor).Enabled = True
                Next Nomor
        End If
    Else
        If Scan = "" Then Form_Load
        If MSComm1.PortOpen = True Then MSComm1.PortOpen = False
        If Port > 10 Then Port = 1
        Timer2.Interval = 500
        lblUnit.Caption = "Disconnect": shpTimer.FillColor = vbRed
        lblReport.Caption = "Looking for device on COM" & Port
        MSComm1.CommPort = Port: MSComm1.Settings = "9600,n,8,1": MSComm1.PortOpen = True: Port = Port + 1
    End If
    Buffer = "": Status = "": MSComm1.Output = "<I>"
End Sub

Modul berikut untuk mengatur masukan pada TextBox dari txtTimer. Kita akan melakukan jebakan untuk membatasi masukan pada nilai 0 sampai 255 sesuai dengan nilai byte yaitu yaitu maksimal 255 (FFH).

Private Sub txtTimer_Change(Index As Integer)
        If Val(txtTimer(Index).Text) > 255 Then
            MsgBox "Please set timer value from 0 to 255", , "Entry Failure": txtTimer(Index) = Val(Timer(Index))
        End If
        txtTimer(Index).Text = Val(txtTimer(Index).Text)
End Sub

Demikian aplikasi untuk perangkat pewaktu 8 saluran yang dibuat. Sekarang kita bisa mengatur nilai pewaktu dari perangkat. Aplikasi lain yang berkaitan dengan perangkat akan dibahas pada kesempatan lain. Setidaknya sekarang perangkat sudah dapat dioperasikan dan dikelola.

Untuk koneksi antara Serial Port PC dengan perangkat, perhatikan gambar berikut:



Pada konektor sebelah kanan, hubungkan terminal TXD dengan pena 2 dari konektor DB9, RXD dengan pena 3 dan GND pada pena 5.




Udah ya, makasih udah baca postingan aku. Semoga bisa bermanfaat, sukur-sukur bisa diterapkan oleh sobat semua.

Salam....

Tidak ada komentar:

Posting Komentar