0

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

    字符串数据 = portRecieve.ReadExisting();

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

4

3 回答 3

2

你是怎么设置的

SerialPort.DiscardNull
SerialPort.Encoding

也许向我们展示您收到的特殊字符的示例。

于 2009-10-11T15:51:31.103 回答
1

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

  • 如果物理连接不好,有时您可能会得到垃圾(而不是什么都没有)。尝试拔下并重新插入引线 - 并检查您是否有正确的引线(例如,您需要一个 nullmodem 吗?)。通过签入超级终端,您似乎已经了解了这一点。

  • 如果波特率、停止位、奇偶校验不正确 - 听起来你已经涵盖了这个

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

于 2009-10-11T18:20:07.837 回答
0

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

于 2009-10-11T16:38:49.787 回答