110,545
社区成员
发帖
与我相关
我的任务
分享
bool isAllowedflag=true;
void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
if(isAllowedflag)
{
isAllowedflag=false;
...///你的代码
isAllowedflag=true;
}
}
/// <summary>
/// 打开串口
/// </summary>
private void openPort()
{
try
{
if (sp ==null)
{
sp = new SerialPort();
sp.PortName = baseClass.scom;
sp.BaudRate = 9600;
sp.StopBits = StopBits.One;
sp.DataReceived += sp_DataReceived;
}
else if (!sp.IsOpen)
{
sp.Open();
}
}
catch (Exception)
{
}
}
#region 串口数据读取
void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
string message = "";
byte[] ReceiveBuffer = new byte[100];
try
{
readCardState = false;
int cnt = sp.Read(ReceiveBuffer, 0, 32);
//延时20ms,等待系统自动将其它所有数据都接收完再一起读
Thread.Sleep(35);
cnt += sp.Read(ReceiveBuffer, cnt, 32);
//总数据
byte[] sumData = new byte[cnt];
//卡数据
//byte[] byteTemp = new byte[16];
//卡号
byte[] byteCarID = new byte[4];
sumData[0] = ReceiveBuffer[0];
//去掉数据中多出的一个7F
for (int i = 1, j = 1; i < cnt; i++)
{
//先判断一下这个为7F时,上一个也是7F的话,就是双个7F,就丢弃
if (ReceiveBuffer[i] == 0x7F && ReceiveBuffer[i - 1] == 0x7F) { continue; }
sumData[j++] = ReceiveBuffer[i];
}
//判断是否成功 0x00 读卡成功
if (sumData[4] == 0x00)
{
//获取卡号
byteCarID[0] = sumData[7];
byteCarID[1] = sumData[8];
byteCarID[2] = sumData[9];
byteCarID[3] = sumData[10];
if (sumData.Length == 29)
{
//获取卡数据
for (int i = 11, j = 0; i < 27; i++, j++)
{
//byteTemp[j] = sumData[i];
message += sumData[i].ToString("X2");
}
message = HexStringToString(message, Encoding.UTF8);
//卡号
cardnumber = Convert.ToInt64(message);
//判断刷卡时间 连续刷卡判断同一张卡N 秒内不重复
DataRow[] dr = cardinfoDataTable.Select("CRID='" + cardnumber + "'");
if (dr != null && dr.Count() > 0)
{
if ((Int32.Parse(DateTime.Now.ToString("HHmmss")) - Int32.Parse(dr[0]["SKTIME"].ToString())) > baseClass.CardInfoTime)
{
//刷卡判断
if (PAYBYCARD(cardnumber))
{
DataRow drEmployee = dr[0];
drEmployee.BeginEdit();
drEmployee["SKTIME"] = Int32.Parse(DateTime.Now.ToString("HHmmss"));
drEmployee.EndEdit();
}
else
{
Voice.Speak("刷卡失败,请从刷", SpFlags);
}
}
else
{
Voice.Speak("重复刷卡", SpFlags);
}
}
}
}
}
catch (Exception ex)
{
Loger.writeErr_Log("卡号:" + message + "刷卡异常:", ex.ToString());
Voice.Speak("刷卡异常", SpFlags);
}
}
#endregion
http://bbs.csdn.net/topics/392263509
这是我以前发的一个帖子,你可以了解下