2010-07-12 176 views
0

背景:使用RealPort软件创建的Windows Server 2003 R2有线服务虚拟串口, 串口配置为COM5,9600波特,8个数据位,无奇偶校验位,1个停止位,无流量控制, 使用RXTX 2.1-7。RXTX虚拟串口读取问题

找到端口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) 消息全部以“All Rights Reserved。”结尾),每条消息中的最后一个字符相同。 然而,从人物到人物的转变并不一致。 已尝试过其他编码: UTF8/UTF-8将数字转换得更高。 ascii/us-ascii也是如此。 Cp1252将数字移动到130-350范围,但是移动到65533,8222和8240的3个字符除外。 注意:使用InputStreamReader.getEncoding()UTF8和UTF-8是UTF8和ASCII,us-ascii是ASCII 。

我应该尝试其他编码吗?其他人看过这种东西?

回答

1

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

我们的输入流是简单的InputStream类型,它是用serialPort.getInputStream()设置的;

尝试从InputStreamReader中退出,并使用简单的“InputStream”。编码应该自己处理。

希望帮助在某种程度上,

--gMale

0

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

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

第二个端口设置为1200,8,1,0,0,使用9600导致流大部分为0,有128个。