繁体   English   中英

C#Visual Studio控制台串行接口

[英]C# Visual Studio console serial interface

我从头开始,尝试编写一个简单的控制台以与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进行编程,以接收其接收的所有内容并将其回显。 这适用于我的代码。 在我的控制台中,我将得到“这是一个测试”回显到控制台窗口的信息。

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

“ System.dll中发生了'System.TimeoutException'类型的第一次机会异常”

在线上

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

但是“这是测试”将出现在Putty终端上。 如果删除“ mySerialPort.Write(“这是一个测试”);“ 行并尝试将数据从Putty窗口发送到控制台窗口,则什么也没有出现。

同样,这也可以与我的硬件解决方案配合使用。

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

我猜问题出在您使用的虚拟实用程序中。 似乎将引脚状态设置为不正确。 如果我使用2个腻子实例并连接到桥接端口,则会看到输入的符号无限发送。 所以我认为您的代码很好。

在执行此类任务时,我使用了一条特殊的电缆来连接2个硬件com端口(com1和com2,如果没有它们,则可以尝试USB到COM转换器),并且工作正常。

我在HHD Free Virtual Serial Ports上也遇到了同样的问题,但这在异步写入操作中效果很好。

您也可以更换

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM