Пример #1
0
        public static int GetRGBColor(Color ColorSelected)
        {
            string R = NumberBaseConverter.Dec2Hex(Convert.ToInt32(ColorSelected.R));
            string G = NumberBaseConverter.Dec2Hex(Convert.ToInt32(ColorSelected.G));
            string B = NumberBaseConverter.Dec2Hex(Convert.ToInt32(ColorSelected.B));

            if (R.Length < 2)
            {
                R = "0" + R;
            }

            if (G.Length < 2)
            {
                G = "0" + G;
            }

            if (B.Length < 2)
            {
                B = "0" + B;
            }

            string RGB = R + G + B;

            return(Convert.ToInt32(NumberBaseConverter.Hex2Dec(RGB)));
        }
Пример #2
0
        /// <summary>
        /// Trace file (*.trc) reading function
        /// </summary>
        /// <param name="FilePath">Trace file path</param>
        /// <param name="HeaderOnly">Header only reading option</param>
        /// <returns>File reading result (True: No error /False: Error)</returns>
        public bool ReadTrcFile(string FilePath, bool HeaderOnly)
        {
            bool Ret = true;

            BaseTrcFilePath = FilePath;

            StreamReader SR = new StreamReader(FilePath);

            try
            {
                while (!(SR.EndOfStream))
                {
                    string Line = SR.ReadLine();

                    if (Line.StartsWith(";"))                    //Header
                    {
                        if (Line.Contains("$FILEVERSION"))
                        {
                            int i = Line.IndexOf("=") + 1;
                            FileVersion = Line.Substring(i, Line.Length - i);
                        }

                        if (Line.Contains("$STARTTIME"))
                        {
                            int    i            = Line.IndexOf("=") + 1;
                            string StrStartTime = Line.Substring(i, Line.Length - i);
                            double DblStartTime = 0;

                            if (Double.TryParse(StrStartTime, out DblStartTime))
                            {
                                AbsDblStartTime = DblStartTime;
                                DblStartTime    = (double)((int)DblStartTime);
                                DateTime Dec30th1899 = new DateTime(1899, 12, 30);
                                AbsDTStartTime = Dec30th1899.AddDays(DblStartTime);
                                AbsDTStartTime = AbsDTStartTime.AddMilliseconds((AbsDblStartTime - DblStartTime) * 86400000);                           //86400000 millisecond in 1 day
                            }
                        }

                        if (Line.Contains("Start time:"))
                        {
                            int    i            = Line.IndexOf(":") + 2;
                            string StrStartTime = Line.Substring(i, Line.Length - i);

                            string[] SplitedStartTime = StrStartTime.Split(Char.Parse(" "));
                            string[] SplitedDate      = SplitedStartTime[0].Split(Char.Parse("/"));
                            string[] SplitedTime      = SplitedStartTime[1].Split(Char.Parse(":"));
                            string[] SplitedSecond    = SplitedTime[2].Split(Char.Parse("."));

                            StartTime = StartTime.AddYears(int.Parse(SplitedDate[2]) - 1);
                            StartTime = StartTime.AddMonths(int.Parse(SplitedDate[1]) - 1);
                            StartTime = StartTime.AddDays(Double.Parse(SplitedDate[0]) - 1);
                            StartTime = StartTime.AddHours(Double.Parse(SplitedTime[0]));
                            StartTime = StartTime.AddMinutes(Double.Parse(SplitedTime[1]));
                            StartTime = StartTime.AddSeconds(Double.Parse(SplitedSecond[0]));
                            StartTime = StartTime.AddMilliseconds(Double.Parse(SplitedSecond[1]));
                        }

                        if (Line.Contains("PCAN-Channel:"))
                        {
                            int i = Line.IndexOf(":") + 2;
                            PCAN_Channel = Line.Substring(i, Line.Length - i);
                        }
                    }
                    else                     //Data
                    {
                        if (HeaderOnly)
                        {
                            break;                             //Loop exit if header reading only option is set
                        }

                        TraceRecord oRecord = new TraceRecord();

                        string[] StrRecord = Line.Split(Char.Parse(" "));

                        //Remove empty cells
                        {
                            //Count empty cells
                            int EmptyCnt = 0;
                            for (int i = 0; i < StrRecord.Length; i++)
                            {
                                if (StrRecord[i].Equals(""))
                                {
                                    EmptyCnt++;
                                }
                            }

                            //Create a new temporary array sized to the non empty cells count
                            string[] TmpArray = new string[StrRecord.Length - EmptyCnt];

                            //Fill the temporary array
                            int j = 0;
                            for (int i = 0; i < StrRecord.Length; i++)
                            {
                                if (!(StrRecord[i].Equals("")))
                                {
                                    TmpArray[j] = StrRecord[i];
                                    j++;
                                }
                            }

                            //Update the final array
                            StrRecord = TmpArray;
                            TmpArray  = null;
                        }

                        oRecord.RecordIndex = long.Parse(StrRecord[0].Substring(0, StrRecord[0].Length - 1));
                        oRecord.TimeOffset  = double.Parse(StrRecord[1]);

                        CanMsgRxTx Test;
                        if (Enum.TryParse(StrRecord[2], out Test))
                        {
                            oRecord.MessageType = Test;

                            oRecord.MessageIdentifier = StrRecord[3];

                            //Remove not necessary 0 at the begining of identifier
                            if (oRecord.MessageIdentifier.StartsWith("0"))
                            {
                                while (oRecord.MessageIdentifier.StartsWith("0"))
                                {
                                    oRecord.MessageIdentifier = oRecord.MessageIdentifier.Substring(1, oRecord.MessageIdentifier.Length - 1);
                                }
                            }

                            oRecord.MessageLength = int.Parse(StrRecord[4]);

                            oRecord.MessageData = new byte[oRecord.MessageLength];

                            for (int i = 0; i < oRecord.MessageLength; i++)
                            {
                                oRecord.MessageData[i] = (byte)(NumberBaseConverter.Hex2Dec(StrRecord[i + 5]));
                            }

                            Records.Add(oRecord);
                        }
                    }
                }
            }
            catch
            {
                Ret = false;
            }

            SR.Close();
            SR = null;

            return(Ret);
        }
Пример #3
0
        private void ImportTrcFiles(BackgroundWorker Worker, object ImportOptions)
        {
            if (!(ImportOptions == null))
            {
                object[] Options = (object[])ImportOptions;

                if (Options.Length == 3)
                {
                    string[] TrcFileList             = (string[])Options[0];
                    CANMessagesConfiguration oCanCfg = (CANMessagesConfiguration)Options[1];
                    string CyclePath = (string)Options[2];

                    CANStreamCycle oCycle = new CANStreamCycle();
                    oCycle.oCanNodesMap = oCanCfg;

                    long CycleTime = 0;

                    foreach (string TrcFile in TrcFileList)
                    {
                        PcanTrcFile oTrace = new PcanTrcFile(TrcFile);

                        long TraceTime = 0;
                        int  iRecord   = 0;

                        int Progress = 0;
                        Worker.ReportProgress(Progress);

                        while (iRecord < oTrace.Records.Count)
                        {
                            CycleTimeEvent oCycleTxEvt = new CycleTimeEvent();
                            oCycleTxEvt.TimeEvent = CycleTime;

                            while ((long)oTrace.Records[iRecord].TimeOffset == TraceTime)
                            {
                                CANMessageData oMsgData = new CANMessageData();

                                oMsgData.uMessageId      = (uint)(NumberBaseConverter.Hex2Dec(oTrace.Records[iRecord].MessageIdentifier));
                                oMsgData.byteMessageData = oTrace.Records[iRecord].MessageData;

                                oCycleTxEvt.MessagesData.Add(oMsgData);

                                iRecord++;
                                if (iRecord == oTrace.Records.Count)
                                {
                                    break;
                                }
                            }

                            if (oCycleTxEvt.MessagesData.Count > 0)
                            {
                                oCycle.TimeEvents.Add(oCycleTxEvt);
                            }

                            TraceTime++;
                            CycleTime++;

                            Progress = (int)(iRecord * 100 / oTrace.Records.Count);
                            if (Progress > 0)
                            {
                                Worker.ReportProgress(Progress);
                            }
                        }
                    }

                    oCycle.WriteStreamCycle(CyclePath);
                }
            }
        }