C#实现串口通信都有哪些方法?

duoxiangliuti 2011-05-04 04:50:07
以前一直用的C++做通信,用起来还比较方便,最近有个项目打算用C#,不知道跟用C++做通信区别大不,都有哪些方法,跟C++相比是不是要复杂很多。
...全文
216 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
暮天逸 2011-05-04
  • 打赏
  • 举报
回复
using System;
using System.Linq;
using System.Text;
using System.IO.Ports;
using System.Threading;
using System.Collections.Generic;

namespace HFAirport.AWOSMonitor.SocketService
{


//public delegate void SendDataCallBackHandler(byte[] readbuffer);
public class MonitorHelper
{

public static readonly MonitorHelper Instance = new MonitorHelper();
private SerialPort _serialPort;
//发送数据(委托)
//public SendDataCallBackHandler SendDataCallBack;
byte[] receiveBuffer;
/// <summary>
/// receiveBuff
/// </summary>
/// <param name="portName">串口名</param>
/// <param name="baudRate">波特率</param>
/// <param name="dataBits">数据位</param>
public void OpenPort(string portName, int baudRate, int dataBits)
{
OpenPort(portName, baudRate, Parity.None, dataBits, StopBits.One);
}

/// <summary>
/// 打开串口
/// </summary>
/// <param name="portName">串口名</param>
/// <param name="baudRate">波特率</param>
/// <param name="parity">校验</param>
/// <param name="dataBits">数据位</param>
/// <param name="stopBits">停止位</param>
public void OpenPort(string portName, int baudRate, Parity parity, int dataBits, StopBits stopBits)
{
_serialPort = new SerialPort(portName, baudRate, parity, dataBits, stopBits);

if (_serialPort != null)
{
_serialPort.Open();
_serialPort.DataReceived += new SerialDataReceivedEventHandler(_serialPort_DataReceived);
}
}

/// <summary>
/// 关闭串口
/// </summary>
public void ClosePort()
{
_serialPort.DataReceived -= _serialPort_DataReceived;
_serialPort.Close();
_serialPort.Dispose();
_serialPort = null;
}

/// <summary>
/// 串口触发的数据接收事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void _serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
Thread.Sleep(1000);
receiveBuffer = new byte[_serialPort.BytesToRead];
_serialPort.Read(receiveBuffer, 0, _serialPort.BytesToRead);

//if (SendDataCallBack != null)
//{
// SendDataCallBack(receiveBuff);
//}
}

/// <summary>
/// 发送数据,返回读取的返回字节数组
/// </summary>
/// <param name="bytes"></param>
public void PowerOn()
{
List<byte> receivedList = new List<byte>();
byte[] writeBuffer = new byte[5];
writeBuffer[0] = 0x01;
writeBuffer[1] = Convert.ToByte('0');
writeBuffer[2] = Convert.ToByte('1');
writeBuffer[3] = Convert.ToByte('D');
writeBuffer[4] = 0x03;

_serialPort.Write(writeBuffer, 0, writeBuffer.Length);
Thread.Sleep(200);

}

public List<byte> GetData()
{
List<byte> receivedList = new List<byte>();
for (int j = 0; j < 3; j++)
{
if (receiveBuffer != null)
{
for (int i = 0; i < receiveBuffer.Length; i++)
{
receivedList.Add(receiveBuffer[i]);


}
break;
}
}
receiveBuffer = null;
return receivedList;
}


public void sendData(byte[] sendBuff)
{

_serialPort.Write(sendBuff, 0, sendBuff.Length);

}

/// <summary>
/// 关闭电源
/// </summary>
public void ClosePower()
{

byte[] writeBuffer = new byte[7];
writeBuffer[0] = 0x01;
writeBuffer[1] = Convert.ToByte('0');
writeBuffer[2] = Convert.ToByte('1');
writeBuffer[3] = Convert.ToByte('G');
writeBuffer[4] = Convert.ToByte('0');
writeBuffer[5] = Convert.ToByte('1');
writeBuffer[6] = 0x03;
_serialPort.Write(writeBuffer, 0, writeBuffer.Length);
Thread.Sleep(200);
}

/// <summary>
/// 开启电源
/// </summary>
public void OpenPower()
{

byte[] writeBuffer = new byte[7];
writeBuffer[0] = 0x01;
writeBuffer[1] = Convert.ToByte('0');
writeBuffer[2] = Convert.ToByte('1');
writeBuffer[3] = Convert.ToByte('K');
writeBuffer[4] = Convert.ToByte('0');
writeBuffer[5] = Convert.ToByte('2');
writeBuffer[6] = 0x03;
_serialPort.Write(writeBuffer, 0, writeBuffer.Length);
//Thread.Sleep(200);
}
/// <summary>
/// 关闭空调
/// </summary>
public void CloseAirconditioning()
{

byte[] writeBuffer = new byte[7];
writeBuffer[0] = 0x01;
writeBuffer[1] = Convert.ToByte('0');
writeBuffer[2] = Convert.ToByte('1');
writeBuffer[3] = Convert.ToByte('G');
writeBuffer[4] = Convert.ToByte('0');
writeBuffer[5] = Convert.ToByte('2');
writeBuffer[6] = 0x03;
_serialPort.Write(writeBuffer, 0, writeBuffer.Length);
Thread.Sleep(200);
}
/// <summary>
/// 开启空调
/// </summary>
public void OpenAirconditioning()
{

byte[] writeBuffer = new byte[7];
writeBuffer[0] = 0x01;
writeBuffer[1] = Convert.ToByte('0');
writeBuffer[2] = Convert.ToByte('1');
writeBuffer[3] = Convert.ToByte('K');
writeBuffer[4] = Convert.ToByte('0');
writeBuffer[5] = Convert.ToByte('2');
writeBuffer[6] = 0x03;
_serialPort.Write(writeBuffer, 0, writeBuffer.Length);
Thread.Sleep(200);
}






/// <summary>
/// 写参数
/// </summary>
/// <param name="ParameterNo"></param>
/// <param name="ParameterValue"></param>
public List<int> WriteParameter(string ParameterNo, string ParameterValue)
{

List<int> receivedList = new List<int>();

byte[] No = Encoding.ASCII.GetBytes(ParameterNo);
byte[] Value = Encoding.ASCII.GetBytes(ParameterValue);
byte[] writeBuffer = new byte[9];
writeBuffer[0] = 0x01;
writeBuffer[1] = Convert.ToByte('0');
writeBuffer[2] = Convert.ToByte('1');
writeBuffer[3] = Convert.ToByte('X');
writeBuffer[4] = No[0];
writeBuffer[5] = No[1];
writeBuffer[6] = Value[0];
writeBuffer[7] = Value[1];
writeBuffer[8] = 0x03;


////SendDataCallBack += new SendDataCallBackHandler((recievedBuffer) =>
//{
// for (int i = 0; i < recievedBuffer.Length; i++)
// {
// receivedList.Add(Convert.ToInt32(recievedBuffer[i].ToString("X2"), 16));
// }

//});
_serialPort.Write(writeBuffer, 0, writeBuffer.Length);

if (receivedList == null)
{
Thread.Sleep(300);
}

return receivedList;


}


}
}
cy757 2011-05-04
  • 打赏
  • 举报
回复
我博客上有相关资料
http://blog.csdn.net/cy757/archive/2009/08/23/4474930.aspx
yang1216 2011-05-04
  • 打赏
  • 举报
回复
SerialPort类。

111,125

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧