RXTX在Win10上不能使用,一调用write就报错。RXTX已经超过10年没有更新了。我觉得是Win10的锅,因为Win10的重叠操作会报错,用C调用API打开串口,用了重叠操作就各种不正常,随机出错,只能用同步方式打开。RXTX可能是基于重叠操作的,所以在Win10就不行了。
如何重新建立一个串口读写的接口。
首先,用同步方式打开串口,不要用异步操作,那会带来随机问题。
然后,超时参数除最短的那个是-1,其它都设置成0。这样可以像InputStream那样进行非阻塞操作。顺带一提,这几个参数有关联关系,设得不好可能会卡在那里不动,所以干脆设成非阻塞无延时最简单了。
流控默认是关的,不可能会有用流控的设备,所以不需要管它。只需要开放输入缓冲、输出缓冲、波特率、字节长度、校验、停止位就行了。
在java创建一个后台线程读串口,然后用一个阻塞队列做应用层的缓冲区。
有了缓冲区,就可以做数据拼接。数据拼接有三个要素:1、超时,可以用阻塞队列的poll方法;2、最大长度,在后台线程进行最大长度检查;3、校验条件,校验条件是一个Lambda对象,每次接收到数据包后调用这个Lambda判断是否达到校验要求,如果达到要求,则直接退出,不再等待超时,也不等待数据达到数量上限。
如何重新建立一个串口读写的接口。
首先,用同步方式打开串口,不要用异步操作,那会带来随机问题。
然后,超时参数除最短的那个是-1,其它都设置成0。这样可以像InputStream那样进行非阻塞操作。顺带一提,这几个参数有关联关系,设得不好可能会卡在那里不动,所以干脆设成非阻塞无延时最简单了。
流控默认是关的,不可能会有用流控的设备,所以不需要管它。只需要开放输入缓冲、输出缓冲、波特率、字节长度、校验、停止位就行了。
在java创建一个后台线程读串口,然后用一个阻塞队列做应用层的缓冲区。
有了缓冲区,就可以做数据拼接。数据拼接有三个要素:1、超时,可以用阻塞队列的poll方法;2、最大长度,在后台线程进行最大长度检查;3、校验条件,校验条件是一个Lambda对象,每次接收到数据包后调用这个Lambda判断是否达到校验要求,如果达到要求,则直接退出,不再等待超时,也不等待数据达到数量上限。