public MainDataParsingService()
        {
            motorWord      = new MotorModel();
            batteryWord    = new BmuModel();
            mpptWord       = new MpptModel();
            ParsingService = this;

            CanFrame = new CanFrameModel(0, 0, new byte[8]);
        }
        public void BytesToCanFrameConversion(ConcurrentQueue <byte> ByteQueue)
        {
            while ((ByteQueue.Count >= 12))
            {
                byte   tmp         = 0;
                bool   IsAvailable = false;
                byte[] tempArray   = new byte[12];
                ByteQueue.TryPeek(out tmp);

                if ((tmp == 0xFF))
                {
                    IsAvailable = ByteQueue.TryDequeue(out tmp);
                    if (IsAvailable)
                    {
                        tempArray[(int)CanBytePosition.Sync] = tmp;
                    }
                    IsAvailable = ByteQueue.TryDequeue(out tmp);
                    if (IsAvailable)
                    {
                        tempArray[(int)CanBytePosition.ByteID0] = tmp;
                    }
                    IsAvailable = ByteQueue.TryDequeue(out tmp);
                    if (IsAvailable)
                    {
                        tempArray[(int)CanBytePosition.ByteID1] = tmp;
                    }
                    IsAvailable = ByteQueue.TryDequeue(out tmp);
                    if (IsAvailable)
                    {
                        tempArray[(int)CanBytePosition.ByteCnt] = tmp;
                    }
                    IsAvailable = ByteQueue.TryDequeue(out tmp);
                    if (IsAvailable)
                    {
                        tempArray[(int)CanBytePosition.ByteData0] = tmp;
                    }
                    IsAvailable = ByteQueue.TryDequeue(out tmp);
                    if (IsAvailable)
                    {
                        tempArray[(int)CanBytePosition.ByteData1] = tmp;
                    }
                    IsAvailable = ByteQueue.TryDequeue(out tmp);
                    if (IsAvailable)
                    {
                        tempArray[(int)CanBytePosition.ByteData2] = tmp;
                    }
                    IsAvailable = ByteQueue.TryDequeue(out tmp);
                    if (IsAvailable)
                    {
                        tempArray[(int)CanBytePosition.ByteData3] = tmp;
                    }
                    IsAvailable = ByteQueue.TryDequeue(out tmp);
                    if (IsAvailable)
                    {
                        tempArray[(int)CanBytePosition.ByteData4] = tmp;
                    }
                    IsAvailable = ByteQueue.TryDequeue(out tmp);
                    if (IsAvailable)
                    {
                        tempArray[(int)CanBytePosition.ByteData5] = tmp;
                    }
                    IsAvailable = ByteQueue.TryDequeue(out tmp);
                    if (IsAvailable)
                    {
                        tempArray[(int)CanBytePosition.ByteData6] = tmp;
                    }
                    IsAvailable = ByteQueue.TryDequeue(out tmp);
                    if (IsAvailable)
                    {
                        tempArray[(int)CanBytePosition.ByteData7] = tmp;
                    }

                    CanFrame = new CanFrameModel()
                    {
                        CANID    = BitConverter.ToUInt16(tempArray, (int)CanBytePosition.ByteID0),
                        CANCOUNT = tempArray[(int)CanBytePosition.ByteCnt],
                        CANDATA  = tempArray.Skip((int)CanBytePosition.ByteCnt + 1).ToArray(),
                    };

                    ParseCanFrame();
                }
                else
                {
                    byte result;
                    ByteQueue.TryDequeue(out result);
                }
            }
        }