2012-07-30 46 views
2

我想從文本的SerialPort一行readline的閱讀()
文本是ASCII和終端都可以(數據是真的好),但是當我讀到的readline,它在文本的地方返回? 例子 - 這是常規的:serialprot readline()添加問號「?」

!!!;34;248;45;215;43;226;33;235;32;240;35;250;36;240;37;246;40;263;41;272;42;261;39;270;44;256;47;241;49;8888;50;8888;38;245;46;460;48;363 

這將返回的ReadLine():

!!!;34;248;45;215;43;226;?33;235;32;240;35;250;36;240?;37;246;40;263;41;272;42;261?;39;270;44;256;47;241;49;888?8;50;8888;38;245;46;460;48;3?63 

代碼很簡單:

this.serialPort1.PortName = "COM3";  
this.serialPort1.BaudRate = 19200;      
this.serialPort1.Parity = System.IO.Ports.Parity.Mark; 
this.serialPort1.Open(); 

private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) 
{ 
    prectenyRadek=this.serialPort1.ReadLine(); 
    this.Invoke(new EventHandler(DisplayText)); 
} 

private void DisplayText(object sender, EventArgs e) 
{ 
    richTextBox1.AppendText(prectenyRadek);  
} 

有沒有人有想法,什麼,爲什麼加我「? 「

+0

串行有很喜歡這ASCII數據:0D 0A 21 21 21 3B 33 34 3B 32 34 38 3B 34 35 3B 32 31 35 3B 34 33 3B 32 32 36 3B 33 33 3B 32 33 35 3B 33 32 3B 32 34 30 3B 33 35 3B 32 35 30 3B 33 36 3B 32 34 30 3B 33 37 3B 32 34 36 3B 34 30 3B 32 36 33 3B 34 31 3B 32 37 32 3B 34 32 3B 32 36 31 3B 33 39 3B 32 37 30 3B 34 34 3B 32 35 36 3B 34 37 3B 32 34 31 3B 34 39 3B 38 38 38 38 3B 35 30 3B 38 38 38 38 3B 33 38 3B 32 34 35 3B 34 36 3B 34 35 37 3B 34 38 3B 33 36 32 3B 0D 0A(首先0D 0A是EOL行之前和之後你看到在十六進制和完成0D 0A太) – user1562137 2012-07-30 07:51:11

回答

1

「如果標尺發送二進制數據則編碼屬性的事項。缺省值是ASCII,使得產生大量問號如果在二進制數據的字節是> = 128。在這種情況下,應該使用讀()代替的ReadLine()。這是你想要用來開始解決這個問題是什麼,你想看看原始字節值,你不能看到問號了。要格外注意最後一個或兩個字節你從閱讀中得到,他們應該重複。「

來源:SerialPort.ReadLine() returns garbage

1

問題在於等價性。它開始工作很好,當我從馬克換成宇宙空間。 (我的線之間的數據是奇偶校驗標記,但是這一行沒有9位)。