65.9K
CodeProject 正在变化。 阅读更多。
Home

用于调试串行端口通信的应用程序

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.67/5 (27投票s)

2007 年 5 月 14 日

CPOL

2分钟阅读

viewsIcon

170505

downloadIcon

9808

这是一个我用来测试串口数据传输的非常简单的应用程序。它可以枚举 COM 端口,允许您编辑 SerialPort 类实例的所有属性。它还允许您将文件随机发送到串口,并将接收到的数据保存到文件中。

Screenshot - Complay.jpg

Screenshot - Complay2.jpg

引言

这是一个非常基础的测试工具,我创建它来测试我的串口处理代码。我搜索过类似的工具,你可能会认为它应该存在,但…

您可能需要的一些东西

我购买了一些廉价的 USB 转串口线,这对于在一台机器上进行测试很有帮助。您也可以安装模拟串口,但我更倾向于使用更真实的场景进行测试。

基本功能

  1. 该应用程序允许您通过串口发送/接收数据并保存数据。
  2. 它允许您使用 propertyGrid 配置 .NET SerialPort 类的所有选项。
  3. 它允许您选择一个目录,并以随机间隔从该目录随机发送一个文件。
  4. 它枚举您机器上的 COM 端口。

Using the Code

应用程序中的几乎所有功能都是单行代码,并且完全不言自明,因为 .NET 是一种编写良好、高级的语言。这个应用程序中唯一棘手的部分是串口在一个单独的线程中接收数据。您无法从单独的线程访问可视化控件,因此您必须调用一个 delegate ,它将设置文本并发送带有 (new object[] { text }) 内存的副本。

重要的是要注意,InvokeRequired 会告诉您线程 ID 是否不同。

当收到数据时,serialPort1_DataReceived 处理程序将在收到串口数据时触发,并调用 SetText ,它只是一个小的包装器,反过来会调用 SetTextCallback delegatedelegate 设置为调用 SetText ,因此 SetText 将再次被调用,但现在它在 UI 线程上。此时,this.txtData.InvokeRequired 将为 false ,我们可以像往常一样设置文本。

// This delegate enables asynchronous calls for setting
// the text property on a TextBox control.
delegate void SetTextCallback(string text);
private void serialPort1_DataReceived
    (object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
    SetText(this.serialPort1.ReadExisting());
}

private void SetText(string text)
{
    // InvokeRequired required compares the thread ID of the
    // calling thread to the thread ID of the creating thread.
    // If these threads are different, it returns true.
    if (this.txtData.InvokeRequired)
    {
        SetTextCallback d = new SetTextCallback(SetText);     
        this.Invoke(d, new object[] { text });
    }
    else
    {
        this.txtData.Text = text;
    }
}

限制

我正在测试的串口应用程序处理旧的数据矩阵打印机驱动程序,因此我处理的是严格的文本数据通过端口传输,这可能不是大多数人所需要的。我意识到如果它内置了一个二进制编辑器,它会更通用。

历史

  • 2007 年 5 月 14 日:初始发布
© . All rights reserved.