用串口控件遇到了一个几天还解决不了的问题,求各位大佬

leodream 2012-03-21 10:52:09
事情是这样的,我自己开发了一个DSP设备,具有232通讯功能,收到上位机呼叫的时候会连续向串口发出36个8位数。
现在我准备自己用C#写一个232通讯的程序,周期性呼叫下位机,并接收(更新)这36个数。

我计划的程序流程是,点击一个button,向DSP发出呼叫,即发送数据‘0’给DSP,DSP收到‘0’之后便会连续发出36个数。
然后我在serialPort1_DataReceived事件中接收数据(该事件我设置的是每收到一个字节就触发一次),当接收了36次后又向DSP发送‘0’,这样再接收36次,循环往复。

现在出现的问题是,有些时候接收不到36个数。比如说连续几个周期都没有问题,但是下个周期忽然只接收到小于36个数了。不知道这是怎么回事。我确定DSP没有问题啊。
下面是我精简后的程序代码;
int parameter_num ;
int[] buff = new int[36];
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
parameter_num = parameter_num + 1;
buff[parameter_num - 1] = serialPort1.ReadByte();
if (parameter_num == 36)
{
parameter_num=0;
serialPort1.WriteLine(0.ToString());
}
}

private void button1_Click(object sender, EventArgs e)
{
parameter_num = 0;
serialPort1.WriteLine(0.ToString());
}
...全文
84 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
leodream 2012-03-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bdmh 的回复:]
如果你确认每次都是发行固定大小的数据的话,调整参数试试,曾经遇到过,同样的时间延时,在慢机器和快机器上效果不一样,经常会丢数据
[/Quote]

你指的是什么参数?波特率吗?我试过用较低的波特率还是出问题,而且我做实验的时候上下位机离得非常近啊,就在一张桌子上。
WAN 2012-03-21
  • 打赏
  • 举报
回复
            while (serialPort1.BytesToRead > 0)    //加上这句
{
parameter_num = parameter_num + 1;
buff[parameter_num - 1] = serialPort1.ReadByte();
}
bdmh 2012-03-21
  • 打赏
  • 举报
回复
如果你确认每次都是发行固定大小的数据的话,调整参数试试,曾经遇到过,同样的时间延时,在慢机器和快机器上效果不一样,经常会丢数据

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧