C#SerialPort连接串⼝,读写串⼝数据
C# SerialPort连接串⼝,读写串⼝数据
⼀、起始
最近在公司做上位机,上位机要求是能够读取⼀款⽀持串⼝通信的传感器并且把传感器的数据⽤图表显⽰出来,且上位机能对传感器发送指令,需求有涉及到串⼝通信和绘制图表。
那么⾸先要解决的问题就是能够让电脑上的程序进⾏串⼝通信,有串⼝通信的编程语⾔有很多,C++,C#,JAVA,Python等语⾔都是⽀持串⼝通信的。我选择了使⽤C#,因为上位机主要是在Windows操作系统上运⾏,⽽C#对于winodws桌⾯应⽤的开发⽀持是⽐较⽅便的,功能也⽐较强⼤,尤其是WPF程序,做出来的UI页⾯⽐较好看
那么本篇内容就介绍c#程序怎么实现串⼝通信
⼆、⼯具准备
开发⼯具:Visual Studio 2019 Community
开发⼯具下载:免费的 IDE 和开发⼈员⼯具 | Visual Studio Community
维特智能姿态⾓度传感器JY901模块1
USB-TLL模块1、杜邦线*1
三、新建项⽬python怎么读取串口数据
1.新建项⽬,选择WPF应⽤程序,你可能会发现两个 WPF 桌⾯模板,⼀个⽤于 .NET Framework,另⼀个⽤于 .NET Core。 .NET Core 模板在 Visual Studio 2019 16.3 及更⾼版本中可⽤。 你可以在本教程中使⽤任何⼀个,但建议使⽤ .NET Core 进⾏新的开发。
2.在下⼀屏幕中指定“项⽬名称”和选择“项⽬路径”,然后点击“创建”
四、添加串⼝通信引⽤
1.右击项⽬解决⽅案“管理NuGet程序包”,搜索“Ports”关键字,添加System.IO.Ports引⽤。System.IO.
Ports包是.Net
2.0以来集成的免费的串⼝通信包,
五、建⽴串⼝通信⼯具类
创建SerialPortUtils⼯具类,为了后⾯能够⽅便的操作串⼝我们先实现⼀个串⼝操作的⼯具类,串⼝通信中⽤到最多的操作就是“搜索串⼝”,”打开/关闭串⼝“,”接收数据“,“发送数据”,我们可以先实现以上操作的⽅法。
搜索串⼝实现,搜索串⼝可以直接调⽤SerialPort类的GetPortNames⽅法,该⽅法会返回⼀个串⼝名称的string数组。
打开关闭串⼝实现,这⾥传⼊“串⼝名称”和“波特率”参数打开串⼝,如果有需要其他参数可以修改⽅法参数。打开串⼝后把ReceiveData做为接收事件的委托。
接收串⼝数据的委托⽅法实现,sender对象为串⼝对象,接收数据后直接向控制台打印数据
发送数据实现,检查串⼝是否打开,然后向串⼝发送数据并且打印到控制台,这样⼀个简单的串⼝通信⼯具类就实现了
六、SerialPortUtils⼯具类完整代码
public class SerialPortUtils
{
public static string[]GetPortNames(){
return SerialPort.GetPortNames();
}
public static SerialPort SerialPort =null;
public static SerialPort OpenClosePort(string comName,int baud)
{
//串⼝未打开
if(SerialPort ==null||!SerialPort.IsOpen)
{
SerialPort =new SerialPort();
//串⼝名称
SerialPort.PortName = comName;
//波特率
SerialPort.BaudRate = baud;
/
/数据位
SerialPort.DataBits =8;
//停⽌位
SerialPort.StopBits = StopBits.One;
//校验位
SerialPort.Parity = Parity.None;
//打开串⼝
SerialPort.Open();
//串⼝数据接收事件实现
SerialPort.DataReceived +=new SerialDataReceivedEventHandler(ReceiveData);
return SerialPort;
}
//串⼝已经打开
else
{
SerialPort.Close();
return SerialPort;
}
}
public static void ReceiveData(object sender, SerialDataReceivedEventArgs e){
SerialPort _SerialPort =(SerialPort)sender;
int _bytesToRead = _SerialPort.BytesToRead;
byte[] recvData =new byte[_bytesToRead];
_SerialPort.Read(recvData,0, _bytesToRead);
//向控制台打印数据
Debug.WriteLine("收到数据:"+ recvData);
}
public static bool SendData(byte[] data)
{
if(SerialPort !=null&& SerialPort.IsOpen)
{
SerialPort.Write(data,0, data.Length);
Debug.WriteLine("发送数据:"+ data);
return true;
}
else{
return false;
}
}
}
七、⼯具类收发数据演⽰
JY901连接我的电脑是COM3
测试⽅法,在MainWindow创建testSerialPortUtils⽅法,testSerialPortUtils⽅法先搜索⼀遍串⼝,打印所有串⼝的名称;然后打开COM3,向COM3发送⼀条指令
调试输出结果
COM3
发送数据:System.Byte[]
收到数据:System.Byte[]
收到数据:System.Byte[]
收到数据:System.Byte[]
收到数据:System.Byte[]
收到数据:System.Byte[]
调试后发现输出的数据是⼀个Byte数组,是的在串⼝开发中收到的数据都是byte形式的,在串⼝开发过程中经常会遇到byte数据和⼆进制、⼗进制、⼗六进制的数据。下⼀篇“C#⼗六进制、⼗进制、⼆进制、字符串数据互转”将详细介绍串⼝开发中⽤到的数据装换
⼋、结语
再为⼤家介绍⼀个优秀的C#开源串⼝助⼿项⽬
码云OSDA开源串⼝助⼿项⽬地址:Leven/OSDA
感谢阅读本篇“C# SerialPort连接串⼝,读取串⼝数据”,本篇到此结束,下⼀篇“C#⼗六进制、⼗进制、⼆进制、字符串数据互转”

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。