using CommunityToolkit.Mvvm.ComponentModel; using ConnectionUtil; using HslCommunication.Profinet.Siemens; using Plugin.CurrentSensorControl.Entity; using System.Drawing; using System.Windows.Controls; using System.Windows.Markup; namespace Plugin.CurrentSensorControl { /// /// BurnInOven.xaml 的交互逻辑 /// [ObservableObject] public partial class BurnInOven : UserControl { private BaseConfig config; private static readonly string[] datas = new string[] { "_LEDLight", "_Req", "_SetTemp", "_SaveTemp", "_TempDown", "_TempUp", "_AvgTemp" }; [ObservableProperty] private string header; [ObservableProperty] private string req; [ObservableProperty] private string reqStatus; [ObservableProperty] private string setTemp; [ObservableProperty] private string saveTemp; [ObservableProperty] private string tempDown; [ObservableProperty] private string tempUp; [ObservableProperty] private string avgTemp; private bool lightStatus; public bool LightStatus { get => lightStatus; set { try { string name = $"Oven{ovenIndex + 1}_LEDLight"; if (S7Context.WriteData(api, name, value)) { lightStatus = value; OnPropertyChanged(nameof(lightStatus)); } } catch (Exception ex) { } } } private int ovenIndex; private SiemensS7Net api; private int cellCount; private BurnInCell[] cells; public BurnInOven(int ovenIndex) { this.ovenIndex = ovenIndex; config = BaseConfig.Instance; this.cellCount = config.PositionCount; this.cells = new BurnInCell[cellCount]; DataContext = this; api = S7Context.Get($"1"); InitializeComponent(); InitGrid(); } private void InitGrid() { mainGrid.Columns = config.PositionColumn; for (int i = 0; i < cellCount; i++) { var cell = new BurnInCell(ovenIndex, i); cells[i] = cell; mainGrid.Children.Add(cell); } } public void Refresh() { try { //Task[] allTask = new Task[cells.Length]; //for (int i = 0; i < cells.Length; i++) //{ // var cell = cells[i]; // var task = Task.Factory.StartNew(() => // { // cell.Refresh(); // }); // allTask[i] = task; //} //Task.WaitAll(allTask); foreach (var cell in cells) { cell.Refresh(); } string name; object v; foreach (var data in datas) { name = $"Oven{ovenIndex + 1}{data}"; if (S7Context.GetData(api, name, out v)) { var val = v?.ToString(); if (data == "_LEDLight") { lightStatus = bool.Parse(val); OnPropertyChanged("LightStatus"); } else if (data == "_Req") { Req = val; if (val == "0") { ReqStatus = "停止等待"; } else if (val == "1") { ReqStatus = "加热启动"; } else if (val == "2") { ReqStatus = "冷却启动"; } } else if (data == "_SetTemp") { SetTemp = val; } else if (data == "_SaveTemp") { SaveTemp = val; } else if (data == "_TempDown") { TempDown = val; } else if (data == "_TempUp") { TempUp = val; } else if (data == "_AvgTemp") { AvgTemp = val; } } //; //if (api.DoFctReadSingle(name, out string val, out _)) //{ // if (data == "_Req") // { // Req = val; // if (val == "0") // { // ReqStatus = "停止等待"; // } // else if (val == "1") // { // ReqStatus = "加热启动"; // } // else if (val == "2") // { // ReqStatus = "冷却启动"; // } // } // else if (data == "_SetTemp") // { // SetTemp = val; // } // else if (data == "_SaveTemp") // { // SaveTemp = val; // } // else if (data == "_TempDown") // { // TempDown = val; // } // else if (data == "_TempUp") // { // TempUp = val; // } // else if (data == "_AvgTemp") // { // AvgTemp = val; // } //} } //if (api.Connec (out string errMsg)) //{ //} //else //{ // OPCContext.Connect($"Oven{ovenIndex}"); // Thread.Sleep(1000); //} } catch (Exception ex) { } } private void Button_Click(object sender, System.Windows.RoutedEventArgs e) { var btn = sender as Button; string name = $"Oven{ovenIndex + 1}_Cmd"; S7Context.WriteData(api, name, short.Parse(btn.Tag.ToString())); //api.DoFctWriteSingle(name, btn.Tag.ToString(), out string errMsg); } } }