串行数据在C#应用程序不发送
-
27-09-2019 - |
题
我有一个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块。这应该给你一个机会,看看你,因为你设置的WriteTimeout值过低TimeoutException异常。在9600波特发送516个字节需要538毫秒。
您的其它设置麻烦的食谱了。摆脱ReceivedBytesThreshold和DiscardNull的。
不隶属于 StackOverflow