2013-12-09 2 views
1

Я разрабатываю немного программное обеспечение, которое требует подключения к rs232 с периферийным ...как писать на rs232 связи

Я скачал последнюю версию VERSIONE библиотеки RxTx и, с того же сайта, используя класс TwoWaySerialComm общаться через последовательный кабель

http://rxtx.qbang.org/wiki/index.php/Event_based_two_way_Communication

import gnu.io.CommPort; 
import gnu.io.CommPortIdentifier; 
import gnu.io.SerialPort; 

import java.io.FileDescriptor; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 

public class TwoWaySerialComm 
{ 
    public TwoWaySerialComm() 
    { 
     super(); 
    } 

    void connect (String portName) throws Exception 
    { 
     CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(portName); 
     if (portIdentifier.isCurrentlyOwned()) 
     { 
      System.out.println("Error: Port is currently in use"); 
     } 
     else 
     { 
      CommPort commPort = portIdentifier.open(this.getClass().getName(),2000); 

      if (commPort instanceof SerialPort) 
      { 
       SerialPort serialPort = (SerialPort) commPort; 
       serialPort.setSerialPortParams(57600,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE); 

       InputStream in = serialPort.getInputStream(); 
       OutputStream out = serialPort.getOutputStream(); 

       (new Thread(new SerialReader(in))).start(); 
       (new Thread(new SerialWriter(out))).start(); 

      } 
      else 
      { 
       System.out.println("Error: Only serial ports are handled by this example."); 
      } 
     }  
    } 

    /** */ 
    public static class SerialReader implements Runnable 
    { 
     InputStream in; 

     public SerialReader (InputStream in) 
     { 
      this.in = in; 
     } 

     public void run() 
     { 
      byte[] buffer = new byte[1024]; 
      int len = -1; 
      try 
      { 
       while ((len = this.in.read(buffer)) > -1) 
       { 
        System.out.print(new String(buffer,0,len)); 
       } 
      } 
      catch (IOException e) 
      { 
       e.printStackTrace(); 
      }    
     } 
    } 

    /** */ 
    public static class SerialWriter implements Runnable 
    { 
     OutputStream out; 

     public SerialWriter (OutputStream out) 
     { 
      this.out = out; 
     } 

     public void run() 
     { 
      try 
      {     
       int c = 0; 
       while ((c = System.in.read()) > -1) 
       { 
        this.out.write(c); 
       }     
      } 
      catch (IOException e) 
      { 
       e.printStackTrace(); 
      }    
     } 
    } 

    public static void main (String[] args) 
    { 
     try 
     { 
      (new TwoWaySerialComm()).connect("COM3"); 
     } 
     catch (Exception e) 
     { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
} 

Теперь, мол, я должен отправить текст «STX 1000 T ETX» на устройство, как мне сделать это?

Благодаря

ответ

0

Пример вы следовали для написания все, что вы вводите в консоль (System.in), к последовательному порту. Вам нужно будет изменить свою программу, чтобы вы могли выводить определенные строки вместо того, что вы вводите. Возможные решения слишком разнообразны, чтобы дать ответ здесь, и для этого требуется наличие хотя бы некоторого фона в программировании на Java.

В начале, хотя, рассмотреть вопрос о создании нового класса что-то вроде этого:

public class MyCustomSerialWriter 
{ 
    OutputStream out; 

    public SerialWriter (OutputStream out) 
    { 
     this.out = out; 
    } 

    public void writeString (String str) 
    { 
     try { 
      this.out.write(str.getBytes(Charset.forName("ASCII")); 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     }    
    } 
} 

Вы можете вызвать его из вашего основного метода для вывода любой строки вы хотите.

Смежные вопросы