.NET 串口通信(转)
这段时间做了一个和硬件设备通信的小项目,涉及到扫描头、输送线、称重机、贴标机等硬件。和各设备之间通信使用的是串口或网络(Socket)的方式。扫描头和贴标机使用的网络通信,输送线和称重机使用的是串口通信。
串口通信,以前一直觉得神秘,没想到用起来却这么简单。当然,这样简单要归功于 .NET 对其操作的封装。
.NET 里提供了专门操作串口的类 System.IO.Ports.SerialPort,可以操作串口收发数据。只需要 new 一个对象,简单配置一下相关属性,就可以使用串口收发数据了。
SerialPort 类常用的属性有 PortName、BaudRate、DataBits、StopBits、Parity 等。PortName 是端口名称,如COM1、COM2等,默认COM1;BaudRate 是波特率,默认 9600;DataBits 是数据位,默认是 8;StopBits 是停止位,默认是System.IO.Ports.StopBits.One、Parity 设定奇偶校验,默认是System.IO.Ports.Parity.None。
其中端口名称设置的是你通信使用的本地端口的名称,其它参数,一般默认。具体意思?关我毛事!和设备约定相同就行了。
所以,一般来说,使用串口的准备操作,就这么简单:
1 System.IO.Ports.SerialPort com1 = new System.IO.Ports.SerialPort();
2 com1.PortName = "COM1"; //端口名称,默认COM1
3 com1.BaudRate = 9600; //波特率,默认9600
4 com1.DataBits = 8; //数据位,默认8
5 com1.StopBits = System.IO.Ports.StopBits.One; //停止位,默认 System.IO.Ports.StopBits.One
6 com1.Parity = System.IO.Ports.Parity.None; //奇偶校验,默认 System.IO.Ports.Parity.None
如果都使用的默认参数,还可以精简成这样:
1 System.IO.Ports.SerialPort com1 = new System.IO.Ports.SerialPort("COM1");
当然,对硬件设备的操作需要在使用前后打开或关闭资源。SerialPort 类提供了 Open 和 Close 方法用来打开或半闭串口。
打开以后,就可以向端口读写数据了。
SerialPort 类提供了 Write 和 WriteLine 两个方法向串口发送数据。Write 发送一个 byte 数组,和一般的流操作类似;WriteLine 可以直接发送一个字符串。
SerialPort 类提供了 Read、ReadByte、ReadChar、ReadExisting、ReadLine 和 ReadTo 等方法可以从串口中读取数据。Read 可以把数据读取到一个 byte 数组;ReadByte 可以读取一个字节;ReadChar 可以读取一个字符;ReadExisting 可以读取当前可读取的所有数据;ReadLine 可以读取一行数据;ReadTo 这个我没用过。
当然如果没有数据,就读取不到了。我们可以使用 BytesToRead 属性获取可读取的数据长度,如果长度为 0,就说明串口中没有接收到数据。如果需要监听端口数据,就可以单独开一个线程反复读取。
除了使用反复读取来监听串口数据,还可以使用 SerialPort 类提供的 DataReceived 事件来监听串口中接收到的数据,当串口中有可读取的数据,系统会自动触发 DataReceived 事件处理程序。设置代码如下:
1 System.IO.Ports.SerialPort com1 = new System.IO.Ports.SerialPort("COM1");
2 com1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(Com1_DataReceived);
回调方法声明如下:
1 private void Com1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
2 {
3
4 }
理论讲完了,下面写一个简单的 Demo 实验一下。
因为要验证收发数据,需要用到一个串口虚拟化的软件。该软件可以在 PC 上成对的虚拟串口,可以实现对 COM1 发的数据,COM2 中接收到。
环境搭建好以后,编写代码试着在单击按钮的时候,将文本框的内容写入 COM1,然后从 COM2 中读取,并使用对话框弹出来。
新建一个窗体,拖入一个文本框 textbox1 和一个按钮 button1,然后添加操作代码,如下:
1 public partial class Form1 : Form2 {3 System.IO.Ports.SerialPort COM2 = null;4 5 public Form1()6 {7 InitializeComponent();8 }9
10 private void Form1_Load(object sender, EventArgs e)
11 {
12 COM2 = new System.IO.Ports.SerialPort("COM2");
13 COM2.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(Com2_DataReceived);
14 COM2.Open();
15 }
16
17 private void Form1_FormClosing(object sender, FormClosingEventArgs e)
18 {
19 COM2.Close();
20 COM2 = null;
21 }
22
23 private void button1_Click(object sender, EventArgs e)
24 {
25 System.IO.Ports.SerialPort com1 = new System.IO.Ports.SerialPort("COM1");
26 com1.Open();
27 com1.WriteLine(this.textBox1.Text);
28 com1.Close();
29 }
30
31 private void Com2_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
32 {
33 System.IO.Ports.SerialPort com = (System.IO.Ports.SerialPort)sender;
34 MessageBox.Show(com.ReadExisting());
35 }
36 }
运行,测试,如图:
.NET 串口通信(转)相关推荐
- python第三方库之学习pyserial库--串口通信
pyserial串口通信库 1.安装pyserial库 2.填写串口参数的注意事项 3.简单封装一下 4.碰到的bug 1.安装pyserial库 pip install pyserial versi ...
- VC串口通信编程-2
VC串口通信编程 (2009-07-08 13:48:40) 转载▼ Win32串口编程(转:韩耀旭) 在工业控制中,工控机(一般都基于Windows平台)经常需要与智能仪表通过串口进行通信.串口通信 ...
- Linux ROS与嵌入式的串口通信
1.根据ros wiki的官方教程 学习即可,并且有许多例子可供学习 http://wiki.ros.org/rosserial_arduino/Tutorials 2.用ASIO读写设备串行口 AS ...
- 投影串口测试程序_【原创】串口通信测试程序
源代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; ...
- labVIEW与单片机实现串口通信的设计过程
1.概述 在现代测控系统中,我们经常会采用上位机和下位机的开发控制模式.下位机主要是用来采集数据,可以通过嵌入式控制器.单片机控制器.PLC等来实现.上位机主要是图形界面,用来实时显示采集数据,并进行 ...
- chord协议模拟实现_C#.NET和单片机串口通信实现监控单片机数字量输入继电器输出模拟量输入模拟量输出...
一.必备软件和硬件: 1.C#.NET: 2.单片机开发板: 3.通信电缆. 二.通信参数: 1.数据位:8位 2.校验方式:无校验 3.停止位:1位 4.波特率:9600bps 5.通信协议:自定义 ...
- java串口通信DataRecive_串口通信之DataReceive事件触发时机
环境:Windows PC.本机虚拟COM2连接COM3.串口调试助手COM2发数据 图1 1> ReceivedBytesThreshold为默认值1:2> 一次发送41个字节:3> ...
- 读取串口数据_自定义串口通信的相关问题整理
串口通信是常见的通信方式,串口接口是大部分工控器件标配的通信接口.在项目开发的过程中,也经常遇到进行串口通信的处理.这里就串口通信的部分问题分享给大家. 1.TTL.RS232.RS422.RS458 ...
- [python] 3 、基于串口通信的嵌入式设备上位机自动测试程序框架(简陋框架)...
星期一, 20. 八月 2018 01:53上午 - beautifulzzzz 1.前言 做类似zigbee.ble mesh...无线网络节点性能测试的时候,手动操作然后看表象往往很难找出真正的原 ...
- micropython串口通信_MicroPython-ESP32串口通信-1Z实验室
出品:1Z实验室 (1ZLAB: Make Things Easy) 概要 在本节课程阿凯为大家讲解了串口通信的接线方式,ESP32中的串口UART资源与相关API, 并给出了一个UART的小应用实例 ...
最新文章
- re2c编译选项的说明
- xa协议 mysql_分布式事务XA实现数据一致性的协议与原理
- 在上位计算机控制时不能将s7-200,plc控制系统编程题库.doc
- 基于bboss开发平台eclipse开发工程生成工具介绍
- springMVC通过spring.xml对属性注入bean值(工厂模式)
- program collections
- P1046 [NOIP2005 普及组] 陶陶摘苹果
- USB基础与重点梳理—关于USB的问题
- python编的游戏越玩越卡_用Python写游戏,不到十分钟就学会了
- 笔记本电脑如何强制关机_如果你的MacBook一直关机,该怎么办?
- IDEA配置好maven后新建maven项目一直build失败的解决方法
- Java获取程序或项目路径的常用方法
- 空间权重矩阵(SWM)
- logback控制台彩色日志输出
- Goonie企业竞争情报系统评为选中国优秀网络应用软件奖
- 反垃圾邮件 linux,Linux中Postfix反病毒和垃圾邮件工具(十)
- QT技巧系列(9)QModbusTcpClient客户端程序示例及代码
- 行业务实派:解锁数据价值,翼方健数全栈隐私安全计算技术
- 图片与进制的转化之路
- sklearn聚类算法之HAC
热门文章
- Kudu 原理、API使用、代码
- 新浪微博和腾讯微博图标
- bi软件用来做什么?
- duplicate symbol _OBJC_CLASS 错误处理方法
- 微信网页授权:网页版(一)
- 【完美解决】爬虫伪装代理IP方案
- P5200 [USACO19JAN]Sleepy Cow Sorting
- Intelsat-29e卫星解体全损,威胁地球静止轨道安全
- win11无法打开.bat文件、打开.bat文件闪退解决方案,星露谷smapi mod安装时,.bat安装文件一闪而过
- 拳王虚拟项目公社:拳王的个人IP打造之路,助你百度霸屏,与个人成长学习经历分享