C#串口数据读取,显示不出数据,可以读到,新手求大神

白三儿 2017-07-31 11:19:04
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;

namespace WindowsFormsApplication8
{
public partial class Form1 : Form
{

//int i;
int[] str = new int[18];

public Form1()
{
InitializeComponent();
}
private void btnport_Click(object sender, EventArgs e)
{
if (serialPort1.IsOpen)
{
serialPort1.Close();
}
serialPort1.Open();

}

private void Form1_Load(object sender, EventArgs e)
{

foreach (string s in System.IO.Ports.SerialPort.GetPortNames())
{
comboport.Items.Add(s);
}
comboport.SelectedIndex = 3;
comboburden.SelectedIndex = 5;
combodate.SelectedIndex = 3;
combojiaoyan.SelectedIndex = 0;
combostop.SelectedIndex = 0;

serialPort1.BaudRate = 19200;
serialPort1.DataBits = 8;
serialPort1.StopBits = StopBits.One;
serialPort1.Parity = Parity.None;

}

private void btnsend_Click(object sender, EventArgs e)
{
serialPort1.WriteLine(textsend.Text); //这里有点小问题发送过去规定协议数据后不返回,只能先用串口调试助手返回
}



private void btnclose_Click(object sender, EventArgs e)
{
serialPort1.Close();
}

private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
try
{

byte[] read = new byte[36];
int count = serialPort1.Read(read, 0, read.Length);
for (int i = 0; i < read.Length; i++)
{
string str1 = null;
if (read[i] == 0xff)
{
str[0] = read[i];
str[1] = read[i + 1];
str[2] = read[i + 2];
str[3] = read[i + 3];
str[4] = read[i + 4];
str[5] = read[i + 5];
str[6] = read[i + 6];
str[7] = read[i + 7];
str[8] = read[i + 8];
str[9] = read[i + 9];
str[10] = read[i + 10];
str[11] = read[i + 11];
str[12] = read[i + 12];
str[13] = read[i + 13];
str[14] = read[i + 14];
str[15] = read[i + 15];
str[16] = read[i + 16];
str[17] = read[i + 17];
for (int h = 0; h < str.Length; h++)
{
str1 += str[h].ToString("X2")+" ";
}

richreceived.Text += str1.ToString()+"/r/n"; //显示运行到这里代码停滞,也不显示到接收的文本框,肯定出错了

}
}


}
catch (Exception)
{
string ca = "";
}


}



}
}
...全文
221 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ilikeff8 2017-07-31
  • 打赏
  • 举报
回复
引用 4 楼 qq_34802554 的回复:
[quote=引用 3 楼 ilikeff8 的回复:] portname是在界面上设置的吗,默认是com1 serialPort1.WriteLine(textsend.Text); //这里有点小问题发送过去规定协议数据后不返回,只能先用串口调试助手返回 这不是问题,不能收发同一个串口 八成是str1=null了
我代码写死了portname,com5, 不能收发同一个串口不太懂我去查查, str1可是我调试的时候可以转换成16进制,但是转换不到text里[/quote] 这样呢 this.Invoke((Action)(() => { richreceived.Text += str1.ToString()+"/r/n"; }));
白三儿 2017-07-31
  • 打赏
  • 举报
回复
引用 3 楼 ilikeff8 的回复:
portname是在界面上设置的吗,默认是com1 serialPort1.WriteLine(textsend.Text); //这里有点小问题发送过去规定协议数据后不返回,只能先用串口调试助手返回 这不是问题,不能收发同一个串口 八成是str1=null了
我代码写死了portname,com5, 不能收发同一个串口不太懂我去查查, str1可是我调试的时候可以转换成16进制,但是转换不到text里
ilikeff8 2017-07-31
  • 打赏
  • 举报
回复
portname是在界面上设置的吗,默认是com1 serialPort1.WriteLine(textsend.Text); //这里有点小问题发送过去规定协议数据后不返回,只能先用串口调试助手返回 这不是问题,不能收发同一个串口 八成是str1=null了
白三儿 2017-07-31
  • 打赏
  • 举报
回复
引用 1 楼 beichenzhan 的回复:
代码没详细看,但是出错的话你就不应该把catch屏蔽了,写成 catch (Exception a) { MessageBox.ShowText(a.Message); } 看下错误描述再试下把
catch我没屏蔽吧,,,,,,注释是我刚加上去的,代码里全文无注释,错误是从不是rich的线程访问,我不知道怎么改新手哭
北辰斩 2017-07-31
  • 打赏
  • 举报
回复
代码没详细看,但是出错的话你就不应该把catch屏蔽了,写成 catch (Exception a) { MessageBox.ShowText(a.Message); } 看下错误描述再试下把
白三儿 2017-07-31
  • 打赏
  • 举报
回复
引用 5 楼 ilikeff8 的回复:
[quote=引用 4 楼 qq_34802554 的回复:] [quote=引用 3 楼 ilikeff8 的回复:] portname是在界面上设置的吗,默认是com1 serialPort1.WriteLine(textsend.Text); //这里有点小问题发送过去规定协议数据后不返回,只能先用串口调试助手返回 这不是问题,不能收发同一个串口 八成是str1=null了
我代码写死了portname,com5, 不能收发同一个串口不太懂我去查查, str1可是我调试的时候可以转换成16进制,但是转换不到text里[/quote] 这样呢 this.Invoke((Action)(() => { richreceived.Text += str1.ToString()+"/r/n"; }));[/quote] 谢谢,虽然已经解决了不过万分感谢笔芯

110,539

社区成员

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

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

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