0
我的項目使用JSSC庫連接PC和微控制器。從COM端口異步讀取(使用JSSC庫)
Write方法:
public void write(byte[] buffer) throws SerialPortException {
if (serialPort.isOpened())
serialPort.writeBytes(buffer);
}
Read方法:
public byte[] read() throws SerialPortException {
byte[] result = null;
FutureTask<byte[]> task = new FutureTask<>(new PortReader());
ExecutorService executor = Executors.newSingleThreadExecutor();
try {
result = (byte[]) executor.submit(task).get(1000, TimeUnit.MILLISECONDS);
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
} catch (TimeoutException e) {
System.err.println(getClass().getSimpleName() + " READ: Timeout exception!");
}
return result;
}
private class PortReader implements Callable<byte[]>, SerialPortEventListener {
private byte[] data = null;
@Override
public void serialEvent(SerialPortEvent event) {
if (event.isRXCHAR() && event.getEventValue() > 0) {
try {
data = serialPort.readBytes(event.getEventValue());
} catch (SerialPortException e) {
e.printStackTrace();
}
}
}
@Override
public byte[] call() throws Exception {
if (data == null)
Thread.sleep(200);
return data;
}
}
我試圖執行一個同步寫入(立即發送數據)發送給端口和異步讀取(等待至少所述輸入數據1000毫秒)從端口。
這是正確的決定嗎?也許還有其他的異步數據讀取方式?
謝謝!
對於我編輯中的破壞評論,我感到抱歉。在完成之前我不小心敲了回車鍵,我不能再編輯這個評論,所以我會在這裏輸入它:「請僅使用[com]標籤來詢問關於微軟的」組件對象模型「的問題。端口應該用[串口]標記,而不是「。祝你好運。 –