关于串口数据解析 并且显示到相应的控件中
设计页面如下写着写着 到了提取数据到lable 控件上面就不会了,求有经验的前辈们指点迷津!我当前遇到的问题是;我只会读到的整体的数据,关于里面 温度,湿度, 气压的数据 不知道怎么从整体的数据里面提取出来!
目前就是卡死在这里 !{:301_999:} 你提取到的整体数据什么样子
你这个程序用labview写的吗 zhangwei1997 发表于 2021-9-9 14:39
你提取到的整体数据什么样子
16 进制的数据 小魔鬼 发表于 2021-9-9 14:40
你这个程序用labview写的吗
c#winform vs.net吗?你获取到的整体数据分割截取一下 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;
namespace 环境测量系统
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
string str = serialPort1.ReadExisting();
label3.Text = str;
}
private void button1_Click(object sender, EventArgs e)
{
if (button1.Text == "打开端口")
{
try
{
serialPort1.PortName = comboBox1.Text;
serialPort1.BaudRate = Convert.ToInt32(comboBox2.Text);
serialPort1.StopBits = StopBits.One;
serialPort1.Open();
comboBox1.Enabled = false;
comboBox2.Enabled = false;
button1.BackColor = Color.Red;
button1.Text = "关闭端口";
}
catch
{
MessageBox.Show("端口打开失败!请检查!");
}
}
else
{
try
{
serialPort1.Close();
comboBox1.Enabled = true;
comboBox2.Enabled = true;
button1.BackColor = Color.Lime;
button1.Text = "打开端口";
}
catch
{
MessageBox.Show("端口打开失败!");
}
}
}
private void button3_Click(object sender, EventArgs e)
{
serialPort1.Close();
this.Close();
}
private void button4_Click(object sender, EventArgs e)
{
if(serialPort1.IsOpen)
{
byte [] data = new byte ;
data = 01;
serialPort1.Write(data, 0, 1);
int length = serialPort1.BytesToRead;
byte[] getdata = new byte;
serialPort1.Read(getdata, 0, length);
//byte[] value = new byte;
//serialPort1.Read(value,0,length);
//string str = Convert.ToString(value, 16).ToUpper();
}
}
private void button2_Click(object sender, EventArgs e)
{
label10.Text = "校准中!请稍后!";
}
}
}
xzcnmb 发表于 2021-9-9 14:45
using System;
using System.Collections.Generic;
using System.ComponentMod ...
代码给大家看下 int length = serialPort1.BytesToRead;
byte[] getdata = new byte;
serialPort1.Read(getdata, 0, length);
这是读取数据的代码片段 把读到的数据显示出来就可以了,比方说显示在TextBox ,ListBox里面 在多线程编程中,我们经常要在工作线程中去更新界面显示,而在多线程中直接调用界面控件的方法是错误的做法,Invoke 和 BeginInvoke 就是为了解决这个问题而出现的,使你在多线程中安全的更新界面显示。
正确的做法是将工作线程中涉及更新界面的代码封装为一个方法,通过 Invoke 或者 BeginInvoke 去调用,两者的区别就是一个导致工作线程等待,而另外一个则不会。
页:
[1]
2