111,125
社区成员
发帖
与我相关
我的任务
分享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;
}
}
}