【WPF开发】上位机开发-串口收发
一、引言
在现代工业控制、嵌入式系统等领域,串口通信作为一种常见的通信方式,被广泛应用于各种场景。C#作为一门强大的编程语言,结合Windows Presentation Foundation(WPF)框架,可以轻松实现串口通信功能。本文将带领大家一步步实现C# WPF串口通信,并在控制台打印接收到的数据。
二、环境准备
在开始编写代码之前,请确保您的开发环境满足以下条件:
- 安装Visual Studio 2019或更高版本。
- 创建一个WPF应用程序项目。
三、实现步骤
1.初始化串口
首先,我们需要创建一个SerialPort对象,并对其进行配置。以下是一个初始化串口的示例方法:
public bool InitCOM(string PortName)
{serialPort = new SerialPort(PortName, 115200, Parity.None, 8, StopBits.One);serialPort.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived);serialPort.ReceivedBytesThreshold = 1;serialPort.RtsEnable = true;return OpenPort();
}
在这段代码中,我们设置了串口的名称、波特率、校验位、数据位和停止位。同时,我们为serialPort对象订阅了DataReceived事件,以便在接收到数据时进行处理。
2.打开串口
接下来,我们需要编写一个方法来打开串口。以下是一个打开串口的示例方法:
public bool OpenPort()
{try{serialPort.Open();}catch (Exception ex){MessageBox.Show($"无法打开串口: {ex.Message}");return false;}return serialPort.IsOpen;
}
在这段代码中,我们尝试打开串口,并在打开失败时捕获异常,显示错误信息。
3.接收数据并打印到控制台
当串口接收到数据时,会触发DataReceived事件。我们可以在事件处理程序中读取数据,并将其打印到控制台。以下是一个处理数据接收的示例方法:
private void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{int bytesToRead = serialPort.BytesToRead;byte[] readBuffer = new byte[bytesToRead];serialPort.Read(readBuffer, 0, bytesToRead);string str = Encoding.Default.GetString(readBuffer);Dispatcher.Invoke(() =>{MessageBox.Show(str);});Console.WriteLine(str);
}
在这段代码中,我们首先读取串口缓冲区中的数据,然后将其转换为字符串。接着,我们在UI线程上显示一个消息框,并在控制台上打印接收到的数据。
4.发送数据
最后,我们来实现发送数据的功能。以下是一个发送数据的示例方法:
public void SendCommand(string CommandString)
{if (serialPort != null && serialPort.IsOpen){byte[] WriteBuffer = Encoding.ASCII.GetBytes(CommandString);serialPort.Write(WriteBuffer, 0, WriteBuffer.Length);}else{MessageBox.Show("串口未打开,无法发送数据。");}
}
在这段代码中,我们首先检查串口是否已打开,然后发送指定的字符串。
四、总结
通过本文,我们介绍了如何在C# WPF应用程序中实现串口通信,包括初始化串口、打开串口、接收数据、发送数据以及在控制台打印接收到的数据。掌握这些基本技巧,将为您的WPF串口通信项目开发带来极大便利。在实际应用中,您可以根据需求对代码进行优化和扩展,以满足更复杂的功能需求。
界面还在编写中。。。。。
最终代码:
using System;
using System.IO.Ports;
using System.Text;
using System.Windows;
//必要的库public SerialPort serialPort { get; set; }public MainWindow(){InitializeComponent();if (InitCOM("COM9")){Console.WriteLine("Hello, World!");SendCommand("asdasdasd"); // 发送字符}}public bool InitCOM(string PortName){serialPort = new SerialPort(PortName, 115200, Parity.None, 8, StopBits.One);serialPort.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived);serialPort.ReceivedBytesThreshold = 1;serialPort.RtsEnable = true;return OpenPort();}private void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e){int bytesToRead = serialPort.BytesToRead; // 获取实际可读的字节数byte[] readBuffer = new byte[bytesToRead]; // 根据实际可读的字节数分配缓冲区serialPort.Read(readBuffer, 0, bytesToRead); // 读取数据string str = Encoding.Default.GetString(readBuffer); // 将字节数组转换为字符串// 在UI线程上显示消息框Dispatcher.Invoke(() =>{MessageBox.Show(str);});Console.WriteLine(str); // 打印到控制台}public bool OpenPort(){try{serialPort.Open();}catch (Exception ex){MessageBox.Show($"无法打开串口: {ex.Message}");return false;}return serialPort.IsOpen;}public void SendCommand(string CommandString){if (serialPort != null && serialPort.IsOpen){byte[] WriteBuffer = Encoding.ASCII.GetBytes(CommandString);serialPort.Write(WriteBuffer, 0, WriteBuffer.Length);}else{MessageBox.Show("串口未打开,无法发送数据。");}}// 在窗口关闭时,确保串口被关闭protected override void OnClosed(EventArgs e){base.OnClosed(e);if (serialPort != null && serialPort.IsOpen){serialPort.Close();}}
相关文章:
【WPF开发】上位机开发-串口收发
一、引言 在现代工业控制、嵌入式系统等领域,串口通信作为一种常见的通信方式,被广泛应用于各种场景。C#作为一门强大的编程语言,结合Windows Presentation Foundation(WPF)框架,可以轻松实现串口通信功能…...
ubuntu开启 远程登录 允许root远程登录
如果没有22端口服务 sudo apt update sudo apt install openssh-server sudo ufw allow.ssh sudo passwd root 修改配置文件 sudo vim /etc/ssh/sshd_config Port 22 修改为 Port 22 #PermitRootLogin prohibit-password 修改为 PermitRootLogin yes service ssh restart …...
《昇思25天学习打卡营第23天|RNN实现情感分类》
使用RNN进行情感分类:基于IMDB数据集的LSTM应用 引言 情感分析是自然语言处理(NLP)中的一个重要应用,广泛用于电影评论、社交媒体等文本数据的情感分类任务。本文将介绍如何使用递归神经网络(RNN)实现情感…...
机械设计基础B(学习笔记)
绪论 机构:是一些具备各自特点的和具有确定的相对运动的基本组合的统称。 组成机构的各个相对运动部分称为构件。构件作为运动单元,它可以是单一的整体,也可以是由几个最基本的事物(通常称为零件)组成的刚性结构。 构件…...
MybatisPlusException: Error: Method queryTotal execution error of sql 的报错解决
项目场景: 相关背景: 开发环境 开发系统时 系统页面加载正常 ,发布运行环境后运行一段时间,前端页面 突然出现 报错信息, 报错信息如下: MybatisPlusException: Error: Method queryTotal execution erro…...
人工智能领域的顶尖影响力人物(部分代表)
人工智能(AI)是模拟人类智能过程的计算机系统或机器的理论和开发。它致力于创建能够执行需要人类智能的任务的机器,如视觉感知、语音识别、决策制定和翻译之间的语言。AI领域包括机器学习、深度学习、自然语言处理等子领域,并涉及…...
Python:jsonl文件转json文件,并做字段处理
在使用LLaMA-Factory对shenzhi-wang/Llama3-8B-Chinese-Chat(https://huggingface.co/shenzhi-wang/Llama3-8B-Chinese-Chat/tree/main)进行微调时,希望使用COIG-CQIA的小红书数据集(https://huggingface.co/datasets/m-a-p/COIG-…...
安全产品在防御勒索病毒中的作用
在数字时代,网络安全威胁日益严峻,其中勒索病毒尤为猖獗,它通过加密受害者的数据并要求赎金换取解密密钥,给个人和企业带来了巨大的经济损失。然而,关于安全产品是否真正有效的问题一直存在争议。本文将通过一个模拟实…...
NVIDIA 完全过渡到开源 GPU 内核模块
目录 支持的 GPU安装程序更改将包管理器与 CUDA 元包配合使用使用 runfile使用安装帮助程序脚本包管理器详细信息apt:基于 Ubuntu 和 Debian 的发行版dnf:Red Hat Enterprise Linux、Fedora、Kylin、Amazon Linux 或 Rocky Linuxzypper:SUSE …...
learning-cxx 学习cpp 环境配置 + bug解决
学习CPP网址 https://github.com/LearningInfiniTensor/learning-cxx 安装环境 1.配置xmake的环境 xmake是c的构建工具 最简单的配置方法就是安装mcvs,然后选择必要的那两个包 查看版本,是否安装成功 gcc --version g --version2.安装xmake 我的是…...
PHP 多线程和异步编程的常见陷阱
本文由 ChatMoney团队出品 在PHP开发中,多线程和异步编程是提高应用性能和响应速度的重要手段。然而,这些技术也带来了许多挑战和陷阱,如共享状态冲突、死锁、超时、资源泄漏以及调试困难等。本文将详细探讨这些陷阱,并提供相应的…...
STL 哈希 学习总结
概述 基础概念 哈希是通过特定的算法,将任意长度的数据映射为固定长度的数据串中。该映射的结果就被称为哈希值,也可以称为散列值。 例如在存储一个10000这个数据的时候,如果使用数组的话,则需要开辟对应大小空间内存ÿ…...
vue3页面编写-导入导出excel、展开查询项等
数据保持 <router-view v-slot"{ Component, route }"><keep-alive><component :is"Component" :key"route.name" v-if"route.meta.keepAlive" /></keep-alive><component :is"Component" :key…...
Java学习 - Spring Boot整合 Thymeleaf 实例
什么是 Thymeleaf Thymeleaf 是新一代的 Java 模板引擎,类似于 Velocity、FreeMarker 等传统引擎,其语言和 HTML 很接近,而且扩展性更高; Thymeleaf 的主要目的是将优雅的模板引入开发工作流程中,并将 HTML 在浏览器中…...
ubuntu20.04安装终端终结者并设置为默认终端
1、安装 terminator sudo apt-get install terminator 2、Ctrl Alt T 试一下打开什么终端,我的默认启动的是terminator;如果想换换默认的终端,还需以下一步 3、安装dconf-tools,这个是设置默认终端的必须 sudo apt-get install dconf-tools…...
以Zookeeper为例 浅谈脑裂与奇数节点问题
一、脑裂现象的定义与影响 脑裂(split-brain)是指在分布式系统中,因网络分区或其他故障导致系统被切割成两个或多个相互独立的子系统,每个子系统可能独立选举出自己的领导节点。这一现象在依赖中心领导节点(如Elastic…...
最新版kubeadm搭建k8s(已成功搭建)
kubeadm搭建k8s(已成功搭建) 环境配置 主节点 k8s-master:4核8G、40GB硬盘、CentOS7.9(内网IP:10.16.64.67) 从节点 k8s-node1: 4核8G、40GB硬盘、CentOS7.9(内网IP:10…...
C++学习笔记-友元函数的定义与使用
一、引言 在C中,友元函数(Friend Function)是一个独特而强大的特性,它打破了类的封装性,允许一个或多个非成员函数访问类的私有(private)和保护(protected)成员。尽管这…...
熵、交叉熵、KL散度
这里写目录标题 熵KL散度引入交叉熵。交叉熵的二分类公式: 再次理解SoftMax函数结束 熵 熵,是一个物理上的概念,表示一个系统的不确定性程度,或者表示一个系统的混乱程序。 下边是信息熵的演示: 信息熵的公式如下&…...
THS配置keepalive(yjm)
启动完THS管理控制台和THS后,登录控制台,进入实例管理》节点管理,可以分别使用界面配置和编辑配置设置长连接。 1、界面配置 点击界面配置》集群设置,启用长连接,设置长连接数、最大请求数和超时时间。 2、编辑配置 …...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...
LOOI机器人的技术实现解析:从手势识别到边缘检测
LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...
热烈祝贺埃文科技正式加入可信数据空间发展联盟
2025年4月29日,在福州举办的第八届数字中国建设峰会“可信数据空间分论坛”上,可信数据空间发展联盟正式宣告成立。国家数据局党组书记、局长刘烈宏出席并致辞,强调该联盟是推进全国一体化数据市场建设的关键抓手。 郑州埃文科技有限公司&am…...
