Teknik Elektro LinksBarrier-Gate & Turnstile Interface, Thermostat, Relay Driver, Microcontroler Board

Contoh Penggunaan Timer Untuk Polling Masukan Dari Modul Input Port USB

USB-2R3IO Bahasa C GUI

Polling adalah cara mendeteksi perubahan kondisi masukan (input) yang dilakukan dengan cara membaca secara terus-menerus masukan. Secara pemrograman, polling bisa dilakukan dengan menggunakan perulangan yang akan berhenti jika kondisi masukan mengalami perubahan seperti yang dikehendaki (busy-wait) seperti contoh berikut ini.

motor_tutup_pintu = on;  //motor on ...
while (pintu == terbuka) //selama pintu terbuka.
{
   pintu = baca_sensor_pintu();
}
motor_tutup_pintu = off; //pintu tertutup, motor off.

Penggunaan polling seperti contoh di atas sah-sah saja dilakukan pada sistem single-process atau single-purpose dimana sistem tidak perlu melakukan tugas lain selama menunggu perubahan kondisi masukan.

Namun demikian, jika kecepatan prosesnya cukup cepat, maka program bisa melakukan hal lain selain hanya membaca kondisi masukan, misalnya melakukan update tampilan seperti contoh berikut ini.

while (1)
{
   if (Serial.available())
   {
      kar = baca_karakter();
      switch (kar)
      {
         case '1': ngapain_1();
         case '2': ngapain_2();
      }
   }
   update_tampilan();  //hal lain
}

Pada contoh kedua, program melakukan polling pada masukan port serial dan melakukan update tampilan pada perulangan yang sama. Hal ini sah-sah saja selama kecepatan proses masih cukup cepat dan tidak mengganggu kinerja sistem secara keseluruhan. Model polling secara pemrograman seperti contoh di atas disebut juga software-driven IO.

Polling Dengan Timer

Proses polling masukan juga bisa dilakukan dengan menggunakan timer. Cara ini masih masuk kategori software-driven IO, belum masuk kategori interrupt-driven IO. Pada sistem operasi multitasking saat ini, polling menggunakan timer adalah cara yang paling rasional (mudah) untuk tipe masukan dengan perubahan yang lambat seperti tombol, sensor proximity, limit-switch, sensor suhu/kelembaban dan lain-lain.

Dan sesuai dengan judul di atas, maka pada tulisan ini akan saya bagikan contoh penggunaan timer untuk polling membaca masukan dari port USB, tentunya menggunakan salah satu produk USBinov yakni USB-2R3IO. Bahasa pemrograman yang saya gunakan dalam hal ini adalah Bahasa C pada sistem operasi Windows. Kompiler yang saya gunakan adalah kompiler freeware bernama Pelles C.

USB-2R3IO

Sebelum masuk ke contoh pemrograman, ada baiknya saya perkenalkan terlebih dahulu mengenai modul USB-2R3IO

USB-2R3IO 300x225USB-2R3IO adalah modul antarmuka USB yang memiliki 2 buah relay sebagai output dan 3 buah GPIO yang masing-masing GPIO bisa difungsikan sebagai input atau output. Default fungsi GPIO adalah sebagai input.

USB-2R3IO membutuhkan catudaya DC 5V. Tegangan bisa dari catudaya eksternal seperti adaptor atau mengambil catudaya dari port USB (USB Powered).

Cuplikan Program Timer

Berikut adalah cuplikan kode program timer dan event-handler timer yang aktif setiap kali timer mencapai batas nilai intervalnya.

USB Polling Timer

Pada program C di atas, Timer1 diset dengan interval 100ms yang berarti event timer akan muncul 10 kali dalam 1 detik. Atau dengan kata lain program akan membaca kondisi masukan pada USB-2R3IO sebanyak 10 kali dalam 1 detik.

Pengesetan timer dilakukan pada bagian event-handler untuk pesan WM_INITDIALOG dengan perintah:

Timer1 = SetTimer(hwndDlg, Timer1, 100, NULL);

Kita bisa mengeset timer dengan interval yang lebih cepat bilamana diperlukan. Dengan mengeset interval timer menjadi 10 misalnya, maka program akan membaca masukan sebanyak 100 kali dalam 1 detik.

Setiap kali interval timer terlampaui (muncul event timer), sistem operasi akan membangkitkan pesan WM_TIMER. Pada bagian event-handler inilah program melakukan pembacaan masukan dan kemudian melakukan update tampilan. Program akan mengeset teks komponen edit dengan nilai “OPEN” jika kondisi masukan tidak aktif atau nilai “CLOSE” jika kondisi masukan aktif.

case WM_TIMER:
  if (POLLING==TRUE) {
    nBytes = usb_control_msg(handle, USB_TYPE_VENDOR |
      USB_RECIP_DEVICE | USB_ENDPOINT_IN, USB2RIO_INPUT, 0,
      0, (char *)buffer, sizeof(buffer), 5000);
  if (nBytes<0) MessageBox(hwndDlg, usb_strerror(),
      "Error!", MB_ICONINFORMATION);
    else {
      if (buffer[0]=='L')
        SetDlgItemText(hwndDlg, ID_EDIT_IO1, "CLOSE");
      else if (buffer[0]=='H')
        SetDlgItemText(hwndDlg, ID_EDIT_IO1, "OPEN");
      if (buffer[1]=='L')
        SetDlgItemText(hwndDlg, ID_EDIT_IO2, "CLOSE");
      else if (buffer[1]=='H')
        SetDlgItemText(hwndDlg, ID_EDIT_IO2, "OPEN");
      if (buffer[2]=='L')
        SetDlgItemText(hwndDlg, ID_EDIT_IO3, "CLOSE");
      else if (buffer[2]=='H')
        SetDlgItemText(hwndDlg, ID_EDIT_IO3, "OPEN");
    }
  }
  return TRUE;

Perlu diperhatikan juga bahwa pembacaan dan update tampilan akan dieksekusi hanya bila nilai variabel POLLING bernilai TRUE. Hal ini saya lakukan sebagai contoh bahwa pembacaan masukan dapat dilakukan secara manual menggunakan klik pada tombol atau secara otomatis menggunakan timer. Jadi ketika POLLING bernilai TRUE, maka proses polling menggunakan timer akan dilakukan. Jika POLLING bernilai FALSE, maka proses polling menggunakan timer akan dihentikan.

Adapun tampilan program antarmuka modul USB-2R3IO secara keseluruhan adalah sebagai berikut.

USB-2R3IO Bahasa C GUI

 

Proses polling menggunakan timer bisa diaktifkan dengan mencentang CheckBox Polling On. Ketika checkbox ini dicentang, maka variabel POLLING akan bernilai TRUE (polling dengan timer aktif). Dan sebaliknya, jika checkbox ini tidak dicentang, maka variabel POLLING akan bernilai FALSE.

Berikut adalah cuplikan rutin (event-handler) untuk pesan klik pada checkbox Polling On.

case ID_CBOX_POLLING:
  if (POLLING==FALSE)
  {
    POLLING = TRUE;
  }
  else
  {
    POLLING = FALSE;
  }
  return TRUE;

Aplikasi

Modul USB-2R3IO telah diaplikasikan oleh beberapa user pada sistem parkir otomatis. Dengan modul ini, program dapat mendeteksi ketika tombol tiket ditekan dan dapat mendeteksi ketika sensor kendaraan aktif. Skenario sederhananya begini, ketika sensor kendaraan aktif dan terdeteksi adanya penekanan tombol tiket, maka program akan melakukan pencetakan tiket parkir dan kemudian membuka portal dengan mengirimkan pemicuan pada panel portal melalui kontak relay USB-2R3IO.

Menurut laporan dari salah satu pelanggan kami asal Surabaya, mereka mengaplikasikan USB-2R3IO sejak 2014 yang lalu pada sistem parkir terpadu pada beberapa area parkir dengan jumlah mobil per hari 3000 – 8000 mobil. Berikut adalah foto panel sistem parkir yang mereka bagikan kepada saya.

panel_parking1

panel_parking2

Untuk area parkir dengan jumlah mobil kisaran 3000, modul USB-2R3IO tidak mengalami masalah sama sekali. Dan untuk area parkir dengan jumlah mobil kisaran 8000, modul USB-2R3IO sempat mengalami kegagalan kerja 2-3 kali dalam sehari. Dan menurut analisa kami adalah karena konektor catudaya yang kurang mantap saja.

Nah, demikianlah sekelumit tentang contoh program penggunaan timer untuk proses polling membaca masukan. Semoga ada guna dan manfaatnya.

Terima kasih sudah membaca dan selamat berkarya.

Add a Comment

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>