gpt4 book ai didi

Java/RXTX 问题 Windows XP

转载 作者:行者123 更新时间:2023-11-30 09:53:31 28 4
gpt4 key购买 nike

我目前正在测试我为一家小酒吧编写的 Java/MySQL POS 系统,但在提款方面遇到了问题。

现金抽屉有一个 RJ11 插头,通过 USB-> 串口盒连接,向设备写入任何数据都会触发抽屉打开。

我在使用 RXTX 时遇到问题,不确定是我的代码、库还是设备驱动程序的问题?

理想情况下,我希望连接在用户登录系统时创建,并在他们注销时关闭,但目前,代码只是打开连接、写入数据并在销售时关闭响起(在按下保存按钮和打开抽屉之间有 1-2 秒的延迟,这令人沮丧)。

当应用程序首次启动时,抽屉在几次销售中工作正常(尚未确定模式),但随后停止工作。它显示了发生的一系列异常,混合了 NoSuchPort、PortInUse 或只是一个普通的 AccessDenied 消息。通常,重新启动应用程序并断开/重新连接 USB 将使它再次运行,从而增加销售量。

我可以使用 HyperTerminal 连接到设备,它始终如一地工作,没有任何问题。

Java代码:

public static void openTill() {
try {
portId = (CommPortIdentifier) CommPortIdentifier.getPortIdentifier("COM3");
serialPort = (SerialPort) portId.open("DRAWER_PORT", 2000);

outputStream = serialPort.getOutputStream();

serialPort.setSerialPortParams(2400, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);

serialPort.setRTS(false);
serialPort.setInputBufferSize(8192);
serialPort.setOutputBufferSize(8192);
serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_XONXOFF_IN | SerialPort.FLOWCONTROL_XONXOFF_OUT);

outputStream.write("k".getBytes());
outputStream.close();
outputStream = null;

serialPort.close();
serialPort = null;
} catch (Exception ex) {
ex.printStackTrace();
}
}

我尝试了几种不同的设置,试图尽可能地模仿 HyperTerminal 使用的设置(通过检查 PortMon),但仍然无法正常工作。

如有任何建议,我们将不胜感激!

谢谢,瑞安。

最佳答案

找不到代码的任何错误,但我可以建议一些调试起点:

  • 用 Sun 的(错误的.. Oracle 的)javax.comm 实现尝试相同的代码。 Windows 版本不再可从其站点下载,但仍可在其他地方找到。即使您不想在最终设置中使用此实现,它也可能会帮助您找到问题所在。还有其他选择,例如 SerialIO .

  • 使用 com0com安装虚拟 COM 端口。启用日志记录(请参阅 README.txt file 中的最后一个问题)。将您使用代码时的日志与使用 super 终端时获得的日志进行比较,并寻找任何差异。

  • 尝试使用不同的串口 -> USB 转换器。根据我的经验,其中许多都没有正确实现 RS232,或者存在大量错误。

编辑:

如果您发现这实际上是一个 rxtx 错误,但出于某种原因不想切换到另一个 javax.comm 实现(我已经看到这种情况发生了:-),这里有一些可能有用的额外提示(无论如何,我会先尝试上述建议):

  • 是否需要调用 setInputBufferSizesetOutputBufferSize?尝试删除它们。该设备是否实际使用 XON/XOFF 流控制?如果不是,请尝试将流量控制设置为无。设备是否需要禁用 RTS?如果没有,也删除此行。另外,尝试在打开输出流之前设置串口参数。当然,这些都不应该有任何区别,但您可能会触发一些 rxtx 错误。

  • 这个问题是不是和端口顺序打开和关闭几次有关?您可以尝试保持端口始终打开。在每次销售中,只需执行以下操作:

    outputStream.write("k".getBytes());
    outputStream.flush();

    然后查看问题是否仍然重现。

关于Java/RXTX 问题 Windows XP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3771167/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com