2014-02-20 101 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()); 
相关问题