C#串口

C# SerialPort连接串口,读写串口数据 C# SerialPort连接串口,读写串口数据 一、起始 最近在公司做上位机,上位机要求是能够读取一款支持串口通信的传感器并且把传感器的数据用图表显示出来,且上位机能对传感器发送指令,需求有涉及到串口通信和绘制图表。 那么首先要解决的问题就是能够让电脑上的程序进行串口通信,有串口通信的编程语言有很多,C++,C#,JAVA,Python等语言都是支持串口通信的。我选择了使用C#,因为上位机主要是在Windows操作系统上运行,而C#对于winodws桌面应用的开发支持是比较方便的,功能也比较强大,尤其是W 阅读详情

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO.Ports; using System.Threading; namespace TestSerialPort { public partial class frmTESTSerialPort : Form { public frmTESTSerialPort() { InitializeComponent(); Control.CheckForIllegalCrossThreadCalls = false; } private Button button1; private TextBox txtSend; private TextBox txtReceive; private Label label1; private Label label2; /// /// 必需的设计器变量。 /// private System.ComponentModel.IContainer components = null; /// /// 清理所有正在使用的资源。 /// /// 如果应释放托管资源,为 true;否则为 false。 protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows 窗体设计器生成的代码 /// /// 设计器支持所需的方法 - 不要 /// 使用代码编辑器修改此方法的内容。 /// private void InitializeComponent() { this.button1 = new System.Windows.Forms.Button(); this.txtSend = new System.Windows.Forms.TextBox(); this.txtReceive = new System.Windows.Forms.TextBox(); this.label1 = new System.Windows.Forms.Label(); this.label2 = new System.Windows.Forms.Label(); this.SuspendLayout(); // // button1 // this.button1.Location = new System.Drawing.Point(440, 379); this.button1.Name = "button1 "; this.button1.Size = new System.Drawing.Size(75, 23); this.button1.TabIndex = 0; this.button1.Text = "发送 "; this.button1.UseVisualStyleBackColor = true; this.button1.Click += new System.EventHandler(this.button1_Click); // // txtSend // this.txtSend.Location = new System.Drawing.Point(59, 12); this.txtSend.Multiline = true; this.txtSend.Name = "txtSend "; this.txtSend.Size = new System.Drawing.Size(456, 164); this.txtSend.TabIndex = 2; // // txtReceive // this.txtReceive.Location = new System.Drawing.Point(59, 200); this.txtReceive.Multiline = true; this.txtReceive.Name = "txtReceive "; this.txtReceive.Size = new System.Drawing.Size(456, 164); this.txtReceive.TabIndex = 2; // // label1 // this.label1.Location = new System.Drawing.Point(13, 15); this.label1.Name = "label1 "; this.label1.Size = new System.Drawing.Size(41, 12); this.label1.TabIndex = 0; this.label1.Text = "发送 "; // // label2 // this.label2.Location = new System.Drawing.Point(13, 213); this.label2.Name = "label2 "; this.label2.Size = new System.Drawing.Size(41, 12); this.label2.TabIndex = 0; this.label2.Text = "接收 "; // // frmTESTSerialPort // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(546, 434); this.Controls.Add(this.label2); this.Controls.Add(this.label1); this.Controls.Add(this.txtReceive); this.Controls.Add(this.txtSend); this.Controls.Add(this.button1); this.Name = "frmTESTSerialPort "; this.Text = "串口试验 "; this.ResumeLayout(false); this.PerformLayout(); } #endregion private void button1_Click(object sender, EventArgs e) { //实例化串口对象(默认:COMM1,9600,e,8,1) SerialPort serialPort1 = new SerialPort(); //更改参数 serialPort1.PortName = "COM1 "; serialPort1.BaudRate = 19200; serialPort1.Parity = Parity.Odd; serialPort1.StopBits = StopBits.Two; //上述步骤可以用在实例化时调用SerialPort类的重载构造函数 //SerialPort serialPort = new SerialPort( "COM1 ", 19200, Parity.Odd, StopBits.Two); //打开串口(打开串口后不能修改端口名,波特率等参数,修改参数要在串口关闭后修改) serialPort1.Open(); //发送数据 SendStringData(serialPort1); //也可用字节的形式发送数据 //SendBytesData(serialPort1); //开启接收数据线程 ReceiveData(serialPort1); } //发送字符串数据 private void SendStringData(SerialPort serialPort) { serialPort.Write(txtSend.Text); } /// /// 开启接收数据线程 /// private void ReceiveData(SerialPort serialPort) { //同步阻塞接收数据线程 Thread threadReceive=new Thread(new ParameterizedThreadStart(SynReceiveData)); threadReceive.Start(serialPort); //也可用异步接收数据线程 //Thread threadReceiveSub = new Thread(new ParameterizedThreadStart(AsyReceiveData)); //threadReceiveSub.Start(serialPort); } //发送二进制数据 private void SendBytesData(SerialPort serialPort) { byte[] bytesSend=System.Text.Encoding.Default.GetBytes(txtSend.Text ); serialPort.Write(bytesSend, 0, bytesSend.Length); } //同步阻塞读取 private void SynReceiveData(object serialPortobj) { SerialPort serialPort = (SerialPort)serialPortobj; System.Threading.Thread.Sleep(0); serialPort.ReadTimeout = 1000; try { //阻塞到读取数据或超时(这里为2秒) byte firstByte=Convert.ToByte(serialPort.ReadByte()); int bytesRead=serialPort.BytesToRead ; byte[] bytesData=new byte[bytesRead+1]; bytesData[0] = firstByte; for (int i = 1; i <=bytesRead; i++) bytesData[i] = Convert.ToByte( serialPort.ReadByte()); txtReceive.Text = System.Text.Encoding.Default.GetString(bytesData); } catch(Exception e) { MessageBox.Show(e.Message); //处理超时错误 } serialPort.Close(); } //异步读取 private void AsyReceiveData(object serialPortobj) { SerialPort serialPort = (SerialPort)serialPortobj; System.Threading.Thread.Sleep(500); try { txtReceive.Text = serialPort.ReadExisting(); } catch (Exception e) { MessageBox.Show(e.Message); //处理错误 } serialPort.Close(); } } static class Program { /// /// 应用程序的主入口点。 /// [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new frmTESTSerialPort()); } } }

C#接收串口数据 今天有人提到C#接收串口数据,想到以前做过接收串口发送的重量数据,现做简单整理。 C#中使用SerialPort类实现串口通讯,核心代码如下: //定义委托 public delegate void Displaydelegate(byte[] InputBuf); public static Displaydelegate disp_delegate; //初始化串口设置 public static SerialPort serialPort = new SerialPort("COM1", 960 阅读详情

相关推荐

C#实现串口通讯

串口通信

weixin_48718796的博客 5718

C#串口通讯

下面是一个简单的例子,包含了一个基本的UI,用于设置串口参数和进行通讯。这里使用了Windows Forms(WinForms)来创建UI。以上程序只是一个简单的demo,有很多没有完善,比如接收和发送字符串会出现乱码,小弟只是在此抛砖引玉,望各位大神补齐!在Visual Studio中创建一个新的Windows Forms应用程序项目。在C#写串口通讯小程序时,可以使用。

至尊宝2021 2003

C# 扫描和打开串口

C# 扫描和打开串口 引言 关于C#Form窗口框架下使用串口通信中扫描串口和打开串口操作是最基础最重要的步骤。在这里我用一个demo小程序以最简单的方式实现,小结一下。 一、建工程界面 1、新建C# window窗体 (.net Framework)工程; 2、界面添加一个Combox,命名为comport;添加两个按键,分别命名为button_open和button_close。 修改属性中的文字属性等,其它外观功能属性可自由定义。 二、添加代码 代码中,我们需要用到按键的单击事件、初始化扫描

C/C#、Android driver、STM32、Linux等等。 6564

AI大模型技术竞赛:现状、挑战与未来趋势

人工智能大模型作为当前AI领域的前沿技术,其核心在于通过海量参数模拟复杂认知能力。基于Transformer架构的模型通过自注意力机制实现上下文理解,在自然语言处理、计算机视觉等领域展现出强大潜力。随着混合专家系统(MoE)和多模态融合等技术创新,大模型正从单纯规模竞争转向效率优化。在工程实践层面,分布式训练框架和梯度压缩技术显著提升了训练效率,使千亿参数模型的商业化应用成为可能。目前该技术已广泛应用于智能客服、内容生成等场景,但同时也面临推理成本高、长文本处理等挑战。行业正在探索模型小型化和专业化等方向,

aome1470的博客 389

C#串口通信程序SerialPort类

上篇文章主要是关于串口通信中单片机部分的程序编写。在实际应用中,常常还要有上位机的配合才能完成工作。写串口通信的上位机程序,常常应用的编程语言有C++,VB,C#等。VB没有学过,C++编写窗口应用程序接触也不多,暑假自己看了一些C#的书,也有了一些了解,所以就用C#写窗口应用程序,用来作上位PC机的串口通信程序。在写的过程中,主要参见了这篇博客http://blog.csdn.net/wuyaz

技术宅 1万+

c#串口收发数据

c#串口接收发送数据  重要的几个函数 构造函数 InitializeComponent(); //为串口绑定接收数据事件 this.serialPort1.DataReceived += new SerialDataReceivedEventHandler

ruanjiayou123的专栏 1万+

C#开发串口通信实例及串口基础

串行接口(串口)是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能的电路,我们称为串行接口电路。串口通信(Serial Communications)的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。

Silent_you的博客 1万+

C#语言实现的串口配置工具

串口通信,作为一种古老的通信方式,一直是电子设备与计算机系统进行数据交换的基础。它以其简便易用、成本低廉、跨平台兼容性强的特性,在现代通信领域仍然扮演着重要角色。在串口通信中,波特率、数据位、停止位和校验位是配置串口通信参数的关键要素,每项参数的定义和作用如下:波特率(Baud Rate):表示每秒钟传输的符号数,是衡量串口传输速率的单位。它决定了数据传输的快慢。数据位(Data Bits):串口发送和接收的每个数据包中有效数据的位数。常见的设置有7位或8位。

weixin_42599558的博客 1078

c#串口编程(傻瓜教程,手把手教你学会)

在单片机项目开发中,上位机也是一个很重要的部分,主要用于数据显示(波形、温度等)、用户控制(LED,继电器等),下位机(单片机)与 上位机之间要进行数据通信的两种方式都是基于串口的: USB转串口 —— 上位机和下位机通过USB转串口连接线直接相连进行数据交互; 串口转WIFI(ESP8266) —— 上位机和下位机基于TCP/IP协议通过WIFI传输数据; 串口转蓝牙(HC-06)—— 不多用,暂不介绍; 上位机软软件开发主要包括以下两种:   1、Windows上位机(EXE可执行程序) .

ba_wang_mao的专栏 8万+

C#串口编程实战:串口助手项目

串口通信,或称串行通信,是计算机与外部设备或其它计算机之间进行数据交换的一种方法。在早期的PC中,串口经常被用于连接诸如打印机、调制解调器等设备。现今,在嵌入式系统、工业自动化等领域,串口通信依旧扮演着重要角色。

weixin_42524864的博客 1231

C#串口通信工具

博客对应的源文件代码,网址:http://blog.csdn.net/rehongchen/article/details/7851673 希望能对大家有所帮助。

C# 串口通讯

C#--使用WPF以及虚拟串口软件进行仿真通讯。

XUMENGCAS的博客 3万+

C#串口介绍以及简单串口通信程序设计和实现

C#串口介绍以及简单串口通信程序设计实现 源代码和串口程序介绍连接:https://www.cnblogs.com/JiYF/p/6618696.html 本站积分太贵,自己变得。。直接到连接地址下载代码 周末,没事干,写个简单的串口通信工具,也算是本周末曾来过,废话不多,直接到主题 串口介绍   串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。(至于再详细,自己百度) 串口应用:   工业领域使用较多,比如:数据采集,设备控制等等,好多都是用串口通信来实现!你要是细心的话,你会发现,目前家用国网智能电能表就具备RS485通信总线(串行总线的一种)与RS232可以相互转化(当然一般,非专业的谁也不会闲的蛋疼,趴电表上瞎看,最多也就看看走了多少度电) RS232 DB9介绍: 1.示意图 2.针脚介绍: 载波检测(DCD) 接受数据(RXD) 发出数据(TXD) 数据终端准备好(DTR) 信号地线(SG) 数据准备好(DSR) 请求发送(RTS) 清除发送(CTS) 振铃指示(RI) 3.实物图: 以下是我购买XX公司的一个usb转串口线:这个头就是一个公头,另一端是一个usb口 笨小孩串口工具运行图: 1.开启程序 2.发送一行字符串HelloBenXH,直接将针脚的发送和接收链接起来就可以测试了(针脚2 接受数据(RXD) 和3 发出数据(TXD))直接链接, C#代码实现:采用SerialPort 1.实例化一个SerialPort [csharp] view plain copy 在CODE上查看代码片派生到我的代码片 private SerialPort ComDevice = new SerialPort(); 2.初始化参数绑定接收数据事件 [csharp] view plain copy 在CODE上查看代码片派生到我的代码片 public void init() { btnSend.Enabled = false; cbbComList.Items.AddRange(SerialPort.GetPortNames()); if (cbbComList.Items.Count > 0) { cbbComList.SelectedIndex = 0; } cbbBaudRate.SelectedIndex = 5; cbbDataBits.SelectedIndex = 0; cbbParity.SelectedIndex = 0; cbbStopBits.SelectedIndex = 0; pictureBox1.BackgroundImage = Properties.Resources.red; ComDevice.DataReceived += new SerialDataReceivedEventHandler(Com_DataReceived);//绑定事件 }

【C#】基础篇(2) C#实现串口助手,C#扫描串口

本篇文章: 主要是关于C#制作简单的串口助手,实现串口之间收发数据。本篇文章制作的串口助手存在一个中文乱码问题,后期文章会解决这个问题。【后期文章:C#实现串口助手,解决中文乱码问题】 功能一:串口简单实现【C#制作的串口向主流的助手发送数据】 功能二:C#实现简易串口助手【发送、接收数据】 功能三:C#扫描串口助手

qq_44366571的博客 6123

AI Agent ReAct架构设计模型剖析

ReAct通过"思考-行动-观察"循环运作:智能体先进行自然语言推理,再调用外部工具执行行动,观察结果后继续推理直至解决问题。这种架构提高了透明度和准确性,减少幻觉风险,使LLM能主动分解任务并利用外部数据源。实现关键在于精心设计的提示模板,引导LLM按结构化格式响应,而非依赖模型固有能力。

weixin_43939320的博客 1250

手把手教你为智能手表DIY一个离线导航:LVGL + SD卡地图实战

本文详细介绍了如何为智能手表DIY一个离线导航系统,结合LVGL图形库和SD卡地图数据。从硬件选型、地图数据处理到LVGL地图引擎实现,提供了完整的实战指南,特别适合户外运动爱好者和嵌入式开发者。文章还分享了功耗优化、性能提升等实用技巧,帮助读者打造高效的离线导航解决方案。

weixin_42570484的博客 206

C#编写串口助手

使用C#编写串口助手

weixin_49708032的博客 1万+

电源芯片TPS54560典型应用电路及设计详解

TPS54560 是一款配有集成型高侧 MOSFET 的 60V、5A DC-DC转换器,输入电压范围7-60V,输出电压可通过外部反馈电阻设置成略低于输入电压的任意值。**所以,**R5=31.25KΩ、R6:10KΩ(常用值)时,即可设置输出电压为 3.3V。**所以,**R5=140KΩ、R6:10KΩ(常用值)时,即可设置输出电压为12V。设计 TPS54560 的输出电压时,主要通过外部反馈电阻网络来设置输出电压。因此,输出 3.3V ,输入电压24V时推荐的电感值为 8µH 至 10µH。

weixin_42306872的博客 1万+

C#中对串口的操作

C#中对串口的操作1、通过new SerialPort()创建串口对象2、通过MulGetHardwareInfo()查找当前的串口3、对串口对象(例子中的sp1)的其他属性进行配置4、弹出文件选择框,进行文件类型筛选;5、通过FileStream类打开前面选择的文件的数据,获取数据6、从串口缓冲区取数据7、往串口缓冲区中写数据 1、通过new SerialPort()创建串口对象 public ...

weixin_44536482的博客 3182

Altium Designer学习---如何进行SI仿真

Altium designer 如何进行SI仿真。         1、仿真电路中需要至少一块集成电路;             2、器件的IBIS模型;              3、在规则中必须设定电源网络和地网络;              4、建立SI规则约束;              5、层堆栈必须设置正确,电源平面必须连续;     建立的文件必须是一个工程,并把相应的文件放在工程目...

weixin_34050519的博客 4902

微带功分器设计与ADS-EM联合仿真实战解析

本文详细解析了微带功分器设计与ADS-EM联合仿真的实战技巧,涵盖特性阻抗计算、ADS原理图设计、版图生成与EM仿真等关键步骤。通过实际案例分享,帮助工程师掌握射频电路设计中的核心技术和调试方法,提升功分器设计效率与性能。

weixin_29280219的博客 451

C#串口接收、发送总结

最近笔者使用C#编程时,经常用到串口通信功能。所以总结记录一下串口通信功能的使用方法。 串口组件 在工具箱中找到SerialPort组件,将其添加到设计中。 串口端口和波特率设置 属性名称 含义 (Name) 指示代码中用来标识该对象的名称 BaudRate 此串行端口上要使用的波特率 DataBits 没发送/接收一个字节的数据位数目 DiscardNull 在添加到序列缓冲区前是否丢弃端口上接收的空字节 DtrEnable 在通信过程中是否启用数据终端就绪(DTR)行

学无止境 2万+

有限元分析必看:如何用ANSYS检查关键区域的网格质量(附操作截图)

本文聚焦有限元分析中决定仿真精度的关键环节,详细讲解了如何利用ANSYS Workbench对关键区域进行网格质量检查与优化。文章提供了从思维转变、实战操作到指标解读的完整流程,强调通过命名选择、Worksheet过滤器等工具实现定向检查,并给出了针对结构分析的关键区域网格质量阈值建议,帮助工程师提升仿真结果的可靠性与效率。

weixin_29200741的博客 467

C#学习记录——C#编写串口程序

因为电气自动化专业出差太多,考虑学点其他的看能不能实现转行,也没太清晰的路线,看网上好多推荐电气自动化转C#上位机开发的,也抽时间学习了解下C#,因为非软件专业,对计算机软件不算太熟悉,只能从网上搜罗资料,看到一个用C#写串口程序的例子,拿来练习一下,边练习边记录,方便回顾总结,有兴趣的也可以一起探讨。这样就可以显示多行了。1、在窗体上添加三个“GroupBox”控件,分别将窗体分为“串口设置”、“数据接收”以及“数据发送”三部分。6、“清空数据”则可以清除“数据接收”栏以及“收据发送”栏中的所有数据;

做有价值的事,积累有价值的笔记! 5197

CListCtrl控件的自绘操作

1、CListCtrl控件 :OwnerDraw Fixed = True,创建一个CListCtrl类的派生类CMyListCtrl,同时创建一个CMyListCtrl控件类型变量:CMyListCtrl m_cList;。 CListCtrl控件的自绘主要是CMyListCtrl类中重写DrawItem虚函数。 流程: 1.主对话框中CListCtrl的一些初始化操作: BOOL

小米的修行之路 3559

7.91版本unidbg调用方式

【代码】xhs最新7.91版本unidbg调用方式。

Codeooo 博客 1107
上一篇: 在C#程序中使用系统热键的整个过程
下一篇: 关于C#中timer类
lianchengzhang
博客等级 码龄18年 22粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值