浅谈C#之485通讯

一、基本介绍

        C#中实现485通讯,通常指的是使用RS-485串行通信接口。RS-485是一种半双工通信标准,常用于工业环境中的设备之间的通信。

二、简单示例

打开串口:首先,你需要创建一个SerialPort对象,并设置其参数,如端口名、波特率、数据位、停止位和奇偶校验位。然后打开串口。

SerialPort sp = new SerialPort();
sp.PortName = "COM1"; // 串口名称
sp.BaudRate = 9600; // 波特率
sp.DataBits = 8; // 数据位
sp.StopBits = StopBits.One; // 停止位
sp.Parity = Parity.None; // 奇偶校验
sp.Open(); // 打开串口

发送数据:使用SerialPort类的Write方法发送数据。你可以发送字节数组或字符串。

byte[] data = new byte[] { 0x01, 0x02, 0x03 };
sp.Write(data, 0, data.Length); // 发送字节数组

接收数据:使用SerialPort类的Read方法接收数据。你可以读取到一个字节数组中。

byte[] buffer = new byte[1024];
int count = sp.Read(buffer, 0, buffer.Length); // 读取数据到buffer

关闭串口:通信完成后,使用SerialPort类的Close方法关闭串口。

sp.Close(); // 关闭串口

在处理RS485通信时,你可能还需要控制RTS和DTR引脚来管理发送和接收模式,因为RS485通常使用半双工通信。例如,要将设备设置为发送模式,你可以将RTS和DTR引脚置低。

sp.RtsEnable = false; // 将RS485设置为发送模式
sp.DtrEnable = false;

要将设备设置为接收模式,你可以将RTS和DTR引脚置高。

sp.RtsEnable = true; // 将RS485设置为接收模式
sp.DtrEnable = true;

三、完整示例

using System;
using System.IO.Ports;
 
class RS485Communication
{
    private SerialPort serialPort;
 
    public RS485Communication(string portName)
    {
        serialPort = new SerialPort(portName, 9600); // 设置COM端口和波特率
        serialPort.DataBits = 8;
        serialPort.Parity = Parity.Even; // 根据需要设置奇偶校验位
        serialPort.StopBits = StopBits.One;
        serialPort.Handshake = Handshake.RequestToSend; // 设置握手方式,RS-485通常使用RequestToSend或XOnXOff
    }
 
    public void Open()
    {
        try
        {
            if (!serialPort.IsOpen)
            {
                serialPort.Open();
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("Error opening port: " + ex.Message);
        }
    }
 
    public void Close()
    {
        if (serialPort.IsOpen)
        {
            serialPort.Close();
        }
    }
 
    public void SendData(string data)
    {
        if (serialPort.IsOpen)
        {
            serialPort.WriteLine(data);
        }
        else
        {
            Console.WriteLine("Port is not open.");
        }
    }
 
    public void ReceiveData()
    {
        serialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
    }
 
    private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
    {
        SerialPort sp = (SerialPort)sender;
        string indata = sp.ReadExisting();
        Console.WriteLine("Data Received:");
        Console.WriteLine(indata);
    }
}
 
// 使用方法
RS485Communication comm = new RS485Communication("COM3"); // 选择正确的COM端口
comm.Open();
comm.SendData("Hello RS-485");
comm.ReceiveData();
// 应用程序运行时,将持续接收数据
// 当不再需要接收数据时,关闭端口
comm.Close();

你可能感兴趣的:(C#,网络)