使用SerialPort.ReadExisting()从串行端口接收无效数据

时间:2009-10-11 15:34:39

标签: c# .net serial-port hardware-interface

我在.NET中编写了一个程序,用于侦听特定的串行端口并处理正在接收的数据。我使用com0com(Null-modem模拟器)编写了一个测试程序,我的程序运行正常。我甚至用HyperTerminal对它进行了测试,看起来效果也很好 但是,当我将软件与原始设备(从控制系统接收的输出)连接时,收到的数据是乱码。它包含特殊字符。与超级终端连接时,相同的设备产生所需的输出。我更改了波特率,奇偶校验等,但收到的数据是相同的垃圾字符集 我使用了SerialPort组件的DataReceived事件,并使用以下代码行来捕获数据:

    string data = portRecieve.ReadExisting();

有人能告诉我我在哪里错过了吗?在当前环境中,设备的输出直接与点阵打印机连接,点阵打印机打印在端口上接收的任何内容。打印机似乎抓住了发送的内容,但我的代码却没有 如果您遇到类似的情况,请分享您的发现。
感谢

3 个答案:

答案 0 :(得分:2)

你是如何设置

SerialPort.DiscardNull
SerialPort.Encoding

也许可以告诉我们你收到的特殊字符的例子。

答案 1 :(得分:1)

我可以想到以下原因导致数据可能出现乱码:

  • 如果物理连接不良,有时候你可能会得到垃圾(而不是什么都没有)。尝试拔掉并重新插入潜在客户 - 并检查您是否具有正确的线索(例如,您是否需要nullmodem?)。通过检查HyperTerminal看起来好像已经涵盖了这一点。

  • 如果波特率,停止位,奇偶校验不正确 - 听起来就像你有这个一样

  • 您正在尝试以字符串形式接收数据。如果它不是以纯文本形式发送的,或者您的编码是错误的,那么它很容易显得像垃圾一样。尝试使用二进制接收并检查您收到的原始数据。这将告诉你数据是错误的还是.net转换是搞砸了 - 消除中间人!

答案 2 :(得分:0)

听起来我觉得设备正在将打印机置于某种特殊的图形模式。如果是这样,则在发送到打印机的数据中可能存在转义序列,即。字符序列与转义(27,0x1B)字符相似。 在这种情况下,您必须查看打印机手册以查看命令的作用。或者,您可以告诉设备使用简单的ASCII打印机,而不是智能打印机。