C#Visual Studio控制台串行接口

时间:2014-02-20 20:43:46

标签: c# visual-studio-2010 serial-port putty

我从头开始尝试编写一个简单的控制台,与Windows 7计算机上的串口连接。

我正在使用:

代码:

 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);
    }
  }
}

到目前为止,我已运行此代码并与连接到我的计算机的xbee模块连接。该xbee模块将串行数据发送到另一个连接到msp430的xbee。 msp430被编程为接收它接收到的任何东西并回送它。这适用于我的代码。在我的控制台中,我会得到"这是一个测试"回到控制台窗口。

问题我遇到的是当我使用虚拟串行连接到putty窗口时。我正在使用它来尝试简化开发,而不是一直使用硬件。我将使用HHD Free Virtual Serial Ports在两个串行端口之间创建桥接连接。我将一个连接到putty终端,另一个将用于我的控制台程序。运行程序时,我收到错误。

"类型' System.TimeoutException'的第一次机会异常发生在System.dll"

就行了

mySerialPort.Write("这是一个测试");

但是"这是一个测试"将出现在Putty终端上。 如果我删除" mySerialPort.Write("这是一个测试");" line并尝试将数据从Putty窗口发送到控制台窗口,不显示任何内容。

这再次适用于我的硬件解决方案。

请帮忙,我会尽力澄清任何问题。再次感谢你。

2 个答案:

答案 0 :(得分:0)

我想问题出在你正在使用的虚拟实用程序中。它似乎设置pin states不正确。如果我使用2个putty实例并连接到桥接端口,我看到无限发送我输入的符号。所以我认为你的代码很好。

当我处理这些任务时,我使用一根特殊的电缆连接2个硬件com端口(com1和com2,如果没有它们,你可以试用usb-to-com转换器),它工作正常。

答案 1 :(得分:0)

我遇到了与HHD Free虚拟串行端口相同的问题,但这对异步写入操作非常有用。

您也可以替换

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

与(例如)

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