Beispiel #1
0
        void ExecuteRefreshCommand()
        {
            Alarms.Clear();

            foreach (var alarm in App.Alarms)
            {
                Alarms.Add(alarm);
            }
        }
Beispiel #2
0
        public void SetAlarms(IEnumerable <Alarm> newAlarms)
        {
            Alarms.Clear();

            foreach (var alarm in newAlarms)
            {
                Alarms.Add(alarm);
            }
        }
Beispiel #3
0
        public override void ReverseInit(object returnedData)
        {
            base.ReverseInit(returnedData);

            if ((bool)returnedData)
            {
                Alarms.Clear();
                CreateLists();
            }
        }
        private void LoadAlarmSettingsVersion0()
        {
            // TODO: setting versioning
            Alarms.Clear();

            // we are trying to load setting for the first time => there is nothing
            // when versioning will be supported check mechanism should be better
            // or someone delted the settings.dat file for example.
            if (Windows.Storage.ApplicationData.Current.LocalSettings.Values.ContainsKey(AlarmsKey) == false)
            {
                return;
            }

            var settingsStr = Windows.Storage.ApplicationData.Current.LocalSettings.Values[AlarmsKey] as string;
            var alarmsJson  = JsonValue.Parse(settingsStr).GetArray();

            foreach (var alarmJsonValue in alarmsJson)
            {
                var alarmJson = alarmJsonValue.GetObject();
                var alarm     = new BaseAlarmSetting();
                alarm.Id            = int.Parse(alarmJson[JsonId].GetString());
                alarm.Enabled       = Boolean.Parse(alarmJson[JsonEnabled].GetString());
                alarm.Time          = new TimeSpan(long.Parse(alarmJson[JsonTime].GetString()));
                alarm.DaysOfWeek    = (DayOfWeekType)int.Parse(alarmJson[JsonDaysOfWeek].GetString());
                alarm.AudioFilename = alarmJson[JsonAudioFilename].GetString();
                alarm.ImageFilename = alarmJson[JsonImageFilename].GetString();
                alarm.Occurrence    = (OccurrenceType)Enum.Parse(typeof(OccurrenceType), alarmJson[JsonOccurrence].GetString());

                // Fix: serialization of DateTimeOffset was missing. I do not want to change "date version" so I just check whether key is available here.
                if (alarmJson.ContainsKey(JsonDateTimeOffset))
                {
                    alarm.DateTimeOffset = DateTimeOffset.Parse(alarmJson[JsonDateTimeOffset].GetString(), System.Globalization.CultureInfo.InvariantCulture);
                }

                Alarms.Add(alarm);
            }
        }
Beispiel #5
0
        public void StartDetect()
        {
            Task.Run(() =>
            {
                Task.Run(() =>
                {
                    while (true)
                    {
                        Console.WriteLine("计算: " + FrameCount + " 采集: " + CapCount + "显示: " + DispCount + " 图片队列: " + ImageQueue.Count);
                        FrameCount       = 0;
                        CapCount         = 0;
                        DispCount        = 0;
                        CurrentLoopCount = serialComm.LoopCount;
                        Thread.Sleep(1000);
                    }
                });
                AlgorithmResult[] algorithmResults;
                while (DetectFlag)
                {
                    Task.Run(() =>
                    {
                        Image <Bgr, byte> image;
                        if (ImageQueue.TryDequeue(out image))
                        {
                            stDetectParam = DetectParam.GetSt();
                            AlarmRecord.SetRange(AlarmParam.PixelRange, AlarmParam.YRange);

                            App.Current?.Dispatcher?.Invoke(() =>
                            {
                                if (AlarmRecord.TotalLoopCount != AlarmParam.TotalLoopCount)
                                {
                                    AlarmRecord.TotalLoopCount = AlarmParam.TotalLoopCount;
                                    Alarms.Clear();
                                    AsyncSaveObject("Alarms", Alarms);
                                }
                            });
                            algorithmResults = Algorithm.DetectImage(image.Ptr, stDetectParam);
                            List <AlgorithmResult> results = new List <AlgorithmResult>(algorithmResults);
                            results.ForEach(result =>
                            {
                                if (result.bStop != 0 || result.bWidthReachStop != 0)
                                {
                                    DrawRectOnScreen(result.xPos, result.yPos);
                                    AddResultToStatistics(result.xPos, result.yPos, image.Clone());
                                }
                            });

                            lock (this)
                            {
                                if (detectResultStatistics.Count > 0)
                                {
                                    int avgX           = 0;
                                    int avgY           = 0;
                                    DateTime beginTime = DateTime.MinValue;
                                    DetectResultStatistic detectResultStatistic = null;
                                    TimeSpan maxDuration = FindMaxDuration(out avgX, out avgY, out beginTime, out detectResultStatistic);
                                    if (avgX == -1)
                                    {
                                        return;
                                    }
                                    float length        = (float)((maxDuration.Seconds + maxDuration.Milliseconds / 1000.0) * AlarmParam.Velocity);
                                    DateTime latestTime = FindLatestTime();

                                    if (DateTime.Now - latestTime > AlarmParam.MaxErrorTime)
                                    {
                                        DetectState            = DetectResultState.皮带正常;
                                        AlarmHeadFlag          = true;
                                        AlarmRecord.LoopOffset = LoopOffset;
                                        if (SaveFlag)
                                        {
                                            SaveFlag = false;
                                            SaveAlarmVideo();
                                        }
                                        detectResultStatistics.Clear();
                                    }
                                    else if (maxDuration > AlarmParam.MaxHurtTime)//逻辑判断有超过maxHurtTime时间,此时发生撕伤警报
                                    {
                                        DetectState = DetectResultState.撕伤;
                                        AddAlarmToStatistics(avgX, avgY, length, detectResultStatistic);
                                    }
                                    else if (maxDuration > AlarmParam.MaxDivTime)//逻辑判断有超过maxDivTime时间,此时发生撕裂警报
                                    {
                                        DetectState = DetectResultState.撕裂;
                                    }
                                }
                            }
                            FrameCount++;
                        }
                    });

                    Thread.Sleep(10);
                }
            });
        }