用C#写了一个串口程序,随时可能蓝屏。

baidu_37617089 2018-06-29 09:15:54
程序每秒发送两条指令,然后读回返回指令并做处理后在textbox里显示。
由于接收到的返回指令不是一整条发过来的,比如完整的一条是“A+B+C”,实际读到的是两条:“A+B+”和“C”,一开始我用的是全局数组来存接收到的数据,然后当数据达到指定长度后截断,把前面的拿去做后续处理,后面的留着继续存。但是经常蓝屏,而且是随机的,有时候刚开启就蓝屏,有时候是几十分钟后,几分钟后。我看了有人说全局变量会引发蓝屏,我就建了一个隐藏的textbox用来存数据,还是会蓝屏。
蓝屏错误代码是0x0000001E,并没有说哪里出问题了。
代码部分:
接收
private void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
int n = sp.BytesToRead;
byte[] buf = new byte[n];//声明一个临时数组存储当前来的串口数据
sp.Read(buf, 0, n);//读取缓冲数据
string temp = null, state = null;
this.Invoke((EventHandler)(delegate
{
textBox7.AppendText(Encoding.ASCII.GetString(buf).ToString());//用一个textbox来存,
}));
if(textBox7.Text.Length >= 10)
{
temp = textBox7.Text.Substring(1, 1);
state = textBox7.Text.Substring(3, 7);
if (temp == "a")
{
textBox5.Text = state.TrimStart('0'); //前台显示数据
}
if (temp == "b")
{
if(state == "0000")
state = "0";
else
{
state = state.TrimStart('0');
}
textBox4.Text = state;
}
buf = null;
textBox7.Text = textBox7.Text.Substring(10); temp = null; state = null;
}
}

发送
while (opened)
{
try
{
senddata = XXXX; //项目保密的原因,这里无法展示
sp.Write(senddata);
Thread.Sleep(1000); //我试过将这个数值设为10、20、50、100、500等等,都不行,接收到的要么是乱码要么全是?
senddata = YYYY;
sp.Write(senddata);
Thread.Sleep(1000); //而且设置成500运行起来超级卡,串口程序界面半天显示不全,一点一点的加载出现。
}
catch (Exception)
{
MessageBox.Show("串口连接断开!", "错误提示");
}
}
串口设置
sp = new SerialPort();
sp.PortName = cbxCOMPort.Text.Trim();//设置串口名
sp.BaudRate = Convert.ToInt32(9600);//设置串口的波特率
sp.StopBits = StopBits.One;
sp.DataBits = Convert.ToInt16(8);//设置数据位
sp.Parity = Parity.None;
sp.ReadTimeout = -1;//设置超时读取时间
sp.RtsEnable = true;
//定义 DataReceived 事件,当串口收到数据后触发事件
sp.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);
...全文
502 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
平底锅锅锅 2019-07-12
  • 打赏
  • 举报
回复
换串口线或换串口
Milianto 2019-07-12
  • 打赏
  • 举报
回复
串口需要打开这么多次吗?注意避免串口的打开关闭和发送接受数据同时发生。这样很容易蓝屏。
baishi1987 2018-08-22
  • 打赏
  • 举报
回复
while (opened)这个你是写在哪里的?上来就搞个无限循环?你应该写到异步线程里,不该放在窗体主线程搞这个
stherix 2018-08-22
  • 打赏
  • 举报
回复
蓝屏是串口驱动的问题
你这点代码何德何能可以引发蓝屏
qihao pang 2018-08-21
  • 打赏
  • 举报
回复
电脑蓝屏??电脑该换了
baidu_37617089 2018-07-02
  • 打赏
  • 举报
回复
没人来解答吗?

8,834

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 组件/控件开发
社区管理员
  • 组件/控件开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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