2016-10-24 18 views
0

외부 장치와 시리얼 포트 통신을 위해 jssc 라이브러리를 사용하는 Java 응용 프로그램을 개발 중입니다. 나는 명령을 보낼 필요가 있고 즉시 응답을 다시 읽는다. 내가 직면 한 문제는 쓰기와 읽기 명령 사이에 200ms 지연이 없으면 응답이 비어 있다는 것입니다. 파이썬을 사용하여 유사한 기능을 개발했으며 파이썬에서는 완벽하게 작동하지만 Java에서 200 밀리 초 지연 때문에 통신 속도가 매우 느립니다. 빨리 할 수있는 가능성이 있는지 묻고 싶습니다. 나는 노력하고 있었고, 개통 항구를 폐쇄하고 있었다. 그러나 어떤 성공도하지 않고 있었다. 당신의 도움에 미리 감사드립니다. 당신은 내가 JSSC이 javax의 통신 API를 javax.comm을 기반으로 생각하는 내 코드자바를 사용하여 쓰기와 읽기 작업 사이에 큰 지연이 발생 함 시리얼 통신 jssc 라이브러리

serialPort = new SerialPort(getPortName()); 

     if (false == serialPort.isOpened()) { 
      try { 

       logger.debug("Opening serial port: " + getPortName()); 
       // Open port 
       serialPort.openPort(); 
       // We expose the settings. You can also use this line - serialPort.setParams(9600, 8, 1, 0); 
       serialPort.setParams(SerialPort.BAUDRATE_115200, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, 
         SerialPort.PARITY_NONE); 
      } catch (SerialPortException ex) { 
       logger.error("Exceptiion during opening port: " + ex); 
      } 
     } 
serialPort.writeBytes(cmd); 
      logger.debug("command sended=" + javax.xml.bind.DatatypeConverter.printHexBinary(cmd)); 
      // delay added because java didn`t read data at once 
      Thread.sleep(200); 

      answer = serialPort.readBytes(); 

답변

0

을 찾을 수 있습니다 울부 짖는 명령을 전송 한 후 응답을 읽는 동안,이 API는 200ms의 지연을 가지고 ... 내가 생각하는 그게 왜 당신을 200ms 전에 읽으려고 할 때 응답을 얻지 못했습니다 ...

이것은 내 출력 시간입니다.이 지연에 대한 해결책을 찾으려고 노력하고 있습니다. 통신을 위해 직렬 통신을 사용하고 있습니다. ESP8266

2016-11-08 12:32:31.155[INFO]Starting the receiver 2016-11-08 12:32:31.355[INFO]Receives first char 200ms after..

위스콘신과 몇 가지 시도해보고 해결책이 있다면 게시하십시오 ... 누군가가 해결책을 찾은 경우 여기에 게시하십시오.

설정하는 속성이 ------------- 모두 javax의 COMMS의 API에서

(모든 의견에 StackOverflow에 메신저 새로운 죄송합니다)

------- UDATE 독자가 데이터를 기다리는 시간은 기본적으로 200ms로 설정되어 있습니다 (너무 많이 추측합니다). 원하는 wichever 값으로 설정할 수 있지만 데이터가 도착한 후 읽을 수는 있습니다. (1)는 응답 바이트로이와

  port = (javax.comm.SerialPort) portId.open(String.valueOf(this), (int) timeout); 
      port.setSerialPortParams(freq, dataBits, stopBits, parity); 
      port.enableReceiveTimeout(0); 

와 내가 3 ms 이하의 응답을 얻었다 내 코드의 작은 reprograming, 나는 JSSC에서 어떤 일이 일어나고 비슷한 것 같아요.

2016-11-08 01:43:32.875[DEBUG]Starting the receiver 2016-11-08 01:43:32.878[DEBUG]Receives first char 3ms after

+0

좋아 200 밀리로 설정되어 기본적으로 ... 직렬 포트를 얻을 때 데이터가 도착할 때까지 당신이 기다리는 시간을 설정할 수 javax.comms를 사용하여 나를 위해 그것을 해결 뭔가를 (발견 너무 많은 것 같아요) 당신이 원하는 값으로 설정할 수 있습니다 ...하지만 데이터가 도착하기 전에 미리 읽으십시오. JSSC를 통해이 속성을 사용할 수 있는지는 모르겠지만 한 번 살펴보고 알려주십시오. – Mjkhajl

+0

재산을 잊어 버렸습니다 : – Mjkhajl

+0

javax.comm.SerialPort.enableReceiveTimeout받는 값은 밀리 초입니다. – Mjkhajl