C#如何实现串口自动接收数据
各位大神,C#如何实现串口自动接收数据?请尽量写得详细点,先谢谢了! 看“缓冲区满”能否作为一个event? 解决了,serialport控件有个DataReceived事件! 在中断中接收加入到缓冲区,在定时进行处理。private void serialPort_强电_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
// if (timer1.Enabled)
CommReading_强电 = true;
while (serialPort_强电.BytesToRead > 0)
{
//apps.BASE.Queue_同步.IN((byte)serialPort_同步.ReadByte());
byte d = (byte)(serialPort_强电.ReadByte() & 0x000000ff);
// lock(COM_同步_Data)
{
COM_强电_Data.Enqueue(d);
}
// Application.DoEvents();
}
CommReading_强电 = false;
}
private void 强电接收()
{
string recs = "";
// bool h = false;
//byte Hbyte = 0x00;
if (CommReading_强电) return;
// lock (COM_强电_Data)
{
while (COM_强电_Data.Count > 0)
//while(apps.BASE.Queue_同步.HaveData())
{
while (CommReading_强电)
{
Application.DoEvents();
}
COM_强电_LastD = COM_强电_ReadD;
COM_强电_ReadD = Convert.ToByte(COM_强电_Data.Dequeue());
//COM_同步_ReadD = apps.BASE.Queue_同步.OUT();
recs += COM_同步_ReadD.ToString("X2");
if (COM_强电_ReadD == 0xAA)
{
COMRecData_i强电 = 0;
//h = true;
COM_强电_Recing = true;
continue;
}
if (COMRecData_i强电 > 100) COMRecData_i强电 = 0;
if (COM_强电_ReadD == 0xBB)
{
//COMRecData_强电 = 0xBB;
//收到强
if ((COMRecData_强电==0x01)&&(COMRecData_强电==0xFE)) //开机
{
LOG_强电("收到:强电开启应答");
}
if ((COMRecData_强电 == 0x02) && (COMRecData_强电 == 0xFD)) //关机
{
LOG_强电("收到:强电关闭应答,退出程序");
apps.Form_main.自动关机 = true;
apps.Form_main.Close();
}
COM_同步_Recing = false;
continue;
}
if (COM_强电_Recing) //有数据头!
{
COMRecData_强电 = COM_强电_ReadD;//| (byte)(COM_同步_ReadD & 0x0f));
COMRecData_i强电++;
/* if (h)
{
Hbyte = (byte)((COM_同步_ReadD << 4));// & 0xf0);
h = false;
}
else
{
COMRecData_同步 = (byte)(Hbyte | (COM_同步_ReadD & 0x0f));
COMRecData_i同步++;
h = true;
}*/
}
}
}
} mark mark
页:
[1]