|
发表于 2011-8-15 17:40:30
|
显示全部楼层
在中断中接收加入到缓冲区,在定时进行处理。
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_强电[COMRecData_i强电] = 0xBB;
//收到强
if ((COMRecData_强电[0]==0x01)&&(COMRecData_强电[1]==0xFE)) //开机
{
LOG_强电("收到:强电开启应答");
}
if ((COMRecData_强电[0] == 0x02) && (COMRecData_强电[1] == 0xFD)) //关机
{
LOG_强电("收到:强电关闭应答,退出程序");
apps.Form_main.自动关机 = true;
apps.Form_main.Close();
}
COM_同步_Recing = false;
continue;
}
if (COM_强电_Recing) //有数据头!
{
COMRecData_强电[COMRecData_i强电] = COM_强电_ReadD;//| (byte)(COM_同步_ReadD & 0x0f));
COMRecData_i强电++;
/* if (h)
{
Hbyte = (byte)((COM_同步_ReadD << 4));// & 0xf0);
h = false;
}
else
{
COMRecData_同步[COMRecData_i同步] = (byte)(Hbyte | (COM_同步_ReadD & 0x0f));
COMRecData_i同步++;
h = true;
}*/
}
}
}
} |
|