C#实现串口通讯
1、官网下载Launch Virtual Serial Port Driver Virtual Serial Port Driver - create and emulate virtual COM port,开个虚拟串口: Pair模式(一对,成双成对的意思,就是COM1向COM2传或者COM2向COM1,好比两台机器的COM口连起来了,一头一个),用"trial"实验模式就行。



2、用“小阳人”串口tcp工具测试下。
传送门
链接:https://pan.baidu.com/s/1ptQiCBhziXHfTM4hZ4XaFw
提取码:axw9
它长这样

一下子打开俩,模拟下,测测串口好使不。

互相发都能收到。ok

3、写winform程序,实现下。
页面效果(非常简易。。。)

直接上代码:
里面是三个按钮的实现,只用到一个其实。就是“从COM2向COM1发送数据”,“从COM1”我还是从"从COM2向COM1发送数据"又发了一遍,哈哈哈
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;namespace read6
{public partial class Form1 : Form{private static SerialPort _serialPort = null;//静态定义COM2private static SerialPort _serialPort1 = null;//静态定义COM1private static bool _continue;public Form1(){InitializeComponent();}public static void Read(){while (_continue){try{string message = _serialPort1.ReadLine();Console.WriteLine($"接收到消息:{message}");}catch (TimeoutException) { }}}//注册的接受事件private static void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e){SerialPort sp = (SerialPort)sender;string message = sp.ReadExisting();Console.WriteLine($"接收到消息:{message}");}private static void SerialPort_ErrorReceived(object sender, SerialErrorReceivedEventArgs e){Console.WriteLine($"串口消息错误类型:{e.EventType}");}//参数调试的按钮的点击事件,主要看下都是些啥默认值 比特率啥的private void button1_Click(object sender, EventArgs e){var _serialPort = new SerialPort();_serialPort.PortName = "COM2";foreach (var portName in SerialPort.GetPortNames()){Console.WriteLine($"可用端口:{portName}");}var defaultPortName = _serialPort.PortName;Console.WriteLine($"默认端口:{defaultPortName}");var defaultBaudRate = _serialPort.BaudRate;Console.WriteLine($"默认串行波特率:{defaultBaudRate}");var defaultParity = _serialPort.Parity;Console.WriteLine($"默认奇偶校验检查协议:{defaultParity}");foreach (var parity in Enum.GetNames(typeof(Parity))){Console.WriteLine($"可选奇偶校验检查协议:{parity}");}var defaultDataBits = _serialPort.DataBits;Console.WriteLine($"默认每个字节的标准数据位长度:{defaultDataBits}");var defaultStopBits = _serialPort.StopBits;Console.WriteLine($"默认每个字节的标准停止位数:{defaultStopBits}");foreach (var stopBit in Enum.GetNames(typeof(StopBits))){Console.WriteLine($"可选每个字节的标准停止位数:{stopBit}");}var defaultHandshake = _serialPort.Handshake;Console.WriteLine($"默认串行端口数据传输的握手协议:{defaultHandshake}");foreach (var handshake in Enum.GetNames(typeof(Handshake))){Console.WriteLine($"可选串行端口数据传输的握手协议:{handshake}");}}private static void PortDataAdapter_MessageReceived(object sender, PortMessageEventArgs e){}private void textBox1_TextChanged(object sender, EventArgs e){}//从COM2向COM1发送数据按钮的点击事件private void button2_Click(object sender, EventArgs e){if (_serialPort == null){_serialPort = new SerialPort();_serialPort.PortName = "COM2";_serialPort.Open();}if (_serialPort1 == null){_serialPort1 = new SerialPort();_serialPort1.PortName = "COM1";_serialPort1.Open();_serialPort1.DataReceived += new SerialDataReceivedEventHandler(SerialPort_DataReceived);//注册监听事件,COM1接收监听}Console.WriteLine($"串口是否开启:{_serialPort.IsOpen},端口名称:{_serialPort.PortName}");Console.WriteLine($"串口是否开启:{_serialPort1.IsOpen},端口名称:{_serialPort1.PortName}");_serialPort.WriteLine(textBox1.Text);Console.WriteLine("从COM2向COM1发送数据" + textBox1.Text);}//COM1发送的按钮实现private void button3_Click(object sender, EventArgs e){_serialPort.WriteLine(textBox2.Text);Console.WriteLine("从COM2向COM1发送数据" + textBox2.Text);}private void textBox2_TextChanged(object sender, EventArgs e){}}
}
效果打印:
点击“从COM2向COM1发送数据”
“read6.exe”(CLR v4.0.30319: read6.exe): 已加载“C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Xml\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“read6.exe”(CLR v4.0.30319: read6.exe): 已加载“C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\Accessibility\v4.0_4.0.0.0__b03f5f7f11d50a3a\Accessibility.dll”。
串口是否开启:True,端口名称:COM2
串口是否开启:True,端口名称:COM1
接收到消息:111111111111122从COM2向COM1发送数据111111111111122
串口是否开启:True,端口名称:COM2
串口是否开启:True,端口名称:COM1
接收到消息:43333从COM2向COM1发送数据43333
COM2发多少COM1收多少。

额 不知道为啥先打印的收到。。hh 。
源码传送门:sunyl/COM2toCOM1
参考乘风破浪大神的帖子:
https://www.cnblogs.com/taylorshi/p/16930251.html
相关文章:
C#实现串口通讯
1、官网下载Launch Virtual Serial Port Driver Virtual Serial Port Driver - create and emulate virtual COM port,开个虚拟串口: Pair模式(一对,成双成对的意思,就是COM1向COM2传或者COM2向COM1,好比两台机器的CO…...
NLP论文阅读记录 - 以大语言模型为参考学习总结
文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.相关工作2.1文本生成模型的训练方法2.2 基于LLM的自动评估2.3 LLM 蒸馏和基于 LLM 的数据增强 三.本文方法3.1 Summarize as Large Language Models3.1.1 前提3.1.2 大型语言模型作为参考具有…...
前端---资源路径
当我们使用img标签显示图片的时候,需要指定图片的资源路径,比如: <img src"images/logo.png">这里的src属性就是设置图片的资源路径的,资源路径可以分为相对路径和绝对路径。 1. 相对路径 从当前操作 html 的文档所在目录算…...
【2024考研】心情记录
今天是12.26日。距离24考研已经过去了2天,自认为缓过来了,故写下这篇文章。 25日早上简单过了一下答案,但实在是记不住答案了,不知道是我的脑子抵触还是怎的,像一块灰色的布遮住了我的记忆,羞于打开&#x…...
MySQL数据库日志管理和数据的备份及恢复
目录 MySQL日志管理 数据库备份的重要性 数据库备份的分类 从物理与逻辑的角度 从数据库的备份策略角度 常见的备份方法 物理冷备 专用备份工具mysqldump或mysqlhotcopy 启用二进制日志进行增量备份 第三方工具备份 MySQL完全备份与恢复 MySQL完全备份 物理冷备份与…...
node-schedule nodejs定时提醒(并判断段是否是工作日)
概述 工作中有个需求:在特定的时间发送一些消息,也就是说比如在每天的7点发送消息:该起床了。一开始我想用定时器每分钟每分钟的去查当前时间,但好像有点蠢,然后我找到了这个包 使用方法 安装 npm install node-sc…...
LeetCode 75| 前缀和
目录 1732 找到最高海拔 724 找到数组的中心下标 1732 找到最高海拔 class Solution { public:int largestAltitude(vector<int>& gain) {int res 0;int sum 0;for(int num : gain){sum num;res max(res,sum);}return res;} }; 时间复杂度O(n) 空间复杂度O(…...
智能,轻量,高效的爬虫工具 (爬虫宝第一代), HSpider
场景 之前玩爬虫宝一时爽,但是我很快发现了一个致命的问题。就是chat3.5 有时候误判,Claude2 是遇到大一点的html就无法解析,chat4 Api没有申请下来,chat3.5 误判这个可以纠正,但是每次爬取花费的钱都是2刀以上&#…...
IDEA Maven Helper插件 解决jar冲突
Jar包冲突报错 程序抛出java.lang.ClassNotFoundException异常; 程序抛出java.lang.NoSuchMethodError异常; 程序抛出java.lang.NoClassDefFoundError异常; 程序抛出java.lang.LinkageError异常等;Maven Jar包管理机制 在Maven项…...
装饰 Web3 项目的用户交互界面(Web3项目二实战之四)
用户交互界面是Web3项目必不可少的,毕竟,Web3项目最终是面向用户的,所以,Web3项目总得需要一个优美的UI界面,已达到用户在视觉上精彩盛宴。 诚然,一个Web3项目若到了用户交互界面,大体上,这个Web3项目也将告一段落了。 没错,Web3第二个项目,也将终结于本篇,顺势拉开…...
【数据库系统概论】第3章-关系数据库标准语言SQL(3)
文章目录 3.5 数据更新3.5.1 插入数据3.5.2 修改数据3.5.3 删除数据 3.6 空值的处理3.7 视图3.7.1 建立视图3.7.2 查询视图3.7.3 更新视图3.7.4 视图的作用 3.5 数据更新 3.5.1 插入数据 注意:插入数据时要满足表或者列的约束条件,否则插入失败&#x…...
理解io/nio/netty
一、io io即input/output,输入和输出 1.1 分类 输入流、输出流(按数据流向) 字节流(InputStream/OutputStream(细分File/Buffered))、字符流(Reader/Writer(细分File/Buffered/pu…...
旅游品牌网站搭建的作用是什么
我国旅游业规模非常高,各地大小旅游景区也是非常多,尤其节假日更是可以达到峰值,无论周边游还是外地游对所要去的景区,消费者总是需要来回了解很多,浏览器查或旅行社咨询等。 对旅游企业而言,传统线下方式…...
Linux操作系统——进程(五)环境变量
环境变量 有了我们前面的命令行参数的理解基础呢,我们下面进入环境变量这一个部分的内容的学习。 一般在我们安装一些开发工具尤其是有解释器的开发工具的时候,我们呢一般都要配置环境变量,可能都不太清楚自己为什么要配置环境变量…...
西门子博途怎么使用PID_Compact做pid调试
到目前为止,我已经在S7-1200中创建了一个可运行的PLC程序,并在Basic Panel中创建了一个HMI项目来操纵和操作该程序。 引文:博途工控人平时在哪里技术交流博途工控人社群 现在,我们该如何深入的让程序开始逐渐智能化呢,…...
结构型模式 | 适配器模式
一、适配器模式 1、原理 适配器模式(Adapter),将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。适配器模式主要分为三类:类适配器模式、对象适配器模式、接口…...
基于Python的车牌识别系统实现
本文将以基于Python的车牌识别系统实现为方向,介绍车牌识别技术的基本原理、常用算法和方法,并详细讲解如何利用Python语言实现一个完整的车牌识别系统。 精彩专栏持续更新推荐订阅,收藏关注不迷路 微信小程序实战开发专栏 目录 引言车牌识别…...
时间序列预测模型介绍及使用经验总结
1. 时序预测背景 时序数据,就是序列随时间变化的数据。时间序列分析,一般有时域和频域两种分析方法。时序预测的本质是在时域和频域层面探索时间序列变化的内在规律。 下图描述的是时域(temporal domain),横坐标是时…...
Docker知识总结
文章目录 Docker1 Docker简介1.1 什么是虚拟化1.2 什么是Docker1.3 容器与虚拟机比较1.4 Docker 组件1.4.1 Docker服务器与客户端1.4.2 Docker镜像与容器1.4.3 Registry(注册中心) 2 Docker安装与启动2.1 安装Docker2.2 设置ustc的镜像2.3 Docker的启动与…...
算法训练营Day25
#Java #回溯 开源学习资料 Feeling and experiences: 复原IP地址:力扣题目链接 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 . 分隔。 例如࿱…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...
水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关
在水泥厂的生产流程中,工业自动化网关起着至关重要的作用,尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关,为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多,其中不少设备采用Devicenet协议。Devicen…...
GraphQL 实战篇:Apollo Client 配置与缓存
GraphQL 实战篇:Apollo Client 配置与缓存 上一篇:GraphQL 入门篇:基础查询语法 依旧和上一篇的笔记一样,主实操,没啥过多的细节讲解,代码具体在: https://github.com/GoldenaArcher/graphql…...
raid存储技术
1. 存储技术概念 数据存储架构是对数据存储方式、存储设备及相关组件的组织和规划,涵盖存储系统的布局、数据存储策略等,它明确数据如何存储、管理与访问,为数据的安全、高效使用提供支撑。 由计算机中一组存储设备、控制部件和管理信息调度的…...
