关于串口通讯编程遇到的一个问题,求助高手指点
我在进行串口通讯测试时遇到一个问题,求高手帮助我一下,问题如下:
首先我新建一个C#窗体应用程序,分别添加一个checkbox1, textbox1,button1,
Public System.IO.Ports.SerialPort serial1 = new
System.IO.Ports.SerialPort();
//声明一个串口控件
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
if (checkBox1.Checked == true)
{
if (serial1.IsOpen == true)
{
serial1.Close();
}
serial1.BaudRate = 9600;
serial1.PortName = "COM1"; //我假设端口为COM1
serial1.DataBits = 8;
serial1.Parity = System.IO.Ports.Parity.None;
serial1.StopBits = System.IO.Ports.StopBits.One;
serial1.Open();
}
else
{
serial1.Close();
}
}
以上是checkbox1复先框事件,主要是先打开端口及设置通讯参数。
private void button1_Click(object sender, EventArgs e)
{
try
{
if (checkBox1.Checked == true)
{
serial1.Write("d" + "/r/n"); //发送指令
double time= Microsoft.VisualBasic.DateAndTime.Now.TimeOfDay.TotalSeconds;
do
{
if (time + 10 <
Microsoft.VisualBasic.DateAndTime.Now.TimeOfDay.TotalSeconds)
{
textBox1.Text = "通讯超时..";
return;
}
} while (serial1.BytesToRead < 47);
textBox1.Text = serial1.ReadExisting(); //把读取的字符串放到textbox1里去。
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
以上是button1点击事件,主要是发送串口控制指令并读取串口数据到textbox1里去。
这我是按照常规思路编程的串口通讯程序,在测试的时候,我打开端口后,点击Button1发送控制指令,成功获取了数据,但是一个情况:如果连接机器在我没有发送控制指令的时候进行了数据回传动作,我再点击Button1后接收终端(掌上电脑)就会卡住,需要等几分等后才有反应,而且有时候直接卡死没有反应了。我考虑到是不是数据阻塞所引起的这种现象。所以我在Button1事件里在发送指令之前进行清空缓冲数据操作,如下:
serial1.DiscardInBuffer();
serial1.DiscardOutBuffer();
serial1.Write("d" + "/r/n"); //发送指令
但是还不没有起作用,调试很长时候都不行,不知道问题出在哪里,可能你们会问,为什么不使用serial1的DataReceived事件进行自动接收数据呢,是这样的,DataReceived事件是挺好的,但是我不须要实时的传输数据,而是在我需要的时候,用发送控制指令的时候获取数据,仅此而已。以上的问题,求哪位大神能帮忙解决一下。