2013-09-30 70 views
1

我使用Java進行編程以與連接到COM端口的設備(通過USB連接到PC,但通過RS232到USB電纜連接)進行通信。我寫了一個與jssc交談的程序,並且在Windows下正常工作,即使在沒有任何事情發生時它也會繼續工作更長時間,就像它應該一樣。在Linux下,程序在2分鐘或3分鐘後停止響應,我不知道爲什麼。jssc writebytes在linux上停止工作一段時間後

運行語句如下

public void run() { 
    while (stayConnected) { 
     try { 
      serialPort.writeBytes(pollBuf); 
      readResponse(false); 
      Thread.sleep(400); 
      serialPort.writeBytes(readEvents); 
      readResponse(true); 
     } catch (InterruptedException ie) { 
      logger.error("Interrupted exception: " + ie.getMessage()); 
     } catch (SerialPortException spe) { 
      logger.error("SerialPortException: " + spe.getMessage()); 
     } 
    } 
} 

要知道那裏的程序掛起我已經添加loglines和我發現的最後一個命令才能正常工作是readResponse(真)最後一次通話和首先停止返回是serialPort.writeBytes(pollBuf)。 希望它能解決這個問題,我將400毫秒的睡眠分成兩部分,並在serialPort.writeBytes(pollBuf)之前放置另一個睡眠。這沒有幫助。不知何故,serialPort.writeBytes函數永遠不會返回,也不會拋出異常。

有沒有人猜測失敗可能是什麼?這不是stayConnected布爾值,因爲我從來沒有調用函數,但它設置爲false;

編輯:我只是增加了一個計數器和程序進入環路283和285倍,當我跑了兩次,這是相當密切,雙方約2分鐘......

回答

1

我有一個在Windows 7下非常類似的問題。我已將我的軟件部署到客戶端PC,並且在大約5到6小時後,串行端口可以打開但無法寫入。

作爲每例如我的代碼是相似的:

字符串readPort(字符串命令,INT byteToRead){

String Input = null; 
    if (opened == true) { 
     try { 
      serialPort.writeString(command); 

      Input = serialPort.readString(byteToRead); 

     } catch (SerialPortException ex) { 
      System.out.println(ex); 
     } 
    } 

    return Input; 
} 

的代碼行不返回是

serialPort.writeString (命令);

0

我有完全相同的問題,原因是另一個線程關閉端口,而主要的還在閱讀,我看你的代碼片段是關於一個Runnable,所以仔細檢查你的多線程管理。

相關問題