我在.NET中编写了一个程序,用于侦听特定的串行端口并处理正在接收的数据。我使用com0com(Null-modem模拟器)编写了一个测试程序,我的程序运行正常。我甚至用HyperTerminal对它进行了测试,看起来效果也很好
但是,当我将软件与原始设备(从控制系统接收的输出)连接时,收到的数据是乱码。它包含特殊字符。与超级终端连接时,相同的设备产生所需的输出。我更改了波特率,奇偶校验等,但收到的数据是相同的垃圾字符集
我使用了SerialPort组件的DataReceived事件,并使用以下代码行来捕获数据:
string data = portRecieve.ReadExisting();
答案 0 :(得分:2)
你是如何设置
的SerialPort.DiscardNull
SerialPort.Encoding
也许可以告诉我们你收到的特殊字符的例子。
答案 1 :(得分:1)
我可以想到以下原因导致数据可能出现乱码:
如果物理连接不良,有时候你可能会得到垃圾(而不是什么都没有)。尝试拔掉并重新插入潜在客户 - 并检查您是否具有正确的线索(例如,您是否需要nullmodem?)。通过检查HyperTerminal看起来好像已经涵盖了这一点。
如果波特率,停止位,奇偶校验不正确 - 听起来就像你有这个一样
您正在尝试以字符串形式接收数据。如果它不是以纯文本形式发送的,或者您的编码是错误的,那么它很容易显得像垃圾一样。尝试使用二进制接收并检查您收到的原始数据。这将告诉你数据是错误的还是.net转换是搞砸了 - 消除中间人!
答案 2 :(得分:0)
听起来我觉得设备正在将打印机置于某种特殊的图形模式。如果是这样,则在发送到打印机的数据中可能存在转义序列,即。字符序列与转义(27,0x1B)字符相似。 在这种情况下,您必须查看打印机手册以查看命令的作用。或者,您可以告诉设备使用简单的ASCII打印机,而不是智能打印机。