c# - C# 应用程序中串行数据未传输

标签 c# .net serial-port serial-communication

我有一个 C# 应用程序,其中串行 (COM1) 数据有时似乎无法传输。以下是我的代码的简化片段(对 textBox 写入的调用已被删除):

    InitializeComponent()
    {
       // 
       // serialPort1
       // 
       this.serialPort1.BaudRate = 115200;
       this.serialPort1.DiscardNull = true;
       this.serialPort1.ReadTimeout = 500;
       this.serialPort1.ReceivedBytesThreshold = 2;
       this.serialPort1.WriteTimeout = 500;
       this.serialPort1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(this.serialPort1_DataReceived);
    }

        if (radioButtonUart9600.Checked)
        {
           serialPort1.BaudRate = 9600;

           try
           {
              serialPort1.Open();
           }
           catch (SystemException ex)
           {
              /* ... */
           }
        }

        try
        {
           serialPort1.Write("D");
           serialPort1.Write(msg, 0, 512);
           serialPort1.Write("d");
           serialPort1.Write(pCsum, 0, 2);
        }
        catch (SystemException ex)
        {
           /* ... */
        }

奇怪的是,当端口配置为 115.2Kbps 时,相同的代码可以正常工作。然而,当以 9600bps 运行时,应该由该代码传输的数据似乎没有被传输。我已经通过监视远程设备上的接收标志验证了这一点。 try 语句中不会引发任何异常。我还应该做其他事情(刷新等)来确保数据传输吗?如果您有任何想法或建议,我们将不胜感激。我正在使用 Microsoft Visual C# 2008 Express Edition。谢谢。

最佳答案

删除这些 try/catch block 。这应该让您有机会看到由于您将 WriteTimeout 值设置得太低而得到的 TimeoutException。以 9600 波特率发送 516 字节需要 538 毫秒。

你的其他设置也会带来麻烦。摆脱 ReceivedBytesThreshold 和 DiscardNull。

关于c# - C# 应用程序中串行数据未传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2851921/

相关文章:

c# - 为什么我不能两次读取 Http Request Input 流?

c# - 是否有加密 CNG 类的 .NET Core 变体

Exchange 2010 上的 C# 和 powershell - 无法识别术语 'Group-Object'

c# - 删除表行而不是隐藏在 rdlc 报告中

c# - 如何在 .NET 中正确读取串行端口

Java编辑批处理文件ECHO命令

c# - Xamarin.Android JSON.Net 序列化仅在 4.2.2 设备上失败 TimeZone Not Found 异常

c# - 提高从 MethodCallExpression 获取 MethodInfo 的性能

c# - 使用部分类和设计器文件将 Visual Studio 2003 表单转换为 Visual Studio 2005/2008 表单

Java - 扫描器类 : correct usage