吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1161|回复: 18
收起左侧

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

[复制链接]
xzcnmb 发表于 2021-9-9 14:29
设计页面如下  写着写着 到了提取数据到lable 控件上面就不会了,求有经验的前辈们指点迷津!
我当前遇到的问题是;我只会读到的整体的数据,关于里面 温度,湿度, 气压的数据 不知道怎么从整体的数据里面提取出来!
目前就是卡死在这里 !

点击获取数据按钮后将读取到设备返回的数据中的值分别显示到对应的控件中

点击获取数据按钮后将读取到设备返回的数据中的值分别显示到对应的控件中

这是设备具体发送和读取的数据指令

这是设备具体发送和读取的数据指令

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

zhangwei1997 发表于 2021-9-9 14:39
你提取到的整体数据什么样子
小魔鬼 发表于 2021-9-9 14:40
 楼主| xzcnmb 发表于 2021-9-9 14:42
 楼主| 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
[C#] 纯文本查看 复制代码
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 [1];
                data[0] = 01;
                serialPort1.Write(data, 0, 1);
              
                int length = serialPort1.BytesToRead;
                byte[] getdata = new byte[length];
                serialPort1.Read(getdata, 0, length);
                
               

 
                //byte[] value = new byte[length];
                //serialPort1.Read(value,0,length);
                //string str = Convert.ToString(value[length], 16).ToUpper();
            }

        }

        private void button2_Click(object sender, EventArgs e)
        {

            label10.Text = "校准中!请稍后!";
        }
    }
}
 楼主| xzcnmb 发表于 2021-9-9 14:48
xzcnmb 发表于 2021-9-9 14:45
[C#] 纯文本查看 复制代码
using System;
using System.Collections.Generic;
using System.ComponentMod ...[/quote]

代码给大家看下 [mw_shl_code=csharp,true]  int length = serialPort1.BytesToRead;
                byte[] getdata = new byte[length];
                serialPort1.Read(getdata, 0, length);
                

这是读取数据的代码片段
kenxy 发表于 2021-9-9 14:52
把读到的数据显示出来就可以了,比方说显示在TextBox ,ListBox里面
kenxy 发表于 2021-9-9 15:06
在多线程编程中,我们经常要在工作线程中去更新界面显示,而在多线程中直接调用界面控件的方法是错误的做法,Invoke 和 BeginInvoke 就是为了解决这个问题而出现的,使你在多线程中安全的更新界面显示。

正确的做法是将工作线程中涉及更新界面的代码封装为一个方法,通过 Invoke 或者 BeginInvoke 去调用,两者的区别就是一个导致工作线程等待,而另外一个则不会。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 23:02

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表