Exemplo n.º 1
0
 public void StartRecording()
 {
     multimeter.WriteConsolas("Started recording.");
     IsRecording = true;
     multimeter.AvailableDevices.IsReadOnly = true;
     multimeter.overview.CurrentStatus      = "Logging";
     totalLogTimer.Start();
     totalStopWatch.Start();
 }
Exemplo n.º 2
0
        public void Finalise(long elapsed, long previousPacket)
        {
            bool valid = true;

            one   = (byte)((data[0] << 4) & 0XF0) >> 4;
            two   = (byte)((data[1] << 4) & 0XF0) >> 4;
            three = (byte)((data[2] << 4) & 0XF0) >> 4;
            four  = (byte)((data[3] << 4) & 0XF0) >> 4;
            five  = (byte)((data[4] << 4) & 0XF0) >> 4;
            range = (byte)((data[5] << 4) & 0XF0) >> 4;
            type  = (byte)((data[6] << 4) & 0XF0) >> 4;
            string t = Convert.ToString((byte)(data[7]), 2).PadLeft(8, '0');
            string m = Convert.ToString((byte)(data[8]), 2).PadLeft(8, '0');

            voltageType = (t.Substring(6, 1) == "1" && t.Substring(7, 1) == "1") ? "AC + DC" : (t.Substring(6, 1) == "1" && t.Substring(7, 1) != "1") ? "DC" : (t.Substring(6, 1) != "1" && t.Substring(7, 1) == "1") ? "AC" : "";
            prefix      = (m.Substring(5, 1) == "1") ? "-" : "";
            mode        = (m.Substring(6, 1) == "1") ? "MAN" : (m.Substring(7, 1) == "1") ? "AUTO" : "";

            //Optional message to display
            string message = "";

            //Determine value to display
            string numberValue     = one.ToString() + two.ToString() + three.ToString() + four.ToString() + five.ToString();
            int    decimalLocation = 1;

            if (type < 16 && range < 8)
            {
                decimalLocation = point[type][range];
            }
            else
            {
                valid    = false;
                message += String.Format("Unexpected type <{0}> and range <{1}>. ", type.ToString(), range.ToString());
            }
            value = prefix + numberValue.Insert(decimalLocation, ".");

            //Determine packet timings
            packetTime = elapsed.ToString() + "ms";
            lastPacket = previousPacket.ToString() + "ms";

            //Determine units
            suffix = "Unknown";
            if (type < 16 && range < 8)
            {
                suffix = suffixes[type][range];
            }
            else
            {
                message += String.Format("Unexpected type <{0}> and range <{1}>. ", type.ToString(), range.ToString());
                valid    = false;
            }

            if (count != 11)
            {
                message += String.Format("Invalid message count <{0}/11>. ", count.ToString());
                valid    = false;
            }

            //Send data to LogData object
            DateTime currentTime = DateTime.Now;

            if (valid)
            {
                Application.Current.Dispatcher.BeginInvoke(new Action(() =>
                {
                    multimeter.ChangeDisplay(value, suffix);
                }));
            }

            double v = double.Parse(value);

            if (!handler.IsRecording)
            {
                multimeter.CheckForAlarms(v);
            }

            if (handler.IsInitialising)
            {
                if (valid && handler.packets.Count > 1)
                {
                    handler.IsInitialising = false;
                }
                else if (!valid && handler.packets.Count > 1)
                {
                    multimeter.WriteConsolas("Invalid input buffer detected. Attempting to rectify.");
                    multimeter.SendRestart();
                }
            }
            else if ((handler.data.Count == 0 || multimeter.TimingInterval == 0 || CompareTimes(handler.data[handler.data.Count - 1].PacketTime, currentTime, multimeter.TimingInterval)) && handler.IsRecording)
            {
                if (handler.data.Count == 0)
                {
                    handler.avgStart = currentTime;
                }

                string average   = "-";
                string aggregate = "-";
                if (CompareTimes(handler.avgStart, currentTime, multimeter.AverageInterval))
                {
                    average              = (handler.average / handler.averageCount).ToString();
                    aggregate            = Math.Sqrt(handler.aggregate / handler.averageCount).ToString();
                    handler.average      = 0;
                    handler.averageCount = 0;
                    handler.aggregate    = 0;
                    handler.avgStart     = currentTime;
                }
                else if (valid)
                {
                    handler.aggregate += v * v;
                    handler.average   += v;
                    handler.averageCount++;
                }

                if (valid)
                {
                    handler.GoodPackets++;
                    handler.ConsecutiveErrors = 0;
                    if (v > handler.MaximumValid)
                    {
                        handler.MaximumValid = v;
                    }
                    if (v < handler.MinimumValid)
                    {
                        handler.MinimumValid = v;
                    }

                    if (handler.data.Count == 0)
                    {
                        handler.MaximumValid = v;
                        handler.MinimumValid = v;
                    }
                }
                else
                {
                    handler.InvalidPackets++;
                    handler.ConsecutiveErrors++;
                    if (handler.ConsecutiveErrors == 3)
                    {
                        Application.Current.Dispatcher.BeginInvoke(new Action(() =>
                        {
                            //new WPFMessageBox(multimeter.program, "Multimeter error", "It appears as if there have been 3 consecutive invalid packets logged. This is normally an indication that your device is not transmitting data correctly. Please try stopping and starting the logging again to see if that will rectify the issue. If that fails, try plugging your USB device into another USB port and trying again.").Display();
                            multimeter.WriteConsolas("Invalid readings detected. Attempting to fix.");
                            handler.RequestFix();
                        }));
                    }
                }

                message += multimeter.CheckForAlarms(v);
                logData  = new LogData(v, suffix, elapsed, previousPacket, currentTime, message, handler.data.Count() + 1, valid, average, aggregate);
                handler.data.Add(logData);
                handler.AddDataToTable(logData);
                handler.AddChartValues(logData.PacketTime, logData.Value);
                multimeter.VerticalTitle.Content   = suffix;
                multimeter.overview.GoodPackets    = handler.GoodPackets;
                multimeter.overview.InvalidPackets = handler.InvalidPackets;
                multimeter.overview.MaxValue       = handler.MaximumValid;
                multimeter.overview.MinValue       = handler.MinimumValid;
                multimeter.overview.CurrentValue   = v;
                if (multimeter.overview.CurrentUnits != suffix)
                {
                    multimeter.overview.CurrentUnits = suffix;
                }

                if ((handler.GoodPackets + handler.InvalidPackets) % 50 == 0 && multimeter.AutoSave == 0)
                {
                    multimeter.MarshalSaveData(true);
                    multimeter.WriteConsolas("Autosave at " + (handler.GoodPackets + handler.InvalidPackets).ToString() + " packets");
                }
            }
        }