C# 串口控制 校验

1. 串口控制

using System;
using System.IO.Ports;
using System.Windows.Forms;namespace 串口控制
{public partial class Form1 : Form{//device1const byte DeviceOpen1 = 0x01;const byte DeviceClose1 = 0x81;//device2const byte DeviceOpen2 = 0x02;const byte DeviceClose2 = 0x82;//device3const byte DeviceOpen3 = 0x03;const byte DeviceClose3 = 0x83;//serialport write bufferbyte[] SerialPortDataBuffer = new byte[1];public Form1(){InitializeComponent();}//扫描并将串口添加至下拉列表private void button1_Click(object sender, EventArgs e){SearchAndAddSerialToComboBox(serialPort1, comboBox1);}private void Form1_Load(object sender, EventArgs e){SearchAndAddSerialToComboBox(serialPort1, comboBox1);}//将可用端口号添加到ComboBoxprivate void SearchAndAddSerialToComboBox(SerialPort MyPort, ComboBox MyBox){//最多容纳20个,太多会影响调试效率string Buffer;MyBox.Items.Clear();for(int i = 1; i < 20; i++){try{Buffer = "COM" + i.ToString();MyPort.PortName = Buffer;MyPort.Open();//如果失败后面代码不会执行MyBox.Items.Add(Buffer);MyPort.Close();}catch{}}MyBox.SelectedIndex = 0;}private void button2_Click(object sender, EventArgs e){if (serialPort1.IsOpen){try{serialPort1.Close();}catch{ }button2.Text = "打开串口";}else{try{serialPort1.PortName = comboBox1.Text;serialPort1.Open();button2.Text = "关闭串口";}catch{MessageBox.Show("串口打开失败", "错误");}}}private void WriteByteToSerialPort(byte data){byte[] Buffer = new byte[2] { 0x00, data };if (serialPort1.IsOpen){try{serialPort1.Write(Buffer, 0, 2);}catch{MessageBox.Show("串口数据发送出错,请检查", "错误");}}else{MessageBox.Show("串口未打开,请打开串口", "错误");}}private void button3_Click(object sender, EventArgs e){int i = 0;try{i = Convert.ToInt32(textBox1.Text.Substring(0, textBox1.Text.Length));}catch{MessageBox.Show("请输入正确的数字");return;}if (serialPort1.IsOpen){if(i == 0){return;}else{timer1.Interval = i * 1000;timer1.Start();button3.Enabled = false;}}WriteByteToSerialPort(DeviceOpen1);}private void button4_Click(object sender, EventArgs e){try{timer1.Stop();//如果定时器没开,则错误处理}catch{}button3.Enabled = true;WriteByteToSerialPort(DeviceClose1);}private void button5_Click(object sender, EventArgs e){WriteByteToSerialPort(DeviceOpen2);}private void button6_Click(object sender, EventArgs e){WriteByteToSerialPort(DeviceClose2);}private void button7_Click(object sender, EventArgs e){WriteByteToSerialPort(DeviceOpen3);}private void button8_Click(object sender, EventArgs e){WriteByteToSerialPort(DeviceClose3);}private void timer1_Tick(object sender, EventArgs e){button3.Enabled = true;timer1.Stop();WriteByteToSerialPort(DeviceClose1);}}
}

在这里插入图片描述

2. 带校验的串口开关控制

using System;
using System.Drawing;
using System.IO.Ports;
using System.Windows.Forms;namespace ReplyAndControl
{public partial class Form1 : Form{byte DataSended = 0;byte[] DataToSend = new byte[] { 0x01, 0x02, 0x03 };public Form1(){InitializeComponent();System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;serialPort1.DataReceived += new SerialDataReceivedEventHandler(SerialPortDataReveived);}private void SerialPortDataReveived(object sender, SerialDataReceivedEventArgs e){byte DataReceived = (byte)(serialPort1.ReadByte());//收到数据关闭定时器try{timer1.Stop();}catch{}SetButtonColor(DataReceived);}//判断数据校验是否成功private void SetButtonColor(int which){switch (which){case 0x01:button2.BackColor = Color.Green;break;case 0x11:button2.BackColor = Color.Red;break;case 0x02:button3.BackColor = Color.Green;break;case 0x12:button3.BackColor = Color.Red;break;case 0x03:button4.BackColor = Color.Green;break;case 0x13:button4.BackColor = Color.Red;break;case 0x04:button2.BackColor = Color.Green;button3.BackColor = Color.Green;button4.BackColor= Color.Green;break;case 0x14:button2.BackColor = Color.Red;button3.BackColor = Color.Red;button4.BackColor = Color.Red;break;default:break;}}private void Button_Click(object sender, EventArgs e){Button MyButton = (Button)sender;DataSended = Convert.ToByte(MyButton.Tag);//MyButton.Enabled = false;SendDataToSerialPort(serialPort1, DataToSend[DataSended - 1]);}private void SendDataToSerialPort(SerialPort MyPort, byte DataToSend){byte[] DatasToWrite = new byte[] { DataToSend };if (serialPort1.IsOpen){try{MyPort.Write(DatasToWrite, 0, 1);timer1.Interval = 3 * 1000;timer1.Start();}catch{MessageBox.Show("串口数据写入错误", "错误");}}}private void timer1_Tick(object sender, EventArgs e){string MyStr = DataSended.ToString() + "路数据校验超时,请检查";timer1.Stop();MessageBox.Show(MyStr, "错误");}private void button1_Click(object sender, EventArgs e){if (serialPort1.IsOpen){try{serialPort1.Close();}catch{}button1.Text = "打开串口";}else{try{serialPort1.PortName = comboBox1.Text;serialPort1.Open();}catch{MessageBox.Show("串口打开错误,请检查", "错误");}button1.Text = "关闭窗口";}}private void Form1_Load(object sender, EventArgs e){string Buffer;comboBox1.Items.Clear();for (int i = 1; i < 20; i++){try{Buffer = "COM" + i.ToString();serialPort1.PortName = Buffer;serialPort1.Open();//如果失败后面代码不会执行comboBox1.Items.Add(Buffer);serialPort1.Close();}catch{}}comboBox1.SelectedIndex = 0;}}
}

在这里插入图片描述

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

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

相关文章

git 、shell脚本

git 文件版本控制 安装git yum -y install git 创建仓库 将文件提交到暂存 git add . #将暂存区域的文件提交仓库 git commit -m "说明" #推送到远程仓库 git push #获取远程仓库的更新 git pull #克隆远程仓库 git clone #分支&#xff0c;提高代码的灵活性 #检查分…

【C++进阶学习】第十一弹——C++11(上)——右值引用和移动语义

前言&#xff1a; 前面我们已经将C的重点语法讲的大差不差了&#xff0c;但是在C11版本之后&#xff0c;又出来了很多新的语法&#xff0c;其中有一些作用还是非常大的&#xff0c;今天我们就先来学习其中一个很重要的点——右值引用以及它所扩展的移动定义 目录 一、左值引用和…

step:菜单栏静态加载和动态加载

文章目录 文章介绍静态加载动态加载补充材料 文章介绍 对比静态加载和动态加载。 主界面main.qml之前使用的是动态加载&#xff0c;动态加载导致的问题&#xff1a;菜单栏选择界面切换时&#xff0c;之前的界面内容被清空。 修改方法&#xff1a;将动态加载改为静态加载 左边是…

九大原则,轻松构建个人高效SOP

1、原则一、工作汇报SOP SCQA模型(升职加薪的关键!&#xff09; 清晰定义问题和提出解决方案 类别 关键词 解读 S - Situation 情景 陈述项目背景&#xff0c;目标&#xff0c;愿景 C - Complication 冲突 讲卡点&#xff0c;讲冲突 Q - Question 疑问-问题 这些冲…

MyBatis基础配置

一、M y B a t i s 配 置 文 件 MyBatis配置文件的功能&#xff1a;构建SqlSessionFactory的依据 MyBatis配置文件的意义&#xff1a;MyBatis最为核心的内容&#xff0c;对MyBatis的使用影响很大。 MyBatis配置文件注意事项&#xff1a;配置文件的层次顺序不能颠倒&#xff0c;…

镜像制作和管理

文章目录 一、Docker镜像说明Docker镜像中没有内核为什么没有内核容器中的程序后台运行会导致此容器启动后立即退出镜像的生命周期和制作方式 二、手动构建镜像基于容器手动制作镜像步骤实际操作基于 busybox 制作httpd镜像制作tomcat镜像基于ubuntu的基础镜像手动安装nginx镜像…

Python基础教程(三)类和对象、异常处理和模块

8.类与对象 8.1 面向对象 面向对象的三大基本特征: 封装、继承、多态。 在面向对象编程中&#xff0c;封装&#xff08;Encapsulation&#xff09;是一种将数据和操作&#xff08;方法&#xff09;组合在一起的机制。通过封装&#xff0c;我们可以隐藏数据的具体实现细节&am…

RuoYi-Vue-Plus (多数据源注解使用、【手动、拦截器】切换数据源)

接上文多数据源配置&#xff1a; RuoYi-Vue-Plus (多数据源配置)-CSDN博客 一、功能演示 代码生成菜单页面&#xff0c; 展示数据源切换 查询主库 查询从库 二、前端传参切换数据源 页面路径&#xff1a; src/views/tool/gen/index.vue 搜索框如下&#xff1a;下面4发送请求时…

技术分享| 前端性能优化——虚拟滚动(Virtual Scroll)

前端遇到大量数据&#xff08;尤其是大数据表&#xff09;的DOM 渲染时&#xff0c;通常会卡顿&#xff0c;需要考虑优化性能问题&#xff0c;这里针对DOM 渲染引出“虚拟滚动”方案&#xff0c; 详细请在以下各文章中详细了解&#xff1a; vue插件 vue-virtual-scroll-list解决…

干货满满,从零到一:编程小白如何在大学成为编程大神?

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

ClickHouse 24.6 版本发布说明

本文字数&#xff1a;14127&#xff1b;估计阅读时间&#xff1a;36 分钟 作者&#xff1a;ClickHouse team 本文在公众号【ClickHouseInc】首发 又到了发布新版本的时间&#xff01; 发布概要 本次ClickHouse 24.6 版本包含了23个新功能&#x1f381;、24项性能优化&#x1f6…

嵌入式人工智能(39-基于树莓派4B的震动传感器和霍尔传感器)

这两个传感器实验比较简单&#xff0c;也都属于力传感器&#xff0c;就放一起做了。 1、震动传感器 震动传感器是一种用于检测和测量物体震动、振动和冲击的设备。它通常由一个敏感元件和一个信号处理单元组成。敏感元件可以是压电材料、光电材料、加速度传感器等。当物体发生…

【Git】git 从入门到实战系列(一)—— Git 的诞生,Linus 如何在 14 天内编写出 Git?

<> 博客简介&#xff1a;Linux、rtos系统&#xff0c;arm、stm32等芯片&#xff0c;嵌入式高级工程师、面试官、架构师&#xff0c;日常技术干货、个人总结、职场经验分享   <> 公众号&#xff1a;嵌入式技术部落   <> 系列专栏&#xff1a;C/C、Linux、rt…

golang JSON序列化

JSON JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 json历史 [外链图片转存失败,源站可能有防盗链机…

看不见的硝烟:中国网络安全三十年沉浮史

2022 年 5 月 16 日&#xff0c;俄罗斯黑客组织 KillNet 向包括美国、英国、德国在内 10 个国家的政府正式 “宣战”。 2022 年 4 月 28 日&#xff0c;一则消息刷屏&#xff0c;北京健康宝在使用高峰期间&#xff0c;遭受到境外网络攻击。北京健康宝保障团队进行了及时有效应…

4G/5G无线视频采集设备如何通过国标28181接入到视频监控接入平台(视频统一接入平台)

目录 一、国标GB/T 28181介绍 1、国标GB/T28181 2、内容和特点 二、4G/5G无线视频采集设备 1、定义 2、主要功能&#xff1a; 3、技术特点 4、应用场景 二、接入准备工作 1、确定网络环境 &#xff08;1&#xff09;公网接入 &#xff08;2&#xff09;专网传输 2、…

一款功能强大的免费开源卸载工具

BCUninstaller&#xff0c;也称为Bulk Crap Uninstaller&#xff08;简称BCU&#xff09;&#xff0c;是一款免费且开源的Windows平台专用程序卸载工具。它的主要功能是帮助用户高效地批量卸载不需要的应用程序和组件&#xff0c;从而优化系统性能。 BCUninstaller功能特点 批…

这本vue3编译原理开源电子书,初中级前端竟然都能看懂

前言 众所周知vue提供了很多黑魔法&#xff0c;比如单文件组件(SFC)、指令、宏函数、css scoped等。这些都是vue提供的开箱即用的功能&#xff0c;大家平时用这些黑魔法的时候有没有疑惑过一些疑问呢。 我们每天写的vue代码一般都是写在*.vue文件中&#xff0c;但是浏览器却只…

【大厂笔试】翻转、平衡、对称二叉树,最大深度、判断两棵树是否相等、另一棵树的子树

检查两棵树是否相同 100. 相同的树 - 力扣&#xff08;LeetCode&#xff09; 思路解透 两个根节点一个为空一个不为空的话&#xff0c;这两棵树就一定不一样了若两个跟节点都为空&#xff0c;则这两棵树一样当两个节点都不为空时&#xff1a; 若两个根节点的值不相同&#xff…

【数据结构】了解哈希表,解决哈希冲突,用Java模拟实现哈希桶

哈希表的概念 哈希表&#xff08;Hash Table&#xff09;是一种高效的数据结构&#xff0c;用于实现快速的数据存储和检索。它通过将数据映射到一个数组的索引位置&#xff0c;从而能够在平均情况下实现O(1)的时间复杂度进行查找、插入和删除操作。 哈希表的基本概念包括以下…