xzcnmb 发表于 2021-9-9 14:29

关于串口数据解析 并且显示到相应的控件中

设计页面如下写着写着 到了提取数据到lable 控件上面就不会了,求有经验的前辈们指点迷津!
我当前遇到的问题是;我只会读到的整体的数据,关于里面 温度,湿度, 气压的数据 不知道怎么从整体的数据里面提取出来!
目前就是卡死在这里 !{:301_999:}

zhangwei1997 发表于 2021-9-9 14:39

你提取到的整体数据什么样子

小魔鬼 发表于 2021-9-9 14:40

你这个程序用labview写的吗

xzcnmb 发表于 2021-9-9 14:42

zhangwei1997 发表于 2021-9-9 14:39
你提取到的整体数据什么样子

16 进制的数据

xzcnmb 发表于 2021-9-9 14:43

小魔鬼 发表于 2021-9-9 14:40
你这个程序用labview写的吗

c#winform

Takitooru 发表于 2021-9-9 14:44

vs.net吗?你获取到的整体数据分割截取一下

xzcnmb 发表于 2021-9-9 14:45

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:48

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);
               
这是读取数据的代码片段

kenxy 发表于 2021-9-9 14:52

把读到的数据显示出来就可以了,比方说显示在TextBox ,ListBox里面

kenxy 发表于 2021-9-9 15:06

在多线程编程中,我们经常要在工作线程中去更新界面显示,而在多线程中直接调用界面控件的方法是错误的做法,Invoke 和 BeginInvoke 就是为了解决这个问题而出现的,使你在多线程中安全的更新界面显示。

正确的做法是将工作线程中涉及更新界面的代码封装为一个方法,通过 Invoke 或者 BeginInvoke 去调用,两者的区别就是一个导致工作线程等待,而另外一个则不会。
页: [1] 2
查看完整版本: 关于串口数据解析 并且显示到相应的控件中