最近研究java 串口编程发现三个最关键的地方:
1、设置硬件特性
设置不当,问题大,但这一块细心点据参数来初始化串口即可解决。
2、数据接收模式
java串口编程接收模式似于是固定的。
public void startReadingDataThread() {
Thread readDataProcess = new Thread(new Runnable() {
public void run() {
while (newData != -1) {
try {
newData = is.read();
System.out.println(newData);
//其他的处理过程
……….
} catch (IOException ex) {
System.err.println(ex);
return;
}
}
readDataProcess.start();
}
这种模式。我写的比这复杂一点,但参不多。
3、串口数据接收超时问题
你的串口是否支持超时设置,这取决于 dll和串口驱动,目前的串口都支持超时模式。
comm.jar默认是不支持超时模式的,需要使用serialPort.enableReceiveTimeout(86400000);进行设置,下面这段代码测试是否支持串口超时,输出 true为支持
public static void main(String[] args)throws Exception{
ComReceive com=new ComReceive();
com.setFrequency(19200);
com.setOpenTimeOut(60);
com.port="COM12";
com.init();
serialPort.enableReceiveTimeout(6000);//六秒,设置串口接收超时时间
System.out.println(serialPort.isReceiveTimeoutEnabled());
}
1、设置硬件特性
设置不当,问题大,但这一块细心点据参数来初始化串口即可解决。
2、数据接收模式
java串口编程接收模式似于是固定的。
public void startReadingDataThread() {
Thread readDataProcess = new Thread(new Runnable() {
public void run() {
while (newData != -1) {
try {
newData = is.read();
System.out.println(newData);
//其他的处理过程
……….
} catch (IOException ex) {
System.err.println(ex);
return;
}
}
readDataProcess.start();
}
这种模式。我写的比这复杂一点,但参不多。
3、串口数据接收超时问题
你的串口是否支持超时设置,这取决于 dll和串口驱动,目前的串口都支持超时模式。
comm.jar默认是不支持超时模式的,需要使用serialPort.enableReceiveTimeout(86400000);进行设置,下面这段代码测试是否支持串口超时,输出 true为支持
public static void main(String[] args)throws Exception{
ComReceive com=new ComReceive();
com.setFrequency(19200);
com.setOpenTimeOut(60);
com.port="COM12";
com.init();
serialPort.enableReceiveTimeout(6000);//六秒,设置串口接收超时时间
System.out.println(serialPort.isReceiveTimeoutEnabled());
}