C#窗体程序,创建串口的接收,先检查串口的连接状态,COM3收到十六进制数据"70 6C 61 79"后触事件1,COM3收到十六进制数据"70 61 75 73 61"后触事件2的完整代码
时间: 2024-09-18 18:05:16 浏览: 45
在C#中,你可以使用`System.IO.Ports`命名空间下的SerialPort类来处理串口通信。下面是一个简单的示例代码,展示了如何创建一个串口对象、检查连接状态并设置事件监听:
```csharp
using System;
using System.IO.Ports;
public partial class MainForm : Form
{
private SerialPort serialPort; // 创建SerialPort实例
public MainForm()
{
InitializeComponent();
// 初始化串口配置
serialPort = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One);
serialPort.DataReceived += SerialDataReceived; // 注册DataReceived事件
// 检查连接并打开串口
if (!serialPort.IsOpen)
{
try
{
serialPort.Open();
Console.WriteLine("串口已打开");
}
catch (Exception ex)
{
MessageBox.Show($"无法打开串口:{ex.Message}");
}
}
else
{
MessageBox.Show("串口已打开,等待数据");
}
}
// 数据接收事件处理器
private void SerialDataReceived(object sender, SerialDataReceivedEventArgs e)
{
string hexData = serialPort.ReadExisting().ToString("X4"); // 读取4字节并转换为十六进制字符串
switch (hexData)
{
case "706C6179":
OnEvent1(); // 触发事件1
break;
case "7061757361":
OnEvent2(); // 触发事件2
break;
// 其他处理...
}
}
protected virtual void OnEvent1() => RaiseEvent(new EventArgs()); // 定义虚方法触发事件1
protected virtual void OnEvent2() => RaiseEvent(new EventArgs()); // 定义虚方法触发事件2
// 虚拟事件声明(这里假设事件名为EventArgs,实际项目需替换)
public event EventHandler Event1;
public event EventHandler Event2;
// 提供触发事件的方法
protected virtual void RaiseEvent(EventArgs e)
{
if (Event1 != null) Event1(this, e); // 触发事件1
if (Event2 != null) Event2(this, e); // 触发事件2
}
}
```
在这个例子中,我们首先创建了一个SerialPort实例,并设置了数据接收事件。然后检查串口是否已经打开,如果未开则尝试打开。当接收到指定的十六进制数据时,会通过`switch`语句触发相应的事件。
注意,这个示例中的`OnEvent1` 和 `OnEvent2` 是虚拟方法,用于在子类中覆盖以自定义事件处理逻辑。你需要将`EventArgs`替换为你实际使用的事件参数类型。
阅读全文