public RfidInfo ReadCard() { var rfidInfo = new RfidInfo(); byte[] snr = convertSNR(readWriteKey, 6); byte[] buffer = new byte[16 * num_blk]; int nRet = MF_Read(mode, blk_add, num_blk, snr, buffer); rfidInfo.Message = getStatueText(nRet); if (nRet != 0) { rfidInfo.Message = getStatueText(buffer[0]); } else { rfidInfo.Success = true; rfidInfo.ID = ConvertData(snr, 0, 4); rfidInfo.Data = buffer.TakeWhile(m => m != 0).ToArray(); rfidInfo.DataStr = ConvertData(buffer, 0, 16 * num_blk); } return(rfidInfo); }
public RfidInfo WriteCard(RfidInfo info) { byte[] snr = convertSNR(readWriteKey, 16); byte[] buffer = new byte[16]; info.Data.CopyTo(buffer, 0); int nRet = Reader.MF_Write(mode, blk_add, num_blk, snr, buffer); info.Message = getStatueText(nRet); if (nRet != 0) { info.Message = getStatueText(buffer[0]); } else { info.ID = ConvertData(snr, 0, 4); info.Data = buffer.TakeWhile(m => m != 0).ToArray(); info.DataStr = ConvertData(buffer, 0, 16 * num_blk); } return(info); }
public void AddRecord(SocketSession session, SocketRequestInfo requestInfo) { String strKey = requestInfo.Key; String strVal = requestInfo.OriginBody; if (strKey == "" || strKey == string.Empty) { return; } bool bAddNewCar = false; var strCarID = session.CarID; #region RFID if (strKey == "RFID") { strVal = requestInfo.TargetBody; if (strCarID == "") { strCarID = "未知"; CarLoad(strCarID); //((SWGPSServer)(base.AppServer)).CarLoad(this, strCarID); } // lock (m_FrozedProcessLock) { try { strVal = strVal.Replace(" ", ""); string[] strParts = Regex.Split(strVal, "11003F", RegexOptions.IgnoreCase); bool bStart = false; if (strParts.Length >= 1) { if (strVal.Substring(0, 6) == "11003F") { bStart = true; } else { bStart = false; } #region 获得此次RFID List <String> lstIDS = new List <string>(); for (int i = 0; i < strParts.Length; i++) { if (strParts[i].Length < 26) { continue; } if (i == 0) { if (bStart == false) { continue; } } String strRFID = ""; strRFID = strParts[i].Substring(0, 26); if (lstIDS.Contains(strRFID)) { continue; } lstIDS.Add(strRFID); Console.WriteLine("收到-" + strRFID); } #endregion #region 判断是否可入库 if (lstIDS.Count > 0) { List <RfidInfo> lstAdd = new List <RfidInfo>(); for (int i = 0; i < lstIDS.Count; i++) { if (lstRFIDCodes.Contains(lstIDS[i])) { for (int j = lstRFID.Count - 1; j >= 0; j--) { if (lstRFID[j].Code == lstIDS[i]) { //判断时间间隔 if ((System.DateTime.Now - lstRFID[j].PutDateTime).Minutes < 20) { break; } else { lstRFID.RemoveAt(j); lstRFIDCodes.RemoveAt(j); lstRFIDCodes.Add(lstIDS[i]); RfidInfo rf = new RfidInfo(); rf.Code = lstIDS[i]; rf.PutDateTime = System.DateTime.Now.ToLocalTime(); rf.DateDesri = rf.PutDateTime.ToString("yyyy-MM-dd HH:mm:ss"); rf.Car = strCarID; lstRFID.Add(rf); if (lstRFID.Count > 100) { lstRFID.RemoveRange(0, lstRFID.Count - 100); } if (lstRFIDCodes.Count > 100) { lstRFIDCodes.RemoveRange(0, lstRFIDCodes.Count - 100); } Console.WriteLine("写入" + rf.Code); if (rf.Car == "" || rf.Car == "未知") { lstRFIDNull.Add(rf); } else { lstAdd.Add(rf); } } } } } else { lstRFIDCodes.Add(lstIDS[i]); if (lstRFIDCodes.Count > 100) { lstRFIDCodes.RemoveRange(0, lstRFIDCodes.Count - 100); } RfidInfo rf = new RfidInfo(); rf.Code = lstIDS[i]; rf.PutDateTime = System.DateTime.Now.ToLocalTime(); rf.DateDesri = rf.PutDateTime.ToString("yyyy-MM-dd HH:mm:ss"); rf.Car = strCarID; lstRFID.Add(rf); if (lstRFID.Count > 100) { lstRFID.RemoveRange(0, lstRFID.Count - 100); } Console.WriteLine("写入" + rf.Code); if (rf.Car == "" || rf.Car == "未知") { lstRFIDNull.Add(rf); } else { lstAdd.Add(rf); } } } if (lstAdd.Count > 0) { AddRFID(session, lstAdd); if (strCarID != "" && strCarID != "未知") { for (int i = 0; i < lstRFIDNull.Count; i++) { lstRFIDNull[i].Car = strCarID; } AddRFID(session, lstRFIDNull); lstRFIDNull.Clear(); } } } #endregion } } catch (Exception ex) { return; } } return; } #endregion String[] strValues = strVal.Split(','); if (strValues == null) { return; } if (strValues.Length < 10) { return; } String strLog = strValues[0]; if (strLog.Length > 7) { String strID = strLog.Replace("$GPSLOC", ""); strLog = strLog.Substring(strID.Length, strLog.Length - strID.Length); strID = "鲁" + strID; if (string.IsNullOrEmpty(strCarID) || strCarID == "未知") { strCarID = strID; session.CarID = strCarID; CarLoad(strCarID); lstJustRecords.Clear(); lstRecords.Clear(); Console.WriteLine(strCarID + "上线"); } } if (strCarID == "") { strCarID = "未知"; CarLoad(strCarID); lstJustRecords.Clear(); lstRecords.Clear(); } String strJD = strValues[2]; //经度 if (double.Parse(strJD) < 1) { return; } { if (strJD == "") { return; } if (Convert.ToDouble(strJD) < 0.1) { return; } int iPos = strJD.IndexOf('.');//4 String str1 = strJD.Substring(0, iPos); String strFen = str1.Substring(str1.Length - 2, 2); string strDu = str1.Substring(0, str1.Length - strFen.Length); string strDot = strJD.Substring(iPos, strJD.Length - str1.Length); strJD = (Convert.ToDouble(strDu) + Convert.ToDouble(strFen + strDot) / 60).ToString(); } String strWD = strValues[1]; //纬度 if (double.Parse(strWD) < 1) { return; } { if (strWD == "") { return; } if (Convert.ToDouble(strWD) < 0.1) { return; } int iPos = strWD.IndexOf('.');//4 String str1 = strWD.Substring(0, iPos); String strFen = str1.Substring(str1.Length - 2, 2); string strDu = str1.Substring(0, str1.Length - strFen.Length); string strDot = strWD.Substring(iPos, strWD.Length - str1.Length); strWD = (Convert.ToDouble(strDu) + Convert.ToDouble(strFen + strDot) / 60).ToString(); } String strGD = strValues[3]; //高度 String strTime = strValues[4]; //时间 System.DateTime tm = default(System.DateTime); try { string strY = strTime.Substring(0, 4); string strM = strTime.Substring(4, 2); string strD = strTime.Substring(6, 2); string strH = strTime.Substring(8, 2); // strH = (Convert.ToInt32(strH) + 8).ToString(); string strMinute = strTime.Substring(10, 2); string strsecond = strTime.Substring(12, strTime.Length - 12 - 1); strsecond = Convert.ToInt32(Convert.ToDouble(strsecond)).ToString(); strTime = strY + "-" + strM + "-" + strD + " " + strH + ":" + strM + ":" + strsecond; try { tm = new DateTime(Convert.ToInt32(strY), Convert.ToInt32(strM), Convert.ToInt32(strD), Convert.ToInt32(strH), Convert.ToInt32(strMinute), Convert.ToInt32(strsecond), DateTimeKind.Utc); System.DateTime tnew = tm.ToLocalTime(); strTime = tnew.ToString("yyyy-MM-dd HH:mm:ss"); } catch (Exception all) { return; } } catch (Exception fe) { session.AppServer.Logger.Error("date format exception :" + fe.Message + fe.StackTrace); return; } string strWXNum = strValues[6];//卫星个数 string strSpeed = strValues[7]; double dSpeed = 0; if (strSpeed != "") { try { dSpeed = Convert.ToDouble(strSpeed); //dSpeed = dSpeed * 0.5144;//米/秒 //dSpeed = dSpeed * 3600 / 1000; dSpeed = dSpeed * 1.85184; strSpeed = dSpeed.ToString("###.##"); } catch (Exception e) { } } else { strSpeed = "0"; } if (strSpeed == "") { strSpeed = "0"; } string strFix = strValues[5]; string strHx = strValues[8]; if (strWXNum == "") { strWXNum = "3"; } if (Convert.ToInt32(strWXNum) < 4) { return; } if (strGD == "") { strGD = "6000"; } if (Convert.ToDouble(strGD) > 3000) { return; } if (double.Parse(strSpeed) > 200) { return; } String strXH = "0"; GpsInfo info = new GpsInfo(); info.ID = strCarID; info.Lat = double.Parse(strWD); info.Lng = double.Parse(strJD); info.Speed = double.Parse(strSpeed); info.StarNum = int.Parse(strWXNum); info.Hight = double.Parse(strGD); info.Order = int.Parse(strXH); info.Date = strTime; info.StandardTime = tm; if (lstRecords.Count < 1) { JustFirst(session, info); } else { //开始判断下一个点是否符合要求 int iIndex = lstRecords.Count - 1; double dDistanceNew = GetDistance(lstRecords[0].Lat, lstRecords[0].Lng, info.Lat, info.Lng); if (dDistanceNew < 200) { lstRecords.Add(info); lstRecords.RemoveAt(0); if (lstJumpRecords.Count > 0) { lstJumpRecords.Clear(); } AddRecord(session, info); Console.WriteLine("*****添加:" + strVal); return; } else { if (lstJumpRecords.Count < 1) { lstJumpRecords.Add(info); return; } else { double dis = GetDistance(lstJumpRecords[lstJumpRecords.Count - 1].Lat, lstJumpRecords[lstJumpRecords.Count - 1].Lng, info.Lat, info.Lng); if (dis < 200) { lstJumpRecords.Add(info); return; } } if ((info.StandardTime - lstRecords[iIndex].StandardTime).TotalSeconds > 120) { lstRecords.Clear(); lstJustRecords.Clear(); lstJumpRecords.Clear(); dLastLat = -1; dLastLng = -1; Console.WriteLine("&&&&&&&&&&&&&&重新计算:" + strVal); return; } else { Console.WriteLine("异常点舍弃:" + strVal); } } } }
/// <summary> /// RFID消息处理 /// </summary> /// <param name="PortErrorMessage"></param> /// <param name="WriteErrorMessage"></param> /// <param name="ReadErrorMessage"></param> private void ReadRFIDWindow_RFIDInfoEvent(RfidInfo info) { if (info.InfoType == RFIDInfoEnum.PortError) { _systemLogViewModel.AddMewStatus(info.Content, LogTypeEnum.Error); } else if (info.InfoType == RFIDInfoEnum.WriteError)//写入失败 { _systemLogViewModel.AddMewStatus(info.Content, LogTypeEnum.Error); if (_taskOrderViewModel.SelectedModel != null) { _taskOrderViewModel.SelectedModel.defective_count += 1;//更新异常数量 _taskOrderViewModel.Update(_taskOrderViewModel.SelectedModel); } } else if (info.InfoType == RFIDInfoEnum.WriteSuccess)//写入成功,直接显示信息 { lastWriteInfo = info.Sn; _systemLogViewModel.AddMewStatus(info.Content); } else if (info.InfoType == RFIDInfoEnum.ReadError)//读取失败 { //rfidReadTimer.IsEnabled = false; //rfidReadTimer.Stop(); _systemLogViewModel.AddMewStatus(info.Content, LogTypeEnum.Error); if (RFID_ReadFeedbackTag != null && RFID_ReadSigTag.TagValue == 1) { RFID_ReadFeedbackTag.Write(2); } if (_taskOrderViewModel.SelectedModel != null) { _taskOrderViewModel.SelectedModel.defective_count += 1;//更新异常数量 if (_taskOrderViewModel.Update(_taskOrderViewModel.SelectedModel)) { _systemLogViewModel.AddMewStatus($"RFID信息读取失败,更新不良品数量,当前不良品数量为{_taskOrderViewModel.SelectedModel.defective_count}", LogTypeEnum.Info); } } } else if (info.InfoType == RFIDInfoEnum.ReadSuccess)//读取成功 { //rfidReadTimer.IsEnabled = false; //rfidReadTimer.Stop(); _systemLogViewModel.AddMewStatus(info.Content); if (info.Sn == lastWriteInfo) { _systemLogViewModel.AddMewStatus("RFID比对成功!开始写入PLC=1"); if (RFID_ReadFeedbackTag != null && RFID_ReadSigTag.TagValue == 1) { RFID_ReadFeedbackTag.Write(1);// } } else { _systemLogViewModel.AddMewStatus("RFID比对失败!开始写入PLC=2"); if (RFID_ReadFeedbackTag != null && RFID_ReadSigTag.TagValue == 1) { RFID_ReadFeedbackTag.Write(2); } } } }