2011-12-19 122 views
2

Visual Studio 2010 express,WindowsFormsApplicationSerialPort具有相同的輸入和輸出緩衝區?

我的應用程序中有這兩段代碼。首先應該每秒鐘在串口上發送一些數據。第二個應該從串口接收數據。 目前,我沒有設備連接到串口。因此,datarecieved處理程序不應該被觸發,也不應該接收數據。 我的問題是我收到了我在第一段代碼中發送的數據。這是一種正常的行爲?有什麼辦法可以防止這種行爲?如果我將設備連接到串行端口,會不同嗎?

private void timer1_Tick(object sender, EventArgs e) 
    { 
     serialPort.Write(dataToSend, 0, 1); 
    } 

private void datarecievedhandler(object sender, SerialDataReceivedEventArgs e) 
    { 
     serialPort.Read(dataToRead, 0, 1); 
     MessageBox.Show("Something is recieved!"); 
    } 
+0

什麼是'e.EventType'?這可能是EOF嗎? – 2011-12-19 10:07:38

+0

對不起,我仍然在這方面的一個初學者。我不明白一個問題 – user1069738 2011-12-19 10:09:45

+0

在你的'datarecievedhandler'你'SerialDataReceivedEventArgs e';在'e'上是一個值'e.EventType',旨在幫助你理解事件。簡單地...如果你添加一個斷點;什麼是「e.EventType」? – 2011-12-19 10:11:38

回答

1

您必須首先測試設備是否與您用來與設備通信的協議連接。

例如,試圖發送一個「Hello」,並等待ACK。如果您遇到超時,則表示沒有設備連接。

如果您的設備不支持「你好/ ACK」之類的消息,只是嘗試讀取數據,看看它是否超時。

+0

感謝...我沒有測試該設備是否連接...我知道這是不是因爲我沒有把它連接到端口。我只是想,如果沒有連接設備,datarecieved處理程序永遠不應該被提出。我對嗎? – user1069738 2011-12-19 10:13:36

2

如果沒有連接到端口,並且您收到迴音,這意味着你最有可能開通了錯誤的COM口(如藍牙端口中的一個,調制解調器,或類似的東西),其中有迴音啓用默認。

打開Windows控制面板中的設備管理器,看看端口下,確保您打開正確的COM端口。

+0

謝謝,這似乎是一個問題...當我連接設備,並打開一個不同的端口,一切都很好;) – user1069738 2011-12-20 11:25:46