SerialPort 串口通讯

串口 = 电脑和外部设备 “插线对话” 的通道!
串口通讯 到底用来干嘛?
电脑 ↔ 设备 之间做 2 件事:
电脑发命令 → 设备执行开、关、启动、停止、设置参数
设备发数据 → 电脑接收温度、重量、压力、状态、结果
总结:插上线,电脑就能控制硬件、读取数据!

串口必须 5 个参数一致:
COM 口号(COM3、COM4…)
波特率(9600) → 说话速度(最重要)
数据位(8)
校验位(None)
停止位(1)
口诀:两边参数必须一模一样,不然通讯失败!

C# 里用什么类?
SerialPort
一个类搞定所有:
打开串口
发数据
收数据
关闭串口

C# 里用什么类?
SerialPort
一个类搞定所有:
打开串口
发数据
收数据
关闭串口

——————————————————————————————————————————————————————————————————————————————

// 引入C#基础功能(必须写)
using System;

// 引入串口通讯的专用库(必须写!不写就不能用串口)
using System.IO.Ports;

// 程序类
class SerialPortDemo
{
// 程序入口:运行程序从这里开始
static void Main(string[] args)
{
// ==============================================
// 第一步:创建一个串口对象(相当于创建一个通讯工具)
// ==============================================
SerialPort serialPort = new SerialPort();

// ==============================================
// 第二步:设置串口5大参数(必须和设备一模一样!)
// ==============================================

// 1. 设置串口号:COM3 改成你电脑上的实际端口
serialPort.PortName = "COM3";

// 2. 设置波特率:9600 是设备常用速度,必须和设备一致
serialPort.BaudRate = 9600;

// 3. 数据位:默认固定8,不用改
serialPort.DataBits = 8;

// 4. 校验位:默认None,不用改
serialPort.Parity = Parity.None;

// 5. 停止位:默认1,不用改
serialPort.StopBits = StopBits.One;

// ==============================================
// 第三步:打开串口(打开后才能收发数据)
// ==============================================
serialPort.Open();
Console.WriteLine("✅ 串口已成功打开!");

// ==============================================
// 第四步:发送数据(电脑 → 设备)
// ==============================================
// 定义要发送的消息(字节格式,设备能看懂)
byte[] sendData = { 0x01, 0x03, 0x00, 0x01 };

// 通过串口发送数据
serialPort.Write(sendData, 0, sendData.Length);
Console.WriteLine("📤 已向设备发送数据");

// ==============================================
// 第五步:接收数据(设备 → 电脑)
// ==============================================
// 创建一个字节数组,用来存放设备返回的数据
byte[] receiveBuffer = new byte[128];

// 读取设备返回的数据
int receiveLength = serialPort.Read(receiveBuffer, 0, receiveBuffer.Length);
Console.WriteLine("📥 成功接收到设备数据,长度:" + receiveLength);

// ==============================================
// 第六步:关闭串口(通讯结束必须关)
// ==============================================
serialPort.Close();
Console.WriteLine("❌ 串口已关闭");

// 让控制台停留,方便看结果
Console.ReadLine();
}
}

这段代码一共做了 6 件事:
创建串口工具
设置 5 个参数(COM 号、波特率最重要)
打开串口
发送数据给设备
接收设备返回的数据
关闭串口

0x01 → 1 号设备,你听着!
(从站地址,一般默认 1)
0x03 → 我要读保持寄存器!
(功能码:读数据)
0x00 → 从第 0 个地址开始读
(起始地址高位)
0x01 → 读 1 个数据
(起始地址低位 + 长度)

总结就是
喂!1 号 PLC,我要读你 0 号地址的 1 个数据!”
设备听到后,就会把数据回传给你!

为什么要写成 0x 开头?
0x 代表十六进制
硬件设备只认这种格式
人写起来方便

SerialPort 是 .NET 系统内置类
不是你写的
是微软写好给所有 C# 开发者用的
你只要引用命名空间 using System.IO.Ports 就能用

posted @ 2026-04-07 23:55  菜鸟的奋斗军  阅读(51)  评论(0)    收藏  举报