Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
                    }
                }
            }
        }
Beispiel #4
0
        /// <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);
                    }
                }
            }
        }