当前位置: 首页 > article >正文

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


http://www.kler.cn/a/293203.html

相关文章:

  • MQTT协议解析 : 物联网领域的最佳选择
  • JQuery封装的ajax
  • POI实现根据PPTX模板渲染PPT
  • macOS解决U盘装完系统容量变小的问题
  • 算法演练----24点游戏
  • nginx部署H5端程序与PC端进行区分及代理多个项目及H5内页面刷新出现404问题。
  • 【论文速读】| 基于大语言模型智能体对文本到图像模型进行越狱
  • X 射线测厚仪-高效精准,厚度测量的卓越之选
  • 基于free5gc模拟5G核心网和UERANSIM模拟5G用户设备的模拟5G网络环境的部署搭建方法总结和解析。
  • linux基础IO——用户缓冲区——概念深度探索、IO模拟实现
  • Faker在pytest中的应用
  • [数据集][目标检测]翻越栏杆行为检测数据集VOC+YOLO格式512张1类别
  • 鹏哥C语言自定义笔记重点(44-)
  • sqlite数据插入效率
  • Ubuntu安装android studio(压缩包版)
  • 想入门网络安全却不知道怎么入手,看这一篇就够了!
  • 如何在Mac中修改pip的镜像源
  • Pyspark中的ROW对象使用
  • 基础学习之——Docker 的基本概念和优势,以及在应用程序开发中的实际应用。
  • #驱动开发
  • 什么是RPC
  • 使用SVD(奇异值分解)进行降维的奇妙之旅
  • STM32外设SPI(串行通信),W25Q64(8Mb)
  • 软件测试面试(平安保险)
  • 容器化技术在非结构化数据中台的部署研究
  • 父类是给java项目SpringCloud微服务 中SpringBoot解决继承父类后 maven标红