使ç¨System.IO.Port.SerialPortç±»å®ç°ä¸²å£éä¿¡
System.IO.Port.SerialPortç±»ä»ç»
System.IO.Port.SerialPortæ¯.NET Frameworkæä¾çæä½ä¸²è¡ç«¯å£çç±»ï¼éé¢æä¾äºä¸äºæ¹æ³ãå±æ§ååäºä»¶ä¾å¼åè è°ç¨æä½ä¸²å£ã
è°ç¨æµç¨
1. ç´æ¥è°ç¨SerialPortçéææ¹æ³GetPortNames()è·åå½å计ç®æºç串è¡ç«¯å£å称æ°ç»
2.æ ¹æ®ä¸²å£å称ï¼åå§åSerialPort对象ï¼è®¾ç½®åæ°ï¼è°ç¨Open()æ¹æ³æå¼ä¸²å£
3.è°ç¨Write()æ¹æ³åéæ°æ®
4.注åæ¥æ¶æ°æ®ççå¬ï¼è·åæ°æ®ï¼æè å¦èµ·çº¿ç¨å¾ªç¯è¯»åæ¥æ¶æ°æ®ï¼æ¬æ使ç¨æ³¨åçå¬æ¹å¼æ¥æ¶æ°æ®ï¼
å ·ä½ä»£ç å®ç°
using System;
using System.IO.Ports;
using System.Text;
namespace PortControlDemo
{
public class PortControlHelper
{
#region å段/å±æ§/å§æ
/// <summary>
/// 串è¡ç«¯å£å¯¹è±¡
/// </summary>
private SerialPort sp;
/// <summary>
/// 串å£æ¥æ¶æ°æ®å§æ
/// </summary>
public delegate void ComReceiveDataHandler(string data);
public ComReceiveDataHandler OnComReceiveDataHandler = null;
/// <summary>
/// 端å£å称æ°ç»
/// </summary>
public string[] PortNameArr { get; set; }
/// <summary>
/// 串å£éä¿¡å¼å¯ç¶æ
/// </summary>
public bool PortState { get; set; } = false;
/// <summary>
/// ç¼ç ç±»å
/// </summary>
public Encoding EncodingType { get; set; } = Encoding.ASCII;
#endregion
#region æ¹æ³
public PortControlHelper()
{
PortNameArr = SerialPort.GetPortNames();
sp = new SerialPort();
sp.DataReceived += new SerialDataReceivedEventHandler(DataReceived);
}
/// <summary>
/// æå¼ç«¯å£
/// </summary>
/// <param name="portName">端å£å称</param>
/// <param name="boudRate">æ³¢ç¹ç</param>
/// <param name="dataBit">æ°æ®ä½</param>
/// <param name="stopBit">åæ¢ä½</param>
/// <param name="timeout">è¶
æ¶æ¶é´</param>
public void OpenPort(string portName , int boudRate = 115200, int dataBit = 8, int stopBit = 1, int timeout = 5000)
{
try
{
sp.PortName = portName;
sp.BaudRate = boudRate;
sp.DataBits = dataBit;
sp.StopBits = (StopBits)stopBit;
sp.ReadTimeout = timeout;
sp.Open();
PortState = true;
}
catch (Exception e)
{
throw e;
}
}
/// <summary>
/// å
³é端å£
/// </summary>
public void ClosePort()
{
try
{
sp.Close();
PortState = false;
}
catch (Exception e)
{
throw e;
}
}
/// <summary>
/// åéæ°æ®
/// </summary>
/// <param name="sendData"></param>
public void SendData(string sendData)
{
try
{
sp.Encoding = EncodingType;
sp.Write(sendData);
}
catch (Exception e)
{
throw e;
}
}
/// <summary>
/// æ¥æ¶æ°æ®åè°ç¨
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void DataReceived(object sender, SerialDataReceivedEventArgs e)
{
byte[] buffer = new byte[sp.BytesToRead];
sp.Read(buffer, 0, buffer.Length);
string str = EncodingType.GetString(buffer);
if (OnComReceiveDataHandler != null)
{
OnComReceiveDataHandler(str);
}
}
#endregion
}
}
View Code
ä¸ãç¼åWinform串å£éä¿¡å·¥å ·çé¢
çé¢é¢è§
c#如何实现串口通信读取数据
1. 直接调用SerialPort的静态方法GetPortNames()获取当前计算机的串行端口名称数组 2.根据串口名称,初始化SerialPort对象,设置参数,调用Open()方法打开串口 3.调用Write()方法发送数据 4.注册接收数据的监听,获取数据(或者另起线程循环读取接收数据,本文使用注册监听方式接收数据)具体代码实现 using Syste...
C#用serialPort实现串口通信读取byte数据菜鸟求助。
byte[] data = new byte[d.Length - 7];Buffer.BlockCopy(buf, 7, data, 0, d.Length - 7); \/\/截取7~长度-7 数据 d.Data = data;return d;} }
C#串口读取?
WriteBytes 就是你的写入的字节,注意,字符串要转换成字节数组才能进行通信 示例: ss_port.Write(Encoding.ASCII.GetBytes("AT+CGMI\\r")); \/\/获取手机品牌 读串口: 函数原型:public byte[] Read(int NumBytes) NumBytes 读入缓存数,注意读取来的是字节数组,要实际应用中要进行字符转换 示例: string response =...
C# serialport内datareceived事件接收串口数据,详细步骤。
} 读取有的string InputData = serialPort1.ReadExisting();单字节读取(当波特率高时就会丢失数据)byte DataReceived = (byte)(serialPort1.ReadByte());
C#软件如何读取串口数据阿?跪求
以下是SerialPort类的一些方法:Read 已重载。 从 SerialPort 输入缓冲区中读取。ReadByte 从 SerialPort 输入缓冲区中同步读取一个字节。ReadChar 从 SerialPort 输入缓冲区中同步读取一个字符。ReadExisting 在编码的基础上,读取 SerialPort 对象的流和输入缓冲区中所有立即可用的字节。ReadLine ...
c# 串口通信 数据是怎么存储 我该怎么去读?
如果是同步读写的话,可以用我以下我实际项目中用的代码:用while (sp.BytesToRead > 0)加上Thread.Sleep来确保读完成。SerialPort sp = new SerialPort("COM4");sp.BaudRate = 9600;sp.ReadTimeout = 1000;sp.WriteTimeout = 1000;sp.NewLine = "\\r\\n";\/\/sp.DataReceived += sp_Data...
C#中如何通过RS232的方式实现通信?
串口通讯最常用的参数就是通讯端口号及通讯格式(波特率、数据位、停止位和校验位),在MSComm中相关的属性是CommPort和Settings。SerialPort类与MSComm有一些区别:a.通讯端口号 [PortName]属性获取或设置通信端口,包括但不限于所有可用的 COM 端口,请注意该属性返回类型为String,不是Mscomm.CommPort的...
如何用c#编写串口监控软件? 监控某个串口的数据接受和发送
1、用C#写虚拟设备驱动程序,接管COM3。2、用三个串口,中间通过你的程序中转一下。假定有三个串口 A、B、C,你可以做一根串口直连线把 B、C 连起来。A口接下位机,你的C#程序收到内容后从B口发出,C口接原上位机。这样你的程序就可以从中截获所有的通讯报文了。缺点是,实时性有时会有影响...
C#中的串口通信SerialPort
C#中的串口通讯使用的是System.IO.Ports.SerialPort类。通过简单操作步骤,很容易实现串口的信息收发程序,从特定串口中接收数据并发送数据。串口的使用通常与线程结合,在子线程中进行耗时和重复工作,主线程或界面则负责数据展示处理。打开和关闭串口状态需在子线程处理过程中特别注意,以防出现无法捕获的...
c#如何读出串口数据的同时不清口串口
在C#中使用SerialPort类读取串口数据时,一旦开始读取数据,串口缓存就会被清空。这是由于串口通信的特性决定的,无法绕过。想在读取数据的同时保留串口缓存中的数据,可以在读取数据后立即保存这些数据到其他地方,缓冲区或者文件中,再继续读取后续的数据。这样可以确保你在读取数据的同时不丢失之前的数据。