alielie
2026-03-02 12e606635c42ea20f4b7c2bdda5204237a4b4c96
Plugin.CurrentSensorControl/ControlPage.xaml.cs
@@ -1,20 +1,19 @@
using CommunityToolkit.Mvvm.ComponentModel;
using ConnectionUtil;
using HMI.Base;
using HMI.Core.Setting;
using HMI.Core.Util;
using HMI.UI.Util;
using HMI.Util;
using HslCommunication.Profinet.Siemens;
using log4net;
using Microsoft.Win32;
using PLCHelper;
using PLCHelper.Entity;
using Plugin.CurrentSensorControl.Entity;
using System.Collections.ObjectModel;
using System.IO;
using System.Timers;
using System.Windows;
using System.Windows.Controls;
using System.Xml.Linq;
namespace Plugin.CurrentSensorControl
{
@@ -70,9 +69,6 @@
            opcTimer.AutoReset = false;
            opcTimer.Interval = 1000;
            S7Context.Init(SystemSetting.Instance.PlcIp, SystemSetting.Instance.PlcPort);
            api = S7Context.Get($"1");
            DataContext = this;
            InitializeComponent();
        }
@@ -80,12 +76,26 @@
        private void OpcTimer_Elapsed(object sender, ElapsedEventArgs e)
        {
            opcTimer.Enabled = false;
            try
            {
                if (S7Context.GetData(api, "PLC_Mute", out object val))
                {
                    plcMute = (bool)val;
                    OnPropertyChanged("PlcMute");
                }
            }
            catch (Exception ex)
            {
            }
            try
            {
                var time = DateTime.Now;
                ovenCollection.Refresh();
                S7Context.ResetFailCount();
                log.Debug($"Time Cast: {(DateTime.Now - time).TotalMilliseconds}ms");
            }
            catch (Exception ex)
            {
@@ -99,18 +109,6 @@
        private void Timer_Elapsed(object sender, ElapsedEventArgs e)
        {
            timer.Enabled = false;
            try
            {
                if (S7Context.GetData(api, "PLC_Mute", out object val))
                {
                    plcMute = (bool)val;
                    OnPropertyChanged("PlcMute");
                }
            }
            catch (Exception ex)
            {
            }
            try
            {
@@ -137,10 +135,19 @@
        public override void InitFinish()
        {
            Logger = log;
            try
            {
                LoadBurnInSetting();
            }
            catch (Exception ex)
            {
                log.Error("LoadBurnInSetting Error.", ex);
            }
        }
        public override void Active()
        {
            if (!isLoaded) return;
            StartReadCurrent();
        }
@@ -152,6 +159,7 @@
        public override void DoClose(object sender, EventArgs e)
        {
            StopReadCurrent();
            S7Context.Release();
            base.DoClose(sender, e);
        }
@@ -189,65 +197,79 @@
        private void ClearSensorControl()
        {
            foreach (var ctl in diWrap.Children)
            {
                if (ctl is SingleSensor ss)
                {
                    ss.Close();
                }
            }
            diWrap.Children.Clear();
            controls.Clear();
            //foreach (var ctl in diWrap.Children)
            //{
            //    if (ctl is SingleSensor ss)
            //    {
            //        ss.Close();
            //    }
            //}
            //diWrap.Children.Clear();
            //controls.Clear();
        }
        private void RefreshSensorControl(bool start)
        {
            StopReadCurrent();
            ClearSensorControl();
            foreach (var data in Datasource)
            {
                SingleSensor ss = new SingleSensor(data.Name, data.Ip, data.Port, data.Address, data.Channel)
                {
                    Width = 240
                };
                diWrap.Children.Add(ss);
                controls.Add(ss);
                Task.Factory.StartNew(() =>
                {
                    ss.Connect();
                });
            }
            if (start) StartReadCurrent();
            //StopReadCurrent();
            //ClearSensorControl();
            //foreach (var data in Datasource)
            //{
            //    SingleSensor ss = new SingleSensor(data.Name, data.Ip, data.Port, data.Address, data.Channel)
            //    {
            //        Width = 240
            //    };
            //    diWrap.Children.Add(ss);
            //    controls.Add(ss);
            //    Task.Factory.StartNew(() =>
            //    {
            //        ss.Connect();
            //    });
            //}
            //if (start) StartReadCurrent();
        }
        private void ConnectAllSensor()
        {
            foreach (var ctl in diWrap.Children)
            {
                if (ctl is SingleSensor ss)
                {
                    ss.Connect();
                }
            }
            //foreach (var ctl in diWrap.Children)
            //{
            //    if (ctl is SingleSensor ss)
            //    {
            //        ss.Connect();
            //    }
            //}
        }
        private void DisconnectAllSensor()
        {
            foreach (var ctl in diWrap.Children)
            {
                if (ctl is SingleSensor ss)
                {
                    ss.Close();
                }
            }
            //foreach (var ctl in diWrap.Children)
            //{
            //    if (ctl is SingleSensor ss)
            //    {
            //        ss.Close();
            //    }
            //}
        }
        private bool isLoaded = false;
        private void SimpleMaskControl_Loaded(object sender, System.Windows.RoutedEventArgs e)
        {
            LoadSensorData();
            RefreshSensorControl(needRead);
            LoadBurnInSetting();
            Loaded -= SimpleMaskControl_Loaded;
            ShowMask(() =>
            {
                api = S7Context.Get($"1");
                Dispatcher.Invoke(() =>
                {
                    LoadSensorData();
                    RefreshSensorControl(needRead);
                    //LoadBurnInSetting();
                    StartReadCurrent();
                    isLoaded = true;
                    Loaded -= SimpleMaskControl_Loaded;
                });
            }, (ex) =>
            {
                ToastHelper.Error("Loaded Failed.");
                log.Error("Load Error.", ex);
            }, null, "请稍后");
        }
        private void OpenDataModal(SensorData data)
@@ -393,34 +415,13 @@
        private void LoadBurnInSetting()
        {
            S7Context.dataCache.Clear();
            ObservableCollection<PLCTagData> datas;
            try
            {
                string path = Path.Combine(BaseFolder, "BurnInSettingData.data");
                if (File.Exists(path))
                {
                    datas = XmlHelper.DeserializeFromXml<ObservableCollection<PLCTagData>>(path);
                }
                else
                {
                    datas = new ObservableCollection<PLCTagData>();
                }
            }
            catch (Exception ex)
            {
                datas = new ObservableCollection<PLCTagData>();
            }
            BurnInSettingData = datas;
            LoadBurnInSettingCache();
            S7Context.LoadTagData();
            BurnInSettingData = S7Context.Datasource;
        }
        private void LoadBurnInSettingCache()
        {
            foreach (var data in BurnInSettingData)
            {
                S7Context.dataCache[data.Name] = data;
            }
            S7Context.LoadTagData();
        }
        private void OpenBurnSettingModal()