我正在尝试使用javax.comm
通过串行端口从计算机与电路板进行通信。我编写了一个程序(基于SimpleRead
和SimpleWrite
示例),该程序将从设备接收任何数据并将其打印到System.out
并将任何行输入System.in
并将其发送到设备,然后是\r\n
。
设备有一个帮助功能,我用它来测试通信(发送hlp
,设备回复一个命令列表)。当我第一次发送hlp
时,我得到了预期的响应,但第二次发送hlp
时,我看不到任何回复。
这是javax.comm
的已知问题吗?或者是否需要在消息之间查找并发送到我的设备的某种新消息启动命令?
我正在使用运行Windows XP的东芝笔记本电脑。
我已将电路板连接到示波器,并且“发送数据”测试点在发送第一个hlp
时改变电压(这是我在程序中看到文本响应的时候。但是“发送数据”测试point不会改变电压以响应第二个和后续消息(当我看不到文本响应时)。因此我很确定问题是我的程序没有正确发送数据(而不是我的程序没有正确接收响应)。
我的课程的阅读和写作方法:
public void run() {
try {
InputStreamReader converter = new InputStreamReader(System.in);
BufferedReader in = new BufferedReader(converter);
String s = in.readLine();
s = s+"\r\n";
serialPort.getOutputStream().write(s.getBytes());
serialPort.getOutputStream().flush();
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void serialEvent(SerialPortEvent event) {
switch(event.getEventType()) {
case SerialPortEvent.BI:
case SerialPortEvent.OE:
case SerialPortEvent.FE:
case SerialPortEvent.PE:
case SerialPortEvent.CD:
case SerialPortEvent.CTS:
case SerialPortEvent.DSR:
case SerialPortEvent.RI:
case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
break;
case SerialPortEvent.DATA_AVAILABLE:
byte[] readBuffer = new byte[100];
byte[] actualBytes = null;
try {
while (inputStream.available() > 0) {
int numBytes = inputStream.read(readBuffer);
actualBytes = new byte[numBytes];
for(int i =0; i < numBytes; i++){
actualBytes[i] = readBuffer[i];
}
}
System.out.print(new String(actualBytes));
} catch (IOException e) {}
break;
}
}