问题标签 [rxtx]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Java RXTX 和 Arduino 之间的串行通信
我正在尝试使用串行端口在我的 PC(使用 Netbeans 和 RXTX 的 Windows 7)与 Arduino Pro 之间进行通信。Arduino 实际上是使用 FTDI 电缆连接到 PC 的。
该代码基于此处找到的 Java SimpleRead.Java。
目前,Arduino 只是在启动时打印出一个字符串。我的 Java 程序应该打印已读取的字节数,然后打印出内容。Java程序可以工作,有点......
如果字符串很长(> 10 个字节左右),输出将被分解。
所以如果我在 Arduino 上打印
我的 Java 程序的输出可能类似于:
或者
我认为这是一个时间问题,因为当我使用调试器手动检查代码时,结果字符串始终是它应该是的:一个 20 字节的字符串。
我一直在搞砸各种事情,但我无法解决问题。
这是给我带来问题的代码部分:
java - SerialPortEventListener 实现
我正在使用 Firmata 协议,它允许您通过串行协议控制 Arduino。我正在使用侦听 DATA_AVAILABLE 事件的 SerialPortEventListener 读取传感器值。但是我注意到我的应用程序注册更新的传感器值需要一秒钟的延迟,协议以 57600 的波特率运行。我的问题是事件侦听器是在单独的线程上运行还是我的应用程序和侦听器在同一个线程中运行,我的应用程序减慢了速度。
编辑:为了让我自己清楚,我只是在理论上问在单独的线程中读取串行传输或使用事件侦听器会更快吗?
java - 如何在java中访问USB端口
我正在尝试编写一个访问 USB 端口以读取和写入通过 USB 连接的设备的 Java 应用程序。我面临的问题是我不知道在 java 中究竟使用什么来做这样的事情。我在网上搜索并找到了一个名为JUSB
但所有帖子似乎都相当旧的东西。
目前我正在使用这些RXTX
库,但有时会遇到一些同步错误。当我使用 C# 进行等效操作时,它需要的代码要少得多,而且我不会遇到任何相同的同步错误。
我的问题是,最新版本的 JRE 中是否有任何东西可以用来访问 USB 端口(就像等效的 C# 代码一样简单)?
java - java 串行 I/O:以稳健的方式处理 USB 串行连接/断开连接
我正在使用rxtx在 Java 中使用提供 USB 通信端口的 FTDI2232H 进行串行 I/O 处理。它工作得很好,有一个例外:如果我拔下 USB 电缆,使 COM 端口在运行时消失,它会左右喷出异常:
当我再次重新插入电缆时,它不会恢复。
有什么方法可以让 rxtx 在 USB 通信端口连接/断开时正常工作?(我尝试向 rxtx 邮件列表发帖,但由于某种奇怪的原因,即使我订阅了该列表,我也无法发送消息。我已向列表管理员发送电子邮件,但没有收到任何回复。)
如果没有,是否有另一个串行 I/O 框架可以做到这一点?
java - RXTX虚拟串口读取问题
背景:Windows Server 2003 R2,使用RealPort软件创建的Wire Service虚拟串口,串口配置为COM5,9600波特,8个数据位,无奇偶校验位,1个停止位,无流控,使用RXTX 2.1-7。
找到端口 COM5,使用 portId.open 方法创建串行端口,并设置端口参数和流控制以匹配上面的设备驱动程序设置。我得到了 serialPort IntupStream 并将其包装在 InputStreamReader 中,这样我就可以控制输入编码。默认编码当然是 Cp1252 我读过,如果您使用 8 个数据位,则编码应该是 ISO-8859-1 aka Latin1。并且正在使用 InputStreamReader 方法: int c = isr.read(); 在 while 循环中 SerialPort.Event.DATA_AVAILABLE 打印出整数 c 并将其转换为字符 ((char)c); 问题是数字和生成的字符移动得太高(范围是 135 - 250) 消息都以“保留所有权利。)”结尾,并且每条消息中的最后一个字符都是相同的。然而,从一个角色到另一个角色的转变并不一致。尝试过其他编码:UTF8/UTF-8 将数字移得更高。ascii/us-ascii 也是如此。Cp1252 将数字移至 130 - 350 范围,但 3 个字符移至 65533、8222 和 8240。注意:使用 InputStreamReader.getEncoding() 时,UTF8 和 UTF-8 是 UTF8,ascii 和 us-ascii 是 ASCII。
我应该尝试其他编码吗?还有人见过这种东西吗?
java - Java/RXTX 问题 Windows XP
我目前正在测试我为一个小酒吧编写的 Java/MySQL POS 系统,并且在提取现金时遇到了问题。
钱箱有一个通过 USB-> 串行盒连接的 RJ11 插头,向设备写入任何数据都会触发抽奖打开。
我在使用 RXTX 时遇到问题,不确定是我的代码、库还是设备驱动程序?
理想情况下,我希望在用户登录系统时创建连接,并在他们注销时关闭,但目前,代码只是打开连接,写入数据并在销售启动时关闭(点击保存按钮和抽屉打开之间有 1-2 秒的延迟,这令人沮丧)。
当应用程序第一次启动时,抽屉对于一些销售工作正常(尚未确定模式),但随后停止工作。它显示了发生的一系列异常,混合了 NoSuchPort、PortInUse 或只是一个普通的 AccessDenied 消息。通常,重新启动应用程序并断开/重新连接 USB 将使其再次工作以增加销售量。
我可以使用超级终端连接到设备,并且它始终如一地工作,没有任何问题。
Java代码:
我尝试了一些不同的设置,试图尽可能地模仿超级终端使用的设置(通过检查 PortMon),但仍然无法正常工作。
任何建议将不胜感激!
谢谢,瑞恩。
java - 线程中断未结束对输入流读取的阻塞调用
我正在使用 RXTX 从串行端口读取数据。读取是在以下列方式产生的线程内完成的:
SerialReader 类实现 Runnable 并且只是无限循环,从端口读取数据并将数据构造成有用的包,然后再将其发送到其他应用程序。但是,我已将其简化为以下简单性:
当用户单击停止按钮时,会触发以下功能,理论上应该关闭输入流并打破阻塞的 byteChan.read(buffer) 调用。代码如下:
但是,当我运行此代码时,我永远不会收到 ClosedByInterruptException,一旦输入流关闭,它应该触发。此外,在调用 serial.close() 时执行会阻塞——因为底层输入流仍然阻塞在 read 调用上。我尝试用 byteChan.close() 替换中断调用,这应该会导致 AsynchronousCloseException,但是,我得到了相同的结果。
对我所缺少的任何帮助将不胜感激。
java - Java 应用在通过 Ant 启动时加载 JNI 的方式不同
我在包含 JNI 库的 Java 应用程序中使用 RXTX。我将 .jni 文件放在/Libray/Java/Extensions
. 当我通过通常的方式手动启动我的应用程序时,java -jar /path/to/app.jar
一切正常。但是,当我尝试通过 Netbeans 或 Ant 启动它时,它失败了
当我将 .jni 移动到其他地方并使用 .jni 将 JVM 指向它时的类似行为-Djava.library.path
。它手动工作,但在 Ant 中失败。
我正在使用运行 Mac OS X 10.6.4 的 Java 1.6 64Bit、Ant 1.7.1、RXTX 2.1-7r2(稳定版)
java - Java:串口传入数据上的观察者或同步+通知()
我有一个带有数据的串口。我使用串口事件侦听器实现了与 RXTX 库的串口连接。因此,只要串行端口中有可用的传入数据,同步函数 serialEvent(SerialPortEvent oEvent) 就会运行。基本上,随着数据不断进入,程序将处于无限循环中。我将传入的数据组织成一个整数数组。现在我希望这个数组与我的其他类共享,这些类将使用这个数组来执行不同的任务。我可以说,由于串行事件侦听器在循环中运行并且数组不断变化,我希望所有其他类共享这个更改的数组数据。我之前学过一些关于 java.util.observables 的知识。当我在网上搜索时,我看到其他人使用 sychronized() 和 notify()/notifyAll() 在线程之间共享一个变量。
我不确定其中哪一个最好用?如果他们都在这种情况下工作,我需要注意的最重要的部分是什么?还有其他方法仍然可以实现我想要的吗?