TUTORIAL VISUAL C++ UNTUK APLIKASI AKUISISI DAN MONITORING DATA SECARA REAL TIME Pengantar dan Panduan Training VC++ untuk aplikasi berorientasi Kontrol (Rev 0, Mei 2009)
Oleh : Iwan Setiawan Automatic Control Lab, Electrical Engineering of UNDIP http://iwan.blog.undip.ac.id
[email protected]
Tutorial Visual C++ untuk Aplikasi Akuisisi dan Monitoring Data secara Real Time http://iwan.blog.undip.ac.id
Kata Pengantar Bagi anda yang belum pernah menggunakan sebuah perkakas, misalnya pahat, kira-kira butuh waktu berapa lama agar mahir memakai alat tersebut? ..satu hari, satu bulan, atau satu tahun?. Nampaknya, tidak perlu waktu berhari-hari atau berbulan-bulan hanya untuk belajar menggunakan perkakas semacam pahat, kurang lebih lima sampai sepuluh menit anda sudah cukup untuk belajar menggunakan pahat (tapi tentu saja jawabannya akan berbeda jika anda berniat menjadi seorang pemahat). Kasus yang hampir sama berlaku juga saat anda berminat mempelajari bahasa pemrograman Visual C++. Anda pada dasarnya dapat memandang Visual C++ sebagai sebuah perkakas (tool) untuk aplikasi yang sedang direncanakan (misal untuk simulasi, monitoring, data logging atau pengontrolan). Tidak perlu waktu 6 jam, 24 jam, atau 36 hari,… cukup 1 jam 30 menit!, anda sudah dapat menguasai Visual C++, bahkan untuk aplikasi yang relative serius sekalipun, yaitu seperti akuisisi dan monitoring data real time. Syaratnya ?... langsung praktek di depan komputer secara terbimbing. Bagi anda (terutama para pemula) yang berniat memanfaatkan Visual C++ sebagai tools pengembang untuk aplikasi yang berhubungan dengan sistem akusisi dan monitoring data secara real time (banyak ditemukan dalam bidang Kontrol), tulisan singkat ini dapat digunakan baik sebagai pengantar (karena berisi beberapa konsep penting yang perlu anda pahami) dan sekaligus juga sebagai panduan yang menemani anda saat praktek pemrograman Visual C++ secara langsung.
.
2
Tutorial Visual C++ untuk Aplikasi Akuisisi dan Monitoring Data secara Real Time http://iwan.blog.undip.ac.id
Materi •
Pengenalan Visual C++: Konsep, Integrated Development Editor
dan
Komponen standar •
Pengaksesan Timer
•
Real Time Chart
•
Akuisisi dan Monitoring Data secara real time lewat port serial
Perangkat •
Microsoft Visual C++
•
Port serial RS232 beserta kabelnya
•
Converter RS232 to USB (jika computer/laptop tidak ada port serial)
•
Microcontroller AVR, dan Sensor (optional)
3
Tutorial Visual C++ untuk Aplikasi Akuisisi dan Monitoring Data secara Real Time http://iwan.blog.undip.ac.id
¾ Visual C++ Sebagai Bahasa Pemrograman Visual Pengembangan program aplikasi dengan menggunakan Visual C++ pada dasarnya bersifat intuitive. Hal ini dikarena Visual C++ menerapkan konsep WYSIWYG (what you see is what you get), atau dengan kata lain perancang sudah dapat memperkirakan bentuk tampilan visual
program berdasarkan bentuk visual
rancangan (lihat ilustrasinya pada gambar 1).
(a). Form desain
(b). Form hasil eksekusi Gambar 1. Konsep WYSIWYG
Seperti halnya Delphi dan Visual Basic, Visual C++ dikatagorikan sebagai bahasa Visual karena Visual C++ menyediakan berbagai komponen visual standar pembangun sebuah aplikasi: Button, Radio button, Slider, Edit box, Combo box, dan sebagainya (disamping komponen-komponen visual, visual C++ juga
4
Tutorial Visual C++ untuk Aplikasi Akuisisi dan Monitoring Data secara Real Time http://iwan.blog.undip.ac.id
menyediakan beragam komponen non visual siap pakai yaitu seperti IP address, COMM – komponen komunikasi serial, dan sebagainya) Bagi anda yang sebelumnya pernah menggunakan Delphi atau VB, mungkin akan sedikit kecewa dengan komponen-komponen visual standar Visual C++ yang nampak “miskin” properties. Tapi jangan khawatir, anda dapat “berburu” komponen visual di internet, banyak situs-situs yang menyediakan komponenkomponen visual menarik gratisan maupun komersial. Karena dalam sistem operasi Windows, komponen Visual C++ umumnya dikenal sebagai file library dengan ekstensi .dll atau .ocx, maka untuk mendapatkan komponen-komponen tersebut di internet, pada mesin pencari google misalnya, anda ketik beberapa kata kunci berikut :ocx, dll, ActiveX, component vc++, free, dsb. Untuk
mendaftarkan
atau
menginstal
komponen
secara
manual,
ketik
REGSVR32 namafile.ext dalam dos seperti nampak pada ilustrasi gambar 2 dibawah (beberapa komponen juga akan terdaftar
secara otomatis saat anda
menginstal program baru pada windows)
Gambar 2. Cara menginstal komponen activeX lewat dos
Tips Praktis Dan Saran
5
Tutorial Visual C++ untuk Aplikasi Akuisisi dan Monitoring Data secara Real Time http://iwan.blog.undip.ac.id
1. Setelah anda memahami konsep bahasa pemrograman visual, sekarang jalankan Visual C++ pada komputer anda. Pastikan setiap project yang dirancang memanfaatkan komponen-komponen bawaan VC++, atau dengan kata lain, saat mulai meng-create project baru, pilih selalu MFC AppWizar(exe) pada tab project (lihat gambar 3), beri nama project sesuai kehendak anda (tetapi tentu saja nama tersebut mestinya mencerminkan aplikasi yang dibangun), click tombol OK.
Gambar 3. MFC : Microsoft Foundation Class
2. Dengan menggunakan Microsoft Foundation Class (MFC) atau komponen standar VC++, anda akan diberi tiga jenis pilihan aplikasi: Multiple Document (seperti aplikasi Wordprocessor), Single Document (seperti Notepad), dan aplikasi tipe Dialog (seperti aplikasi character map). Pada project-project awal, pilih aplikasi bertipe dialog based seperti nampak pada gambar 4, click tombol next beberapa kali sampai form dialog perancangan awal muncul (beberapa pilihan pada jendela antara, anda biarkan saja pada nilai default-nya), hapus text ”TODO: ...”, tombol OK serta Cancel pada form
6
Tutorial Visual C++ untuk Aplikasi Akuisisi dan Monitoring Data secara Real Time http://iwan.blog.undip.ac.id
tersebut, sehingga sekarang yang tersisa hanyalah form dialog yang kosong (lihat gambar 5).
Gambar 4. Tiga jenis pilihan aplikasi MFC
Gambar 5. Form Perancangan kosong
7
Tutorial Visual C++ untuk Aplikasi Akuisisi dan Monitoring Data secara Real Time http://iwan.blog.undip.ac.id
3. Kenali terlebih dulu lingkungan VC++ tempat anda nanti melakukan perancangan. Perhatikan jendela Workspace disebelah kiri form dialog. Pada jendela tersebut nampak ada tiga buah tab : •
ClassView :Tab ini menampilkan informasi program aplikasi pada level atau sudut pandang kelas -class (untuk mengetahui konsep kelas, anda harus sedikit paham tentang bahasa OOP)
•
ResourceView: Tab ini menampilkan informasi visual aplikasi yang sedang dibangun (pada tab inilah nanti anda melakukan desain visual program)
•
FileView: Tab ini menampilkan informasi program aplikasi pada level file (dalam banyak kasus perancangan, anda nanti akan jarang berhubungan dengan tab ini)
Setelah familiar dengan lingkungan VC++, mulailah belajar melakukan perancangan visual: Tempatkan berbagai komponen visual standar (misal, button, edit box, slider, dan sebagainya) dalam jendela kontrol pada form dialog sesuai kehendak, jalankan dan amati hasilnya, ubah juga beberapa properties komponen lewat jendela properties seperti nampak pada gambar 6 (untuk memunculkan jendela tersebut, caranya click mouse kanan, pilih properties), jalankan dan amati hasilnya. 4. Sampai tahap ini anda seharusnya sudah dapat merasakan apa itu namanya konsep WYSIWYG pada bahasa pemrograman visual. Jika anda sudah merasa cukup “bermain-main” dengan komponen standar pada jendela control, sekarang coba beberapa komponen yang tersimpan di tempat lain: click mouse kanan, pilih Insert ActiveX Control..., atau click menu project, sorot Add to project, click Components and Controls, maka nanti akan muncul beragam komponen yang dapat digunakan untuk project anda. Beberapa nama mungkin akan bersifat intuitive, sedangkan yang lainnya benar-benar asing, pilih nama komponen yang kira-kira agak familiar, misal :Microsoft TogleButton, Microsoft Slider Control, dan sebagainya. Tempatkan komponen-komponen
8
Tutorial Visual C++ untuk Aplikasi Akuisisi dan Monitoring Data secara Real Time http://iwan.blog.undip.ac.id
tersebut pada form dialog, ubah-ubah nilai properties-nya, amati hasilnya kemudian eksekusi aplikasi anda.
Gambar 6. beberapa komponen visual VC++ dan jendela properties-nya
Untuk banyak tujuan (terutama aplikasi berorientasi Kontrol), salah satu komponen yang nampaknya ”menarik” anda gunakan adalah chart atau grafik yang memiliki kemampuan menampilkan data hasil akuisisi dari dunia luar secara real time (grafik-grafik tersebut umumnya tersedia pada software HMI– Human Machine Interface komersil). Dalam VC++ (dan juga VB serta Delphi?), salah satu komponen chart yang memiliki kemampuan ”grafik bergerak” tersebut adalah Stripchart yang akan tersedia secara otomatis jika anda sebelumnya telah menginstal sofware Matlab. Jika belum tersedia, instal terlebih dulu komponen yang dimaksud dalam sistem anda, caranya ketik (dalam dos): REGSVR32 MWChart.ocx (file
REGSVR32.exe
dan
MWChart.ocx
dapat
anda
download
di
http://iwan.blog.undip.ac.id)
9
Tutorial Visual C++ untuk Aplikasi Akuisisi dan Monitoring Data secara Real Time http://iwan.blog.undip.ac.id
Didalam daftar komponen ActiveX control, MWChart.ocx akan nampak dengan label Strip Chart ActiveX Control (lihat gambar 7), sorot komponen tersebut kemudian click tombol OK.
Gambar 7. Komponen Strip Chart untuk menampilkan data real time
Dalam form desain, sekarang akan muncul grafik yang ukurannya dapat anda sesuaikan lewat mouse, munculkan jendela properties, ubah beberapa nilai, dan amati pengaruhnya pada chart rancangan (lihat gambar 8). Sampai langkah ini anda tidak perlu paham dengan cara kerja program pertama anda, yang paling penting anda sudah mulai merasakan betapa mudahnya membuat aplikasi menarik dengan komponen-komponen visual pada Visual C++.
10
Tutorial Visual C++ untuk Aplikasi Akuisisi dan Monitoring Data secara Real Time http://iwan.blog.undip.ac.id
Gambar 8. Tampilan komponen Stripchart beserta daftar properties-nya
¾ Visual C++ Sebagai bahasa Pemrograman event Driven Selain termasuk bahasa visual, Visual C++ juga digolongkan sebagai bahasa yang bersifat event driven. Artinya program yang anda bangun pada dasarnya tidak ”melakukan apa-apa” selain menunggu event atau kejadian. Apa itu event?. Untuk memahami program event driven yang berjalan pada sistem operasi Windows, anda harus sedikit paham dengan konsep message atau pesan dalam Windows: Saat aplikasi dijalankan, apa pun yang anda kerjakan dengan komputer, Windows akan tahu dan akan selalu memberi pesan pada anda ”hello anda sekarang lagi menggerakan mouse, ...anda sekarang lagi mengetik huruf , ...anda sekarang meng-click mouse...., ....anda sekarang meng-click 2x mouse..., ... anda sekarang meng-close aplikasi, dst,dst..”. intinya ada ratusan pesan Windows yang akan disampaikan pada aplikasi berdasarkan event yang terjadi. (bagi anda yang telah terbiasa dengan pemrograman microcontroller, konsep event ini tidak lain adalah interupsi. Hanya saja jika interupsi, pesan yang disampaikan pada aplikasi berasal dari perangkat keras, sedangkan event, pesan yang disampaikan pada aplikasi muncul dari software-sistem operasi)
11
Tutorial Visual C++ untuk Aplikasi Akuisisi dan Monitoring Data secara Real Time http://iwan.blog.undip.ac.id
Terkait dengan pesan yang disampaikan Windows, sekarang masalahnya apakah aplikasi yang anda bangun mau menangkap dan memproses pesan tersebut atau tidak. Kalau tidak, berarti pesan dari Windows tersebut abaikan saja, kalau mau... ya kita tangani (lewat aplikasi tentunya). Cara penanganan sebuah pesan dalam Visual C++ pada dasarnya relative mudah, tapi satu hal yang terlebih dulu perlu disampaikan, setiap komponen visual pada dasarnya hanya memiliki kemampuan menangani sejumlah event tertentu saja: semakin kompleks sebuah komponen, message dari windows yang mampu ditangani juga semakin banyak. Gambar 9 dan 10 memperlihatkan sejumlah pesan berbeda yang mampu ditangani berturut-turut oleh komponen button dan komponen form dialog. Pesan BN_CLICKED pada button misalnya, akan disampaikan Windows pada
aplikasi jika kita menekan button saat aplikasi
dijalankan (untuk mengetahui pesan apa saja yang mampu ditangani komponen tertentu, click tombol mouse kanan pada komponen, pilih events. Atau dapat juga dilakukan lewat jendela MFC ClassWizard : click tombol mouse kanan, pilih ClassWizard, masuk pada tab Message Map –lihat gambar 11).
Gambar 9. Dua pesan Windows yang mampu ditangani oleh komponen button standar
12
Tutorial Visual C++ untuk Aplikasi Akuisisi dan Monitoring Data secara Real Time http://iwan.blog.undip.ac.id
Gambar 10. Beberapa pesan Windows yang mampu ditangani oleh form dialog utama
Gambar 11. Berbagai pesan yang dapat ditangani komponen
Untuk menangani salah satu pesan dari komponen tertentu, caranya sorot pesan tersebut, click tombol Add and Edit (lihat kembali gambar 10). Misal jika pesan yang akan diproses adalah BN_CLICKED sebuah button, maka setelah anda
13
Tutorial Visual C++ untuk Aplikasi Akuisisi dan Monitoring Data secara Real Time http://iwan.blog.undip.ac.id
menekan tombol Add and Edit, selanjutnya akan muncul jendela konfirmasi nama fungsi atau prosedure default penanganan pesan, nama fungsi bisa anda ganti sesuai selera atau anda biarkan seperti aslinya, setelah tombol OK ditekan (lihat gambar 12), sekarang anda akan dibawa ke editor VC++ penanganan pesan (lihat gambar 13). Ketik kode penanganan pesan di tempat tersebut.
Gambar 12. Nama fungsi default penanganan pesan BN_CLICKED
Gambar 13. fungsi OnButton1() tempat coding penanganan pesan
14
Tutorial Visual C++ untuk Aplikasi Akuisisi dan Monitoring Data secara Real Time http://iwan.blog.undip.ac.id
Sebagai contoh, jika anda ketik perintah : MessageBox(”Hello kamu tadi mijit aku ya...”);
didalam blok fungsi onButton1 pada gambar 13, maka ketika aplikasi dijalankan dan tombol button di-click, box pesan seperti nampak pada gambar 14 akan muncul.
Gambar 14. Keluaran fungsi MessageBox(...)
Gambar 15. Pesan timer windows (WM_TIMER)
15
Tutorial Visual C++ untuk Aplikasi Akuisisi dan Monitoring Data secara Real Time http://iwan.blog.undip.ac.id
Dalam banyak aplikasi, salah satu pesan Windows yang sering digunakan dalam project adalah timer. Jika anda ingin menangani pesan timer, caranya click mouse kanan pada form dialog, sorot pesan dengan label WM_TIMER yang terletak di box sebelah kiri --New Windows messages/events (lihat gambar 15), click tombol Add and Edit, sekarang VC++ otomatis akan masuk pada jendela editor tempat coding penanganan pesan timer tersebut (lihat gambar 16).
Gambar 16. Fungsi penanganan pesan WM_TIMER
Sekarang coba ketik perintah dibawah dalam fungsi OnTimer(...) MessageBox(”Tolong pijit aku dong...”) ; Jalankan aplikasi dan amati, Apa yang terjadi ?.. Ya benar tidak terjadi apa-apa dengan aplikasi, hal ini dikarenakan anda belum memberi tahu Windows setiap berapa detik timer expired, atau dengan kata lain anda belum menginisialisasi timer. Untuk itu anda terlebih dulu perlu menginisialisasinya. Sekarang ketik perintah inisialisasi dibawah (misal pada fungsi penanganan komponen button1 yang telah anda tempatkan sebelumnya dalam form dialog): void CTimer0Dlg::OnButton1() { //TODO: Add your control notification handler code here SetTimer(1, 1000, NULL); }
Jalankan, click tombol button, apa yang terjadi?... yang terjadi, setiap 1000 ms (1 detik) akan muncul box pesan seperti yang telah anda ketik pada fungsi penanganan pesan timer. Jika anda perhatikan fungsi SetTimer diatas, nampak ada 3 parameter yang dilewatkan pada fungsi tersebut: Parameter pertama adalah nomer timer (0,1,2,..), parameter kedua adalah waktu expired timer (dalam satuan ms) dan parameter ketiga isikan nilai NULL)
16
Tutorial Visual C++ untuk Aplikasi Akuisisi dan Monitoring Data secara Real Time http://iwan.blog.undip.ac.id
Jika misal anda memerlukan 3 buah timer dengan waktu expired masing-masing: timer 0 = 50ms, timer 1 = 100ms dan timer 3 = 1000 ms. Maka inisialisasinya adalah: SetTimer(0, 50, NULL); SetTimer(1, 100, NULL); SetTimer(2, 1000, NULL);
sedangkan dalam fungsi penanganan event timer (OnTimer), anda ketik logika penanganan masing-masing timer seperti nampak dibawah: void CTimer0Dlg::OnTimer(UINT nIDEvent) { // TODO: Add your message handler code here and/or call default if(nIDEvent==1) { …… } if(nIDEvent==2) { …… } if(nIDEvent==3) { …… } CDialog::OnTimer(nIDEvent); }
Terkait dengan penggunaan timer, pastikan sebelum anda keluar dari aplikasi, timer telah dimatikan terlebih dulu, ketik perintah KillTimer(no_Timer);
pada salah satu fungsi penanganan event komponen tertentu. (dalam hal ini misal komponen tombol – button yang memang difungsikan untuk menghentikan timer)..
Tips Praktis Dan Saran 1. Buatlah project dari awal lagi dengan langkah-langkah yang telah dijelaskan pada bagian pertama tulisan ini. Tempatkan beberapa komponen yang menurut anda menarik, kemudian lihat event-event yang mampu ditangani
17
Tutorial Visual C++ untuk Aplikasi Akuisisi dan Monitoring Data secara Real Time http://iwan.blog.undip.ac.id
komponen tersebut, tidak ada salahnya anda mencoba beberapa event yang kira-kira namanya relative intuitive. 2. Jika anda benar-benar telah paham tentang konsep event atau message atau pesan dari Windows, maka kini saatnya anda belajar menggunakan salah satu komponen yang nantinya difungsikan untuk akuisisi data. Komponen yang dimaksud adalah komponen PortController. Komponen PortController adalah komponen dari pihak ketiga yang dapat digunakan sebagai sarana komunikasi antara komputer dengan dunia luar lewat kabel komunikasi serial. Untuk tujuan komunikasi serial itu sendiri, VC++ sebenarnya telah menyediakan komponen standar yaitu Microsoft Communication Control (nama file mscomm32.ocx-lihat gambar 17)
Gambar 17. Komponen komunikasi standar VC++
Tetapi penggunaan komponen komunikasi serial standar bawaan VC++ ini secara praktis relative sulit dibandingkan dengan komponen PortController (lihat http://www.scientificcomponent.com). Sebelum anda mencobanya, install terlebih dahulu komponen tersebut secara manual lewat dos: Ketik REGSVR32 PortController.dll
18
Tutorial Visual C++ untuk Aplikasi Akuisisi dan Monitoring Data secara Real Time http://iwan.blog.undip.ac.id
(file
versi
trial-nya
dapat
anda
download
pada
alamat
url
http://www.scientificcomponent.com atau http://iwan.blog.undip.ac.id). Didalam jendela komponen, PortController tersebut akan nampak dengan label PortController Class seperti terlihat pada gambar 18 berikut:
Gambar 18. Komponen komunikasi serial PortController
Jika komponen tersebut anda pilih, maka sekarang dalam jendela dialog perancangan akan nampak icon PortController seperti terlihat pada gambar 19 dibawah, kecilkan gambar tersebut lewat mouse kemudian tempatkan pada wilayah form yang tidak anda gunakan.
Gambar 19. Icon komponen PortController pada form perancancangan
19
Tutorial Visual C++ untuk Aplikasi Akuisisi dan Monitoring Data secara Real Time http://iwan.blog.undip.ac.id
Gambar 20. Properties komponen PortController
Gambar 21. Berbagai jenis event komponen PortController
Selanjutnya, amati properties (gambar 20) dan event-event yang terkait dengan komponen PortController tersebut (gambar 21). Walaupun komponen PortController mampu menangani 9 jenis event, tetapi untuk tujuan komunikasi serial Null Model, pada dasarnya hanya dua event yang perlu diketahui secara mendalam: DataReceived dan EvCharReceived.
20
Tutorial Visual C++ untuk Aplikasi Akuisisi dan Monitoring Data secara Real Time http://iwan.blog.undip.ac.id
Event DataReceived akan dipicu jika ada sebuah karakter yang masuk ke dalam buffer memori komputer, sedangkan
event EvCharReceived akan
dipicu jika ada sebuah karakter event masuk dari luar ke dalam memori komputer (karakter event adalah sebuah karakter unik yang sebelumnya anda isikan pada properties EventChar, misal jika nilai EventChar pada jendela properties anda isi dengan karakter “:“ (titik dua), maka setiap kemunculan karakter “:“ pada port serial akan memicu event EvCharReceived). Untuk tujuan komunikasi serial praktis, event DataReceived dapat kita gunakan terutama untuk mendeteksi kemunculan data-data biner, sedangkan event EvCharReceived digunakan jika data yang dikomunikasikan antar perangkat memiliki format karakter ASCII. ¾ Visual C++ Sebagai Bahasa Pemrograman Berorientasi Objek Selain termasuk bahasa pemrograman visual dan bersifat event driven, Visual C++ juga digolongkan sebagai bahasa pemrograman berorientasi objek (walaupun tidak begitu ketat). Dalam hal ini, hampir semua komponen visual VC++ dapat diasosiasikan sebagai objek (tetapi tidak semuanya). Setiap objek yang berbeda memiliki kelas yang berbeda pula. Dalam Object Oriented Program (OOP) , Konsep kelas (class) pada dasarnya merupakan perluasan dari tipe data struktur. Dalam hal ini anggota kelas selain dapat berupa variabel dapat juga berupa fungsi. Berikut ini adalah format standar deklarasi sebuah kelas class nama_kelas { private: //optional anggota_1; anggota_2; : anggota_n; public: //optional anggota_1; anggota_2; : anggota_n; protected: //optional anggota_1; anggota_2;
21
Tutorial Visual C++ untuk Aplikasi Akuisisi dan Monitoring Data secara Real Time http://iwan.blog.undip.ac.id
: anggota_n; } nama_objek; •
Anggota kelas setelah kata kunci private hanya dapat diakses dari
kelas yang sama •
Anggota kelas setelah kata kunci public dapat diakses dari luar kelas
•
Anggota kelas setelah kata kunci protected selain dari dalam kelas yang sama juga dapat diakses dari kelas turunannya.
Ketika anda membuat project berbasis jendela dialog dengan nama katakanlah my_oop, maka Visual C++ secara otomatis akan meng-create tiga buah kelas untuk tiga buah objek yang berbeda: CAboutDlg, CMy_oopApp, dan CMy_oopDlg. Kelas-kelas tersebut beserta anggota kelasnya (baik berupa fungsi atau variabel-objek) dapat anda lihat pada tab ClassView dalam jendela workspace (lihat gambar 22). Anggota kelas yang memiliki tanda kunci artinya bersifat protected sedangkan yang tidak memiliki tanda kunci artinya bersifat public. Kelas CAboutDlg adalah kelas yang dimiliki oleh objek jendela about. Jendela ini akan muncul jika anda meng-click sub-menu about pada gambar icon aplikasi disebelah ujung kiri atas jendela utama--lihat gambar 23 ( Untuk merancang tampilan pada jendela tersebut, double click IDD_ABOUTBOX pada tab ResourceView --lihat gambar 24)
22
Tutorial Visual C++ untuk Aplikasi Akuisisi dan Monitoring Data secara Real Time http://iwan.blog.undip.ac.id
Gambar 22. Tiga kelas dasar pada aplikasi berbasis dialog.
Gambar 23. Jendela about.
23
Tutorial Visual C++ untuk Aplikasi Akuisisi dan Monitoring Data secara Real Time http://iwan.blog.undip.ac.id
Gambar 24. Jendela about.
Sedangkan CMy_oopApp adalah kelas dari objek aplikasi utama yang dipanggil secara otomatis oleh Windows (dalam banyak kasus perancangan, anda umumnya tidak akan menyentuh kelas ini), dan terakhir CMy_oopDlg adalah kelas dari objek komponen jendela dialog. Dalam pembuatan aplikasi, anda dipastikan akan selalu berhubungan dengan kelas terakhir ini. Terkait dengan penggunaan komponen Visual C++ pada aplikasi, berikut adalah sejumlah panduan penting yang dapat membantu perancangan program: 1. Anda perlu mengasosiasikan komponen sebagai sebuah objek (atau sebagai sebuah variabel), hanya jika nilai dari properties objek tersebut perlu dimanipulasi atau diakses saat aplikasi dijalankan. Sebagai contoh, komponen edit box yang kita tempatkan pada form dialog perlu diasosiasikan sebagai sebuah objek atau variabel karena komponen tersebut dalam program tentunya digunakan untuk menampilkan data (atau dalam kasus lain, data pada edit box harus dapat dibaca oleh program). Hal ini berbeda misalnya dengan komponen button:. Dalam banyak kasus, button yang ditempatkan pada jendela hanya difungsikan untuk pemicu event OnClick (untuk kepentingan praktis nilai propertiesnya tidak pernah diubah), sehingga dengan demikian button tersebut tidak perlu diasosiasikan sebagai objek. 2. Setiap objek dari komponen yang ditempatkan dalam jendela dialog, secara otomatis menjadi anggota kelas jendela dialog (hal yang sama berlaku juga pada fungsi-fungsi penanganan pesan atau event). Organisasi kelas dapat dilihat pada tab ClassView
24
Tutorial Visual C++ untuk Aplikasi Akuisisi dan Monitoring Data secara Real Time http://iwan.blog.undip.ac.id
3. Dalam Visual C++, sejumlah komponen standar selain dapat sebagai objek,
juga dapat diasosiasikan sebagai
disosiakan
sebuah variabel yang
memiliki tipe data tertentu. Contohnya komponen edit box: Didalam program, komponen tersebut secara praktis dapat kita asosiasikan sebagai objek berkelas CEdit (tidak praktis), atau dapat juga kita asosiasikan sebagai sebuah variabel bertipe sederhana yaitu seperti int, Long, Byte dsb (sangat disarankan). 4. Untuk mengasosiasikan sebuah komponen sebagai objek (atau variabel), caranya: pada jendela dialog, pilih komponen, click mouse kanan, pilih ClassWizard, click tab members variabel pada jendela MFC ClassWizard, sorot komponen dengan mouse, click tombol Add Variabel, isi nama variabel atau objek dan terakhir click tombol OK --kalau ditulis jadinya bertele-tele, jadi langsung aja dipraktekan, gampang kok..:) Tips Praktis Dan Saran Jika anda telah benar-benar paham dengan konsep objek, maka sampai tahap ini, anda sudah dapat membuat aplikasi yang relative lengkap dan “serius”. Buatlah project-project baru yang memanfaatkan berbagai komponen yang nanti sering anda gunakan dalam aplikasi akusisi dan monitoring data real time, yaitu komponen tombol, Stripchart, Portcontroller, slider dan sebagainya.
¾ Contoh-Contoh Aplikasi lengkap Project 1. Objective: Menampilkan data dari slider pada chart secara real time. Komponen yang diperlukan: Tombol, Stripchart, Slider Langkah: •
Rancang GUI, sehingga tampilan program akan nampak seperti gambar 25 (khusus untuk slider, anda gunakan Microsoft Slider Control 6 yang dapat
25
Tutorial Visual C++ untuk Aplikasi Akuisisi dan Monitoring Data secara Real Time http://iwan.blog.undip.ac.id
diakses pada jendela Insert ActiveX control –lihat gambar 26). Skenario program: chart akan mulai menampilkan data slider setelah anda meng-click tombol yang berlabel start, tombol berlabel stop digunakan untuk menghentikan program. •
Asosiasiakan komponen Slider control dan Stripchart sebagai sebuah objek dengan cara seperti telah dijelaskan sebelumnya (jika nanti ada peringatan dari windows, anda tekan saja OK)
Gambar 25. Tampilan Project 1.
Gambar 26. Komponen Slider Control pada jendela ActiveX Control
26
Tutorial Visual C++ untuk Aplikasi Akuisisi dan Monitoring Data secara Real Time http://iwan.blog.undip.ac.id
•
Setting beberapa nilai properties kedua komponen tersebut. misal data minmax slider memiliki jangkauan 0-100, dst.
•
Buat fungsi-fungsi penanganan button berlabel Start, button berlabel stop, dan komponen timer (disini timer digunakan untuk agar setiap selang waktu sekian ms-- misal 100 ms, program yang dirancang akan membaca nilai slider dan menampilkannya pada chart (lihat gambar 27)
•
Jika anda lakukan secara benar, ketika program dieksekusi dan tombol berlabel start ditekan maka setiap 100 ms aplikasi akan membaca slider dan menampilkannya pada char (lihat gambar 28)
Gambar 27. Fungsi-fungsi penanganan pesan
27
Tutorial Visual C++ untuk Aplikasi Akuisisi dan Monitoring Data secara Real Time http://iwan.blog.undip.ac.id
Gambar 28. Tampilan akhir program
Project 2. Objective: Komunikasi serial “sederhana. Komponen: Tombol, Edit box, PortControler Perangkat keras: RS232 dan kabel loop back Langkah: •
Rancang tampilan GUI seperti nampak pada gambar 29 dibawah: Skenario program : Ketika tombol berlabel send ditekan maka setiap angka (byte) pada edit box bawah akan dikirim keluar lewat serial, sedangkan edit box atas akan menampilkan data byte jika terjadi even DataReceive. Jika pin Rx TX (pin 2 dan 3) pada port RS232 anda short-kan, maka nantinya setiap angka byte yang anda kirim akan muncul juga pada edit box atas. Selain itu, disini dirancang juga, setiap data yang diterima (pada edit box atas) akan ditampilkan pada chart
28
Tutorial Visual C++ untuk Aplikasi Akuisisi dan Monitoring Data secara Real Time http://iwan.blog.undip.ac.id
Gambar 29. Tampilan Project 2.
•
Asosiasiakan komponen Edit box kiri dan kanan sebagai variabel bertipe data BYTE, dan komponen PortComp sebagai objek komunikasi (Hal yang sama anda lakukan terhadap komponen Stripchart).
•
Ketik Program penanganan setiap pesan: fungsi penanganan button send, stop monitor, timer dan event dataReceived (lihat gambar 30)
29
Tutorial Visual C++ untuk Aplikasi Akuisisi dan Monitoring Data secara Real Time http://iwan.blog.undip.ac.id
Gambar 30. Penanganan Pesan
•
Jangan lupa Inisialisasi timer dan port komunikasi serial-nya, tempatkan fungsi inisialisasi di OnInitDialog (lihat gambar 31)
Gambar 31. Inisialisasi port serial dan timer
30
Tutorial Visual C++ untuk Aplikasi Akuisisi dan Monitoring Data secara Real Time http://iwan.blog.undip.ac.id •
Jika anda melakukannya secara benar, maka ketika program dieksekusi akan memiliki tampilan seperti gambar 32. ketik byte pada box bawah , tekan tombol send, apa yang terjadi?
Gambar 32. Hasil eksekusi project 2
Project 3. Akan didemokan, project ini menampilkan data real time temperature, Kelembaban (RH) dan kadar CO2 dari modul DAQ berbasis microcontroller AVR yang telah penulis bangun. Protokol komunikasi nampak seperti dibawah.
Semoga Bermanfaat
31
Tutorial Visual C++ untuk Aplikasi Akuisisi dan Monitoring Data secara Real Time http://iwan.blog.undip.ac.id
Bahan Bacaan Antony Pranata, Pemrograman Delphi 6 , 1996
Keterangan: 1. File
lib
dan
file
contoh
project
dapat
anda
download
di
http://iwan.blog.undip.ac.id 2. Informasi yang berkaitan dengan penggunaan Portcontroller dapat anda lihat di
http://www.scientificcomponent.com
32