C#winform上位机开发学习笔记6-串口助手的断帧功能添加

1.功能描述

按照设定时间对接收数据进行断帧(换行)

应用于需要接收完整数据包的场景,例如下位机发送一包数据为1秒,每100ms发送一组数据

大部分用于接收十六进制数据时

2.代码部分

步骤1:添加计时器,设置默认时间为500ms

步骤2:去掉断帧复选框默认使能

步骤3:设置断帧复选框时间集合

 步骤4:开启HEX接收数据选择框时

//当开启HEX接收时事件private void checkBox16_CheckedChanged(object sender, EventArgs e){//启动与禁用断帧功能if (checkBox16.Checked == true){comboBox16.Enabled = true;//使能断帧时间复选框//设定定时参数timer4.Interval = Convert.ToUInt16(comboBox16.Text, 10);//启动定时器4timer4.Start();}else{comboBox16.Enabled = false;//停止定时器4timer4.Stop();}}

步骤5:编写定时器事件

定义局部变量声明

//断帧定时器事件private void timer4_Tick(object sender, EventArgs e){Timer4_Flag = true;//置位定时器4标志位}

步骤6:串口接收事件中添加代码

                    //断帧功能if (Timer4_Flag == true){Timer4_Flag = false;textBox1.AppendText("\r\n");textBox1.AppendText("[" + DateTime.Now.ToString("HH:mm:ss") + "]" + "->");}

步骤7:断帧复选时间设置

//断帧复选框事件_选择断帧时间private void comboBox16_SelectedIndexChanged(object sender, EventArgs e){//设定定时参数//将组合框中的数据转换为整型赋值给定时器参数timer4.Interval = Convert.ToUInt16(comboBox16.Text, 10);}

3.完整代码

        //用于串口通讯断帧bool Timer4_Flag = false;//串口接收事件private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e){//接收格式为ASCII码if (!checkBox16.Checked)//复用框没有被选择时{try{textBox1.AppendText("[" + DateTime.Now.ToString("HH:mm:ss") + "]" + "->");string str = serialPort1.ReadExisting();//将接收到的数据存在自定义的字符串变量中textBox1.AppendText(str + "\r\n");//统计接收字节数UInt32 RBytes = Convert.ToUInt32(textBox7.Text, 10);//定义接收字节数变量,并初始化为已接收字节数RBytes += (UInt32)str.Length;//加ASCII码字节数textBox7.Text = Convert.ToString(RBytes, 10);//显示总接收字节数}catch{textBox1.AppendText("[" + DateTime.Now.ToString("HH:mm:ss") + "]" + "->");textBox1.AppendText("ASCII格式接收错误!\r\n");}}//接收格式为HEXelse{try{//断帧功能if (Timer4_Flag == true){Timer4_Flag = false;textBox1.AppendText("\r\n");textBox1.AppendText("[" + DateTime.Now.ToString("HH:mm:ss") + "]" + "->");}//textBox1.AppendText("[" + DateTime.Now.ToString("HH:mm:ss") + "]" + "->"); //此处被断帧功能替代换行byte[] data = new byte[serialPort1.BytesToRead];//定义接收缓冲区,长度为串口接收的数据长度serialPort1.Read(data, 0, data.Length);//形参,起始位置,终止位置,将读取的数据存放在缓冲区//遍历用法foreach (byte Member in data)//循环函数{string str = Convert.ToString(Member, 16).ToUpper();//转化为十六进制大写textBox1.AppendText((str.Length == 1 ? "0" + str : str) + " ");//数据+空格“”}//textBox1.AppendText("\r\n"); //此处被断帧功能替代换行//统计接收字节数UInt32 RBytes = Convert.ToUInt32(textBox7.Text, 10);//定义接收字节数变量,并初始化为已接收字节数RBytes += (UInt32)data.Length;//加HEX字节数textBox7.Text = Convert.ToString(RBytes, 10);//显示总接收字节数}catch{textBox1.AppendText("[" + DateTime.Now.ToString("HH:mm:ss") + "]" + "->");textBox1.AppendText("HEX格式接收错误!\r\n");}}}//当开启HEX接收时事件private void checkBox16_CheckedChanged(object sender, EventArgs e){//启动与禁用断帧功能if (checkBox16.Checked == true){comboBox16.Enabled = true;//使能断帧时间复选框//设定定时参数timer4.Interval = Convert.ToUInt16(comboBox16.Text, 10);//启动定时器4timer4.Start();}else{comboBox16.Enabled = false;//停止定时器4timer4.Stop();}}
//断帧定时器事件private void timer4_Tick(object sender, EventArgs e){Timer4_Flag = true;//置位定时器4标志位}
//断帧复选框事件_选择断帧时间private void comboBox16_SelectedIndexChanged(object sender, EventArgs e){//设定定时参数//将组合框中的数据转换为整型赋值给定时器参数timer4.Interval = Convert.ToUInt16(comboBox16.Text, 10);}}

4.测试结果

当下位机为500m定时发送,上位机设置断帧为500ms断帧时,接收的十六进制数据为500ms一帧数据,当设置上位机断帧时间为1s时,接收的十六进制一帧数据为下位机发送的两帧数据。

参考自B站硬件家园

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/642412.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Lingo数学建模基础

1.基本运算符 1.1算数运算符 1.2逻辑运算 #not# 否定操作数的逻辑值,一元运算符 #eq# 若两运算数相等,则为true,否则为false #ne# 若两运算数不相等,则为true,否则为false #gt# 若左边运算数严格大于右边,则为true,否则为…

了解云工作负载保护:技术和最佳实践

云工作负载是指云环境中的应用程序或存储元素,无论是公共云、私有云还是混合云。每个云工作负载都使用云的资源,包括计算、网络和存储。 云工作负载可以多种多样,例如运行应用程序、数据库或托管网站。它们可以是静态的或动态的,…

代码随想录刷题题Day41

刷题的第四十一天,希望自己能够不断坚持下去,迎来蜕变。😀😀😀 刷题语言:C Day41 任务 ● 583. 两个字符串的删除操作 ● 72. 编辑距离 ● 编辑距离总结篇 1 两个字符串的删除操作 583. 两个字符串的删除…

UI自动化定位元素之js操作

前言 在UI自动化测试中,元素定位是一个至关重要的步骤。准确地定位到页面上的元素,是实现自动化测试的前提和保障。本文将介绍使用JavaScript进行元素定位的常见方法,并分析页面的组成,帮助读者更好地理解和应用元素定位技术。 页…

MongoDB系列之一文总结索引

概述 分类 索引的分类: 按照索引包含的字段数量,可分为单键索引(单字段索引)和组合索引(联合索引、复合索引)按照索引字段的类型,可以分为主键索引和非主键索引按照索引节点与物理记录的对应…

NQA网络质量分析

概念 网络质量分析是设备上集成网络测试功能,不仅可以实现对网络运行情况的准确测试,还可以输出统计信息,有效的节约成本。 NQA可以检测网络上运行的各种协议的性能,使运营商能够实时采集到各种网络运行指标。 例如:HTTP的总时延、TCP连接时延、DNS解析时延、文件传输速…

行测-判断:2.类比推理

行测-判断:2.类比推理 给出一组相关的词,要求通过观察分析,在备选答案中找出一组与之在逻辑关系上最为贴近或相似的词。 1. 语义关系★★ 1.1 近义关系,反义关系 C,反义词 B,BD 都是近义词,考…

如何用Python常用魔术方法阅读源码?13组代码轻松了解!

在看 python 源码的过程中我们会经常看到一些特殊方法,也就是双下划线方法。其实双下划线方法是特殊方法,是由 python 解释器提供的具有特殊意义的方法,主要是 python 源码程序员使用的,我们在开发中尽量不要使用双下方法&#xf…

Element中的el-input-number+SpringBoot+mysql

1、编写模板 <el-form ref"form" label-width"100px"><el-form-item label"商品id&#xff1a;"><el-input v-model"id" disabled></el-input></el-form-item><el-form-item label"商品名称&a…

java抽象工厂实战与总结

文章目录 一、工厂模式&#xff08;三种&#xff09;1.简单工厂模式1.1 概念&#xff1a;1.2 使用场景&#xff1a;1.3 模型图解&#xff1a;1.4 伪代码&#xff1a; 2.工厂方法模式2.1 概念&#xff1a;2.2 使用场景&#xff1a;2.3 模型图解&#xff1a;2.4 伪代码 3.抽象工厂…

用户反映在浏览器中使用AI工具 Copilot 遇到严重卡顿问题,微软官方给出初步解释

近日&#xff0c;多位用户反馈在使用Edge和Chrome浏览器中的Copilot时出现卡顿问题&#xff0c;甚至需要重启浏览器才能解决。对此&#xff0c;微软广告和网络服务部门CEO米哈伊尔帕拉欣表示&#xff0c;问题可能与Edge浏览器的“效率模式”有关。 微软中国官方网址链接&#x…

黑马——Java学生管理系统

一、学生管理系统 学生管理系统 需求&#xff1a; 采取控制台的方式去书写学生管理系统。 loop:while(true){ for(){ break loop;//给while循环取名loop&#xff0c;break loop;可以跳出while循环 } } 或者使用System.exit(0);停止虚拟机运行&#xff0c;相当于让所有代码停…

【表情识别阅读笔记】Towards Semi-Supervised Deep FER with An Adaptive Confidence Margin

论文名&#xff1a; Towards Semi-Supervised Deep Facial Expression Recognition with An Adaptive Confidence Margin 论文来源&#xff1a; CVPR 发表时间&#xff1a; 2022-04 研究背景&#xff1a; 对大量图片或视频进行手工标注表情是一件极其繁琐的事情&#xff0c;因此…

Python 自动化办公:一键批量生成 PPT

Stata and Python 数据分析 一、导读 在实际工作中&#xff0c;经常需要批量处理Office文件&#xff0c;比如需要制作一个几十页的PPT进行产品介绍时&#xff0c;一页一页地制作不仅麻烦而且格式可能不统一。那么有什么办法可以一键生成PPT呢&#xff1f;Python提供的pptx 包…

05章【面向对象(下)】

文章目录 继承继承的基本概念继承的限制继承小结子类的实例化过程方法的重写super关键字继承的应用示例final关键字 抽象类接口多态性instanceof关键字抽象类和接口的应用抽象类应用—模板方法模式接口应用—策略模式 Object类模式简单工厂模式静态代理模式适配器模式 内部类数…

策略模式【结合Spring框架实践】

Hello!~大家好啊,很高兴我们又见面了,今天我们一起学习设计模式–【策略模式】 初次对此模式不懂的,或者想偷懒的,我强烈建议大家跟着我的一起把概念和代码一起敲一遍!~为啥子??因为我就是这样学会的,哈哈哈! 1.首先我们看下此模式的整体UML图 selector:选择器又叫做上下文co…

Netty篇章(1)—— 核心原理介绍

终于进入到Netty框架的环节了&#xff0c;前面介绍了大量的Java-NIO的内容&#xff0c;核心的内容Selector、Channel、Buffer、Reactor掌握了&#xff0c;那么学起来Netty也是水到渠成的事情。如果没有掌握前面的内容那么学Netty会非常吃力&#xff0c;下面讲解Netty核心原理与…

关于 LLM,你了解多少?

LLM定义 大语言模型&#xff08;LLM&#xff09;是一种基于大量文本数据训练的深度学习模型。它的主要功能是生成自然语言文本或理解语言文本的含义。这些模型可以处理多种自然语言任务&#xff0c;如文本分类、问答、对话等&#xff0c;是通向人工智能的一条重要途径。 LLM发…

美创荣登“2023大数据产业年度最具投资价值”榜单

近日&#xff0c;由上海市经济和信息化委员会、上海市科学技术委员会指导&#xff0c;数据猿和上海大数据联盟主办的“第六届金猿季&魔方论坛——大数据产业发展论坛”在沪隆重召开&#xff0c;并重磅揭晓《2023大数据产业年度最具投资价值》榜单。 美创科技凭借在数据安全…

k8s-kubectl常用命令

一、基础命令 1.1 get 查询集群所有资源的详细信息&#xff0c;resource包括集群节点、运行的Pod、Deployment、Service等。 1.1.1 查询Pod kubectl get po -o wid 1.1.2 查询所有NameSpace kubectl get namespace 1.1.3 查询NameSpace下Pod kubectl get po --all-namespaces…