Code Bye

c#本人写的一个串口 可是返回值会出现返回不一样的情况

第一次
后面几次中的一次
返回的数据应该是at,但是返回的是YQB0AA==,而且第二次按发送会变
波特率硬件均没有问题
下面是发送代码主体
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
comm.NewLine = “\r\n”;
comm.RtsEnable = true;
comm.PortName = “COM3”;
comm.BaudRate = 115200;
comm.DataReceived += new SerialDataReceivedEventHandler(timerReadCom_Tick);
linkCom();

}
public void linkCom()
{
//关闭时点击则后打开
try
{

comm.Open();

//timerReadCom.Enabled = true;
MessageBox.Show(“串口连接成功”);

}
catch(Exception ex)
{
comm = new SerialPort();//捕获到异常信息,创建一个comm的对象
MessageBox.Show(ex.Message);//显示异常信息给用户
this.Close();
}
}
//串口数据接收控制
private void timerReadCom_Tick(object sender, SerialDataReceivedEventArgs e)
{
try
{

int n = comm.BytesToRead;//记录缓存数量
byte [] buf = new byte[n];//声明一个临时数组储存当前来的串口数据
comm.Read(buf,0,n);//读取缓冲数据
builder.Remove(0,builder.Length);//清除字符串构造器的内容
//原因是要访问ui资源,所以需要invoke方法同步ui。
this.Invoke((EventHandler)(delegate
{
//直接按ASC11规则转换成字符
builder.Append(Encoding.ASCII.GetString(buf));
if (builder.ToString().Length > 0)
{
//MessageBox.Show(buf.ToString());
//byte[] buf = Convert.FromBase64String(comm.ReadLine());
textBox2.Text = Encoding.ASCII.GetString(buf);
}

}));
}
catch(Exception ex)
{
MessageBox.Show(“串口信息错误” + ex.Message);
}
}

//发送
private void button1_Click(object sender, EventArgs e)
{
try
{
byte[] data = Encoding.Unicode.GetBytes(textBox1.Text);
string str = Convert.ToBase64String(data);
comm.WriteLine(str);
//MessageBox.Show(“数据发送成功”, “系统提示”);
//string SendStr = textBox1.Text + “\r”;//获取要发送的数据,并且添加回车键
if (this.comm.IsOpen)
this.comm.Write(str);//发送数据
else
MessageBox.Show(“串口已关闭”);
Console.WriteLine(“发送信息;” + str);

}
catch (Exception ex)
{
Console.WriteLine(“信息发送错误:” + ex.Message);
}

}

解决方案

30

引用

 string str = Convert.ToBase64String(data);
comm.WriteLine(str);
//MessageBox.Show(“数据发送成功”, “系统提示”);
//string SendStr = textBox1.Text + “\r”;//获取要发送的数据,并且添加回车键
if (this.comm.IsOpen)
this.comm.Write(str);//发送数据
else
MessageBox.Show(“串口已关闭”);

感觉发送数据怪怪的。
改成comm.Write(data,0,data.Length);试试

5

发byte数组试下

5

//直接按ASC11规则转换成字符
builder.Append(Encoding.ASCII.GetString(buf));
if (builder.ToString().Length > 0)
{
//MessageBox.Show(buf.ToString());
//byte[] buf = Convert.FromBase64String(comm.ReadLine());

textbox2.text.append(Encoding.ASCII.GetString(buf)); }
把全部接收到的都打印出来看看,感觉应该是接收出问题


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明c#本人写的一个串口 可是返回值会出现返回不一样的情况