一、基本介绍
C#中实现232通讯,通常指的是通过串行通信接口(如RS232或RS485)与串行设备进行数据交换。以下是一个使用System.IO.Ports命名空间中的SerialPort类创建的基本示例。
二、简单示例
创建SerialPort实例:首先,你需要创建一个SerialPort
对象,并设置其参数,如端口名、波特率、数据位、停止位和奇偶校验位。
SerialPort serialPort = new SerialPort();
serialPort.PortName = "COM1"; // 串口号
serialPort.BaudRate = 9600; // 波特率
serialPort.DataBits = 8; // 数据位
serialPort.StopBits = StopBits.One; // 停止位
serialPort.Parity = Parity.None; // 校验位
打开串口:在配置好串口参数之后,你需要打开串口,以便与外部设备进行通信。
try
{
serialPort.Open();
Console.WriteLine("串口打开成功");
}
catch (Exception e)
{
Console.WriteLine("串口打开失败: " + e.Message);
}
发送数据:现在,我们已经成功打开了串口。接下来,让我们发送一些数据。
string dataToSend = "Hello, Serial Device!";
serialPort.WriteLine(dataToSend);
Console.WriteLine("数据发送成功: " + dataToSend);
接收数据:在发送数据之后,我们可能需要从外部设备接收数据。
string receivedData = serialPort.ReadLine();
Console.WriteLine("接收到的数据: " + receivedData);
关闭串口:在完成数据传输之后,我们需要关闭串口。
serialPort.Close();
Console.WriteLine("串口已关闭");
事件处理:你可以设置DataReceived
事件来异步接收数据。
serialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting();
Console.WriteLine($"接收到数据: {indata}");
}
三、完整示例
using System;
using System.IO.Ports;
class SerialPortExample
{
private SerialPort serialPort;
public SerialPortExample()
{
serialPort = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One); // 设置串口参数
serialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler); // 注册接收到数据时的事件处理方法
serialPort.Open(); // 打开串口连接
}
private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting();
Console.WriteLine("Data Received:");
Console.Write(indata);
}
public void SendData(string data)
{
if (serialPort.IsOpen)
{
serialPort.WriteLine(data); // 发送数据
}
}
public void ClosePort()
{
if (serialPort.IsOpen)
{
serialPort.Close(); // 关闭串口
}
}
}