Java / RXTX问题Windows XP

问题描述 投票:2回答:2

我目前正在测试我为一个小酒吧写的Java / MySQL POS系统,并且在现金提取方面遇到问题。

现金抽屉的RJ11插头通过USB->串行盒连接,将任何数据写入设备都会触发抽奖。

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

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

[当应用程序首次启动时,抽屉可以正常工作几次销售(尚未确定模式),但随后停止工作。它显示了发生的一系列异常,混合了NoSuchPort,PortInUse或仅是普通的AccessDenied消息。通常,重新启动该应用程序并断开/重新连接USB将使其重新工作,从而获得更多销售。

我可以使用超级终端连接到该设备,并且它可以正常工作,没有任何问题。

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();
    }
}

我尝试了一些不同的设置,试图模仿超级终端使用的设置(通过检查PortMon),但仍然无法使用。

任何建议将不胜感激!

谢谢,瑞安。

java rxtx
2个回答
1
投票

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

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

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

  • 尝试使用其他串行-> USB转换器。以我的经验,其中许多不能正确实现RS232,或者有很多错误。

编辑:

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

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

  • 问题是否与依次打开和关闭端口有关?您可以尝试使端口始终保持打开状态。在每笔交易中,只需执行:

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

    并查看问题是否仍然存在。


1
投票

您应该尝试jSSC:http://code.google.com/p/java-simple-serial-connector/(与SerialIO不同,它是免费的)。

我也对rxtx串行和usb串行转换器有很多问题(this was one of those),所以我只是从rxtx迁移到了这个,它工作得很好!通过系统自动检测将DLL集成到Windows,Linux,Mac和Solaris的.jar中。

最新的正式版本不支持超时,但是我联系了开发人员,他给了我一个jar版本,其中实现了非常快的超时!

迁移非常简单,现在工作得更好(:

© www.soinside.com 2019 - 2024. All rights reserved.