我有一个 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/