浅谈C#之232通讯

一、基本介绍

        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(); // 关闭串口
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CnLg.NJ

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值