浅谈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();