【问题标题】:RXTX virtual serial port read problemRXTX虚拟串口读取问题
【发布时间】:2010-07-12 15:34:34
【问题描述】:

背景: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(); 在 SerialPort.Event.DATA_AVAILABLE 情况下的 while 循环中 打印出整数 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 rxtx virtual-serial-port


    【解决方案1】:

    我正在做几乎完全相同的事情。 9600 波特,8N1(8 个数据位,无奇偶校验,1 个停止位),字符移位没有问题。我们甚至没有在任何地方设置编码。

    我们的输入流只是 InputStream 类型,它是通过 serialPort.getInputStream(); 设置的;

    尝试从 InputStreamReader 退后一步,只使用普通的“InputStream”。编码应该自己处理。

    希望能在某种程度上有所帮助,

    --gMale

    【讨论】:

      【解决方案2】:

      有两个有线服务端口。我发布的一个结果是 TCP 到串行设备(称为 Digi)中的硬件配置之间的冲突。通过将 COM5 串行设置更改为 9600,7,1,0,0,我能够解决该端口上的问题。值的变化是由于使用了 8 个数据位与 7 个数据位。这当然意味着我必须更改代码中的端口参数以匹配。你的正确之处在于阅读器是不必要的,但它确实通过观察编码的移位变化帮助我找到了解决方案,直到我意识到更少的数据位也会产生相同的效果。

      现在我正在寻找第二个端口的魔法。

      第二个端口设置是 1200,8,1,0,0 使用 9600 导致流大部分是 0 和一些 128。

      【讨论】:

        猜你喜欢
        • 2012-10-14
        • 1970-01-01
        • 2011-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多