2014-02-20 148 views
1

我從頭開始嘗試編寫一個簡單的控制檯來與Windows 7計算機上的串行端口進行接口。C#Visual Studio控制檯串行接口

我使用:

代碼:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

using System.IO.Ports; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     public static void Main() 
     { 
      SerialPort mySerialPort = new SerialPort("COM5"); 


     mySerialPort.BaudRate = 9600; 
     mySerialPort.Parity = Parity.None; 
     mySerialPort.StopBits = StopBits.One; 
     mySerialPort.DataBits = 8; 
     mySerialPort.Handshake = Handshake.None; 

     mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler); 

     mySerialPort.Open(); 

     mySerialPort.Write("This is a test"); 

     Console.WriteLine("Press any key to continue..."); 
     Console.WriteLine(); 
     Console.ReadKey(); 
     mySerialPort.Close(); 
    } 

    private static void DataReceivedHandler(
         object sender, 
         SerialDataReceivedEventArgs e) 
    { 
     SerialPort sp = (SerialPort)sender; 
     string indata = sp.ReadExisting(); 
     Console.Write(indata); 
    } 
    } 
} 

到目前爲止,我已經跑了這個c並與連接到我的電腦的xbee模塊連接。該xbee模塊將串行數據發送到連接到msp430的另一個xbee。 msp430被編程爲接收它所收到的任何內容並將其回顯。這與我有的代碼一起工作。在我的控制檯中,我會得到「這是一個測試」回到控制檯窗口。

問題我有當我使用虛擬串行連接到膩子窗口。我正在使用它來嘗試簡化開發,而不必一直使用硬件。我將使用HHD Free Virtual Serial Ports在兩個串行端口之間創建橋接連接。我將連接一個到膩子終端,另一個將用於我的控制檯程序。運行程序時,我收到錯誤。

「類型 'System.TimeoutException' 的第一次機會異常在System.dll中發生」 就行

mySerialPort.Write( 「這是一個測試」);

但是「這是一個測試」將出現在膩子終端上。 如果我刪除了「mySerialPort.Write(」This is a test「);」並嘗試將數據從Putty窗口發送到控制檯窗口,則不顯示任何內容。

這再一次適用於我的硬件解決方案。

請幫助,我會盡力澄清任何問題。再次感謝你。

回答

0

我想問題在於你正在使用的虛擬工具。它似乎設置pin states不正確。如果我使用2個膩子實例並連接到橋接端口,我會看到我輸入的符號發送無限。所以我認爲你的代碼很好。

當我在處理這些任務時,我用一根特殊的電纜連接了2個硬件com端口(com1和com2,如果你沒有它們,你可以試試usb-to-com轉換器),它工作的很好。

+0

謝謝您的回答取代

mySerialPort.Write("This is a test"); 

!你碰巧有一個這樣的電纜或轉換器,你在談論的鏈接?或者,您是否知道可以使用的軟件解決方案? – ridonkulus

+0

這個軟件如果對我來說工作的很好:http://www.virtual-null-modem.com/至於硬件靈魂,這裏是其中之一:http://www.ebay.com/itm/6-Null - 有線電視-6英尺-串行電纜DB9-9管腳女-RS232-調制解調器電纜數據電纜 -/181239097234 – Tony

0

我有和HHD免費虛擬串行端口一樣的問題,但是這個工作非常適合異步寫入操作。

你也可以用(例如)

var buffer = Encoding.ASCII.GetBytes("This is a test"); 
mySerialPort.BaseStream.BeginWrite(buffer, 0, buffer.Length, ar => mySerialPort.BaseStream.EndWrite(ar), new object()); 
相關問題