C# serialPort控件无法触发DataReceived事件 100
我要实现的功能:上位机C#软件通过串口向单片机发送命令,单片机收到命令后通过串口向上位机发送数据,上位机收到数据再解析。我的代码如下:有些框架代码我省略了usingSys...
我要实现的功能:上位机C#软件通过串口向单片机发送命令,单片机收到命令后通过串口向上位机发送数据,上位机收到数据再解析。我的代码如下:
有些框架代码我省略了
using System.IO.Ports;
private void Form1_Load(object sender, EventArgs e)
{
Control.CheckForIllegalCrossThreadCalls = false;
serialPort1.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived); //定义事件
}
private void button1_Click(object sender, EventArgs e) //串口初始化按钮
{
try
{
serialPort1.PortName = comboBox1.Text;
serialPort1.BaudRate = 38400;
serialPort1.Open();
}
catch
{
MessageBox.Show("串口打开错误!", "错误");
}
}
private void port_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
serialPort1.Read(receivebuf, 0, receivebuf.Length); //此处设置断点后,无法执行到这一步,就是该事件未触发
//下面是数据处理的代码,略
}
private void button2_Click(object sender, EventArgs e) //通过定时器触发向下位机发送采集数据命令
{
button3.Enabled = true;
timer1.Interval = 3 * 1000;
timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
byte[] sendbuf = new byte[6] { 0xef, 0xc0, 0x00, 0x00, 0xc0, 0xfe };
serialPort1.Write(sendbuf, 0, 6);
}
}
}
我是用同一个串口COM1进行通信,经检测,上位机能发送数据给下位机,但是下位机发送数据给上位机的时候未触发DataReceived事件,我用串口调试助手试了下,完全正常通信 展开
有些框架代码我省略了
using System.IO.Ports;
private void Form1_Load(object sender, EventArgs e)
{
Control.CheckForIllegalCrossThreadCalls = false;
serialPort1.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived); //定义事件
}
private void button1_Click(object sender, EventArgs e) //串口初始化按钮
{
try
{
serialPort1.PortName = comboBox1.Text;
serialPort1.BaudRate = 38400;
serialPort1.Open();
}
catch
{
MessageBox.Show("串口打开错误!", "错误");
}
}
private void port_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
serialPort1.Read(receivebuf, 0, receivebuf.Length); //此处设置断点后,无法执行到这一步,就是该事件未触发
//下面是数据处理的代码,略
}
private void button2_Click(object sender, EventArgs e) //通过定时器触发向下位机发送采集数据命令
{
button3.Enabled = true;
timer1.Interval = 3 * 1000;
timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
byte[] sendbuf = new byte[6] { 0xef, 0xc0, 0x00, 0x00, 0xc0, 0xfe };
serialPort1.Write(sendbuf, 0, 6);
}
}
}
我是用同一个串口COM1进行通信,经检测,上位机能发送数据给下位机,但是下位机发送数据给上位机的时候未触发DataReceived事件,我用串口调试助手试了下,完全正常通信 展开
展开全部
个人不是特别推荐使用DataReceived事件. 因为这种方法很被动, 出现问题很难确认到底哪里有问题
你可以尝试下述调试方法:
1: 你试试把时间发送命令,修改成按钮发送一次, 调试一下,看看是否能触发. 因为DataReceived事件在定时触发里面,如果间隔段设置不好,容易出问题,因为串口助手是软件,你实际发送接收命令面对的是物理机器, 同步是大问题.
2:不要使用DataReceived事件和定时器配合使用, 自己手动读取判定. 时间间隔设置要看你对设备本身的熟悉程度.
你可以尝试下述调试方法:
1: 你试试把时间发送命令,修改成按钮发送一次, 调试一下,看看是否能触发. 因为DataReceived事件在定时触发里面,如果间隔段设置不好,容易出问题,因为串口助手是软件,你实际发送接收命令面对的是物理机器, 同步是大问题.
2:不要使用DataReceived事件和定时器配合使用, 自己手动读取判定. 时间间隔设置要看你对设备本身的熟悉程度.
2014-03-11
展开全部
把 serialPort1.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived); //定义事件代码放到form_load外面试试
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你解决这个问题了吗?我也是这个情况啊
http://zhidao.baidu.com/question/747540858614013892.html
http://zhidao.baidu.com/question/747540858614013892.html
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询