Tampilkan postingan dengan label komputer. Tampilkan semua postingan
Tampilkan postingan dengan label komputer. Tampilkan semua postingan

Sabtu, 28 Juli 2012

Program Kirim dan Terima data via Serial Port Sederhana- Belajar JAVA

Serial port merupakan sebuah port yang terdapat pada komputer/laptop yang dapat digunakan sebagai jalur komunikasi antara komputer/laptop dengan hardware lainnya seperti mikrokontroller dan lain sebagainya.
pada postingan kali ini, saya akan coba berbagi tentang program sederhana yang dapat menerima dan mengirim data melalui komunikasi serial.

untuk dapat melakukan komunikasi serial, dibutuhkan sebuah library yaitu RxTx yang mana telah saya bahas mengenai cara instalasinya disini dan cara menambahkan pada project yang kita buat seperti postingan yang ada disini.

Secara umum, komunikasi yang menggunakan serial port pasti akan melalui langkah-langkah berikut ini :
  • Pencarian port serial
  • Koneksi ke port serial
  • inisialisasi  input dan output stream
  • Memutuskan koneksi port serial
  • Kirim data
  • Terima data
sekarang akan coba dibahas sedikit mengenai program pada aplikasi kirim dan terima data serial ini.

1. Pencarian port serial

berikut ini program untuk mencari port serial yang sedang aktif pada komputer/laptop

public void cekSerialPort() {
        port = CommPortIdentifier.getPortIdentifiers();
        while (port.hasMoreElements()) {
            CommPortIdentifier curPort = (CommPortIdentifier) port.nextElement();
            if (curPort.getPortType() == CommPortIdentifier.PORT_SERIAL) {
                window.jCommPort.addItem(curPort.getName());
                portMap.put(curPort.getName(), curPort);
            }
        }
    }

 
pada program diatas, program akan mengecek setiap port yang aktif pada komputer, yang kemudian port-port tersebut akan dicek tipe nya dengan menggunakan .getPortType(). Jika port tersebut merupakan port serial, maka identitas port tersebut akan didaftarkan atau ditambahkan pada comboBox pada tampilan GUI.

2. Koneksi Port Serial
 
public void connect() {
        String selectedPort = (String) window.jCommPort.getSelectedItem();
        portIdentifier = (CommPortIdentifier) portMap.get(selectedPort);
        CommPort commPort = null;
        try {
            commPort = portIdentifier.open(null, TIMEOUT);
            serialPort = (SerialPort) commPort;
            setConnected(true);
            window.bConn.setText("Disconnect");
        } catch (PortInUseException e) {
            statusPort = selectedPort + " is in use. (" + e.toString() + ")";
            JOptionPane.showMessageDialog(null, statusPort);
        } catch (Exception e) {
            statusPort = "Failed to open " + selectedPort + "(" + e.toString() + ")";
            JOptionPane.showMessageDialog(null, statusPort);
        }
    }
 
Program diatas digunakan untuk membuka koneksi dengan serial port yang sebelumnya telah ditentukan dengan cara memilih salah satu serial port yang tersedia pada comboBox. perintah yang digunakan untuk membuka koneksi adalah .open()

3.  Inisialisasi  input/output stream

public boolean initIOStream() {
        boolean successful = false;
        try {
            inPut = serialPort.getInputStream();
            outPut = serialPort.getOutputStream();
           
            successful = true;
            return successful;
        } catch (IOException e) {
            statusPort = "I/O Streams failed to open. (" + e.toString() + ")";
            JOptionPane.showMessageDialog(null, statusPort);
            return successful;
        }
}

program ini akan menginisialisasi input/output stream yang nantinya digunakan untuk menampung data yang masuk ataupun data yang akan dikirim kan dari aplikasi menuju perangkat lainnya.


4. Memutuskan koneksi serial
 
public void disconnect() {
         try {
            serialPort.removeEventListener();
            serialPort.close();
            inPut.close();
            setConnected(false);
            statusPort = "PORT disconnect successfully";           
            JOptionPane.showMessageDialog(null, statusPort);
            window.bConn.setText("Connect");
        } catch (Exception e) {
            statusPort = "Failed to close " + serialPort.getName() + "(" + e.toString() + ")";
            JOptionPane.showMessageDialog(null, statusPort);
        }
    }

 
Program tersebut akan memutuskan koneksi antara port serial dengan aplikasi. pada saat memutuskan koneksi serial port harus di tutup dengan menggunakan perintah .close(), begitu juga dengan input/output stream nya.

5. Kirim Data Serial
 
public void kirimData(Byte a){
        try {
            outPut.write(a);
            outPut.write(10);
            outPut.flush();
        } catch (IOException ex) {
            System.out.println("Kirim Gagal");
        }
    }

 
Program diatas akan mengirimkan data serial. tipe data yang bisa dikirimkan berupa "Byte" dan "Integer". pengiriman dilaksanakan saat ada perintah .write(a), kemudian .flush() digunakan untuk mengosongkan kembali outputstream.


6. Terima Data Serial

untuk dapat menerima data serial setiap saat, maka dimanfaatkan event yang khusus menangani data serial yang masuk. berikut merupakan program untuk inisialisasi event beserta program event yang menangani data serial yang masuk ke aplikasi.
 
public void initListener() {
        try {
            serialPort.addEventListener(this);
            serialPort.notifyOnDataAvailable(true);
        } catch (TooManyListenersException e) {
            JOptionPane.showMessageDialog(null, e.toString());
        }
    }

    public void serialEvent(SerialPortEvent evt) {
        char dataSerial = 0; // Untuk menampung input dari serial port
        
        if (evt.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
            try {
                dataSerial = (char) inPut.read();
                window.txtDataIn.setText(String.valueOf(dataSerial));              
            } catch (IOException ex) {
                JOptionPane.showMessageDialog(null, ex.toString());
            }
        }
    }

 
 
contoh tampilan aplikasi yang saya buat :



saat aplikasi dijalankan maka tampilan awal aplikasi adalah sebagai berikut :



setelah tulisan "Search Port" ditekan maka tampilan akan berubah sebagai berikut :



untuk mengkoneksikan aplikasi dengan serial port, arahkan kursor ke tombol "connect" kemudian klik tombol tersebut. setelah itu jika berhasil terkoneksi maka tampilan aplikasi akan sebagai berikut :



Jika koneksi gagal, maka akan muncul messageBox yang menjelaskan penyebab gagalnya koneksi.
untuk memutuskan koneksi tekan saja tombol "Disconnect".

Saat aplikasi telah terkoneksi dengan serial port, maka aplikasi dalam posisi stand by menerima data serial yang mana setiap data yang diterima akan ditampilkan pada textBox. untuk mengirim data, tekan saja tombol kirim data. pada aplikasi ini jika tombol kirim data ditekan, maka aplikasi akan mengirimkan data "a".


Aplikasi lengkapnya dapat anda download disini.


Semoga bermanfaat..... :)

Selasa, 24 Juli 2012

Instalasi Library RxTx - Komunikasi Serial JAVA

Bahasa pemrograman JAVA juga mendukung komunikasi serial yang melalui serial port. Untuk dapat melakukan komunikasi serial tersebut bisa menggunakan/memanfaatkan salah satu library yaitu RxTx.

library tersebut mendukung komunikasi serial yang diterapkan pada sebuah program berbasis JAVA. Library ini juga bisa digunakan dibeberapa platform seperti Linux, Solaris dan windows. Pada postingan kali ini, saya akan coba berbagi mengenai cara instalasi library RxTx pada windows. Hal itu dikarenakan pada saat penggunaan library ini, saya menggunakan sistem operasi windows.

sebelumnya, silahkan download terlebih dahulu library RxTxComm.Jar nya disini.

selain itu, diperlukan juga RxTxSerial.dll yang dapat anda download disini.

setelah didownload, copy / pindahkan file RxTxComm.Jar nya ke "\JAVA_HOME\lib\ext". (\JAVA_HOME\ adalah folder dimana anda menginstal JRE pada komputer/sistem. contohnya : "C:\Program Files\Java\jdk1.7.0_01\jre\lib\ext")

Kemudian pindahkan juga file RxTxSerial.dll ke "\JAVA_HOME\bin" (cth : "C:\Program Files\Java\jdk1.7.0_01\jre\bin")

proses instalasi ini cukup dilakukan sekali saja. yang dilakukan berulang-ulang ialah saat penambahan library RxTxComm.JAR pada project baru yang akan dibuat dan menggunakan komunikasi serial. Jika proses instalasi ini tidak dilakukan maka akan timbul pesan error seperti berikut ini :

java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path thrown while loading gnu.io.RXTXCommDriver Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path

untuk menambahkan library ke project baru anda dapat membaca langkah - langkahnya disini

salah satu contoh program kompleks nya dapat anda lihat disini.

Semoga bermanfaat.... :)

Minggu, 15 April 2012

TUGAS : Pemrograman komputer IAS


Soal :
Buat program pada komputer IAS sebgai berikut :
-          Kalikan data di memori alamat 0551 dan data dimemori alamat 0552
-          Simpan hasil perkalian tersebut dimemori (MSB di alamat 0556 dan LSB dialamat 0557)
-          Jumlahkan data LSB hasil perkalian tersebut dengan isi memori 0553
-          Simpan hasil penjumlahan tersebut di alamat 0559
-          Program Counter ada dimemori 0011

1.      Buat program komputer IAS nya
2.      Gambar peta memori, perlihatkan isinya, dimana program dan data diletakkan
3.      Tulias urutan instruction cyclenya

Jawaban :
     1.      Program komputer IAS


2.   Gambar peta memori


3.   Instruction cycle

1.      Instruction cycle 1
Fetch 1 :
·         PC = 0011
·         PC MAR
·         M(MAR) MBR
·         MBR(20:39) IBR
·         MBR(0:7) IR                        : IR = LOAD to MQ
·         MBR(8:19) MAR                 : MAR = 0551
Execute 1:
·         M(0551) MBR                     : MBR = M(0551) = A
·         MBR → MQ                             : MQ = A

2.      Instruction cycle 2
Fetch 2 :
·         IBR (0:7) IR                         : IR = MUL
·         IBR (8:19) → MAR                  : MAR = M(0552)
·         PC = PC + 1
Execute 2 :
·         M(0552) MBR                     : MBR = MAR(0552) = B
·         MSB(MBR*MQ) AC          : AC = MSB(MBR*MQ)
LSB(MBR*MQ) MQ          : MQ = LSB(MBR*MQ)

3.      Instruction cycle 3
Fetch 3 :
·         PC MAR                              : MAR = PC = 0012
·         M(MAR) MBR                     : MBR = M(0012)
·         MBR(0:7) IR                        : IR = STOR
·         MBR(8:19) MAR                 : MAR = M(0556)
·         MBR(20:39) IBR
Execute 3 :
·         AC MBR                              : MBR = AC = MSB(M(0552)*MQ)
·         MBR M(MAR)                     : M(0556) = MBR

4.      Instruction cycle 4
Fetch 4 :
·         IBR (0:7) IR                         : IR = LOAD MQ to AC
·         PC = PC + 1
Execute 4 :
·         MQ AC                               : AC = MQ = LSB(MQ*M(0552))

5.      Instruction cycle 5
Fetch 5 :
·         PC MAR                              : MAR = PC = 0013
·         M(MAR) MBR                    : MBR = M(0013)
·         MBR(0:7) IR                        : IR = STOR
·         MBR(8:19) → MAR                 : MAR = M(0557)
·         MBR(20:39) IBR
Execute 5 :
·         AC MBR                              : MBR = AC = LSB(M(0552)*MQ)
·         MBR M(MAR)                     : M(0556) = MBR

6.      Instruction cycle 6
Fetch 6 :
·         IBR (0:7) IR                         : IR = ADD
·         IBR (8:19) MAR                  : MAR = M(0553)
·         PC = PC + 1
Execute 6 :
·         M(0553) MBR                    : MBR = MAR(0553) = B
·         MBR + AC AC

7.      Instruction cycle 7
Fetch 7 :
·         PC MAR                              : MAR = PC = 0014
·         M(MAR) → MBR                    : MBR = M(0014)
·         MBR(0:7) IR                        : IR = STOR
·         MBR(8:19) MAR                 : MAR = M(0559)
Execute 7 :
·         AC MBR                              : MBR = AC
·         MBR M(MAR)                     : M(0559) = MBR