using Prism.Commands;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Team.FFFeederService.Enums;
using Team.FFFeederService.Interfaces;
using Team.FFFeederService.Models;
using TeamAAS_VP;
using TouchSocket.Core;
namespace TeamAAS_VP.Controls
{
///
/// FeederSequence.xaml 的交互逻辑
///
public partial class FeederSequence : UserControl, INotifyPropertyChanged
{
private bool _manualStop = false;
public FeederSequence()
{
InitializeComponent();
this.DataContext = this;
SequenceCollection.Clear();
for (int i = 1; i <= 26; i++)
{
SequenceCollection.Add(i);
char chn = (char)('A' + i);
}
}
#region 属性
public IVoiceCoilMotorFeeder Feeder { get; set; }
private ObservableCollection _SequenceCollection = new ObservableCollection();
///
/// 序列集
///
public ObservableCollection SequenceCollection
{
get { return _SequenceCollection; }
set { SetProperty(ref _SequenceCollection, value); }
}
private int _SelectedSequence = -1;
///
/// 当前选中的序列
///
public int SelectedSequence
{
get { return _SelectedSequence; }
set { SetProperty(ref _SelectedSequence, value); }
}
private int _CurrentSequencePartCntMax;
///
/// 极限值
///
public int CurrentSequencePartCntMax
{
get { return _CurrentSequencePartCntMax; }
set { SetProperty(ref _CurrentSequencePartCntMax, value); }
}
private int _CycleRunningTimes;
///
/// 循环次数
///
public int CycleRunningTimes
{
get { return _CycleRunningTimes; }
set { SetProperty(ref _CycleRunningTimes, value); }
}
private SingleSequenceActionGroup _CurrentSequenceActionGroup;
///
/// 序列集
///
public SingleSequenceActionGroup CurrentSequenceActionGroup
{
get { return _CurrentSequenceActionGroup; }
set { SetProperty(ref _CurrentSequenceActionGroup, value); }
}
private SingleSequenceAction _SingleSequenceAction1;
///
/// 1
///
public SingleSequenceAction SingleSequenceAction1
{
get { return _SingleSequenceAction1; }
set { SetProperty(ref _SingleSequenceAction1, value); }
}
private SingleSequenceAction _SingleSequenceAction2;
///
/// 2
///
public SingleSequenceAction SingleSequenceAction2
{
get { return _SingleSequenceAction2; }
set { SetProperty(ref _SingleSequenceAction2, value); }
}
private SingleSequenceAction _SingleSequenceAction3;
///
/// 3
///
public SingleSequenceAction SingleSequenceAction3
{
get { return _SingleSequenceAction3; }
set { SetProperty(ref _SingleSequenceAction3, value); }
}
private SingleSequenceAction _SingleSequenceAction4;
///
/// 4
///
public SingleSequenceAction SingleSequenceAction4
{
get { return _SingleSequenceAction4; }
set { SetProperty(ref _SingleSequenceAction4, value); }
}
private SingleSequenceAction _SingleSequenceAction5;
///
/// 5
///
public SingleSequenceAction SingleSequenceAction5
{
get { return _SingleSequenceAction5; }
set { SetProperty(ref _SingleSequenceAction5, value); }
}
private SingleSequenceAction _SingleSequenceAction6;
///
/// 6
///
public SingleSequenceAction SingleSequenceAction6
{
get { return _SingleSequenceAction6; }
set { SetProperty(ref _SingleSequenceAction6, value); }
}
private SingleSequenceAction _SingleSequenceAction7;
///
/// 7
///
public SingleSequenceAction SingleSequenceAction7
{
get { return _SingleSequenceAction7; }
set { SetProperty(ref _SingleSequenceAction7, value); }
}
#region 属性视图显示
private Visibility _IsVisibility1 = Visibility.Collapsed;
public Visibility IsVisibility1
{
get { return _IsVisibility1; }
set { SetProperty(ref _IsVisibility1, value); }
}
private Visibility _IsVisibility1_2 = Visibility.Collapsed;
public Visibility IsVisibility1_2
{
get { return _IsVisibility1_2; }
set { SetProperty(ref _IsVisibility1_2, value); }
}
private Visibility _IsVisibility2 = Visibility.Collapsed;
public Visibility IsVisibility2
{
get { return _IsVisibility2; }
set { SetProperty(ref _IsVisibility2, value); }
}
private Visibility _IsVisibility2_2 = Visibility.Collapsed;
public Visibility IsVisibility2_2
{
get { return _IsVisibility2_2; }
set { SetProperty(ref _IsVisibility2_2, value); }
}
private Visibility _IsVisibility3 = Visibility.Collapsed;
public Visibility IsVisibility3
{
get { return _IsVisibility3; }
set { SetProperty(ref _IsVisibility3, value); }
}
private Visibility _IsVisibility3_2 = Visibility.Collapsed;
public Visibility IsVisibility3_2
{
get { return _IsVisibility1_2; }
set { SetProperty(ref _IsVisibility1_2, value); }
}
private Visibility _IsVisibility4 = Visibility.Collapsed;
public Visibility IsVisibility4
{
get { return _IsVisibility4; }
set { SetProperty(ref _IsVisibility4, value); }
}
private Visibility _IsVisibility4_2 = Visibility.Collapsed;
public Visibility IsVisibility4_2
{
get { return _IsVisibility4_2; }
set { SetProperty(ref _IsVisibility4_2, value); }
}
private Visibility _IsVisibility5 = Visibility.Collapsed;
public Visibility IsVisibility5
{
get { return _IsVisibility5; }
set { SetProperty(ref _IsVisibility5, value); }
}
private Visibility _IsVisibility5_2 = Visibility.Collapsed;
public Visibility IsVisibility5_2
{
get { return _IsVisibility5_2; }
set { SetProperty(ref _IsVisibility5_2, value); }
}
private Visibility _IsVisibility6 = Visibility.Collapsed;
public Visibility IsVisibility6
{
get { return _IsVisibility6; }
set { SetProperty(ref _IsVisibility6, value); }
}
private Visibility _IsVisibility6_2 = Visibility.Collapsed;
public Visibility IsVisibility6_2
{
get { return _IsVisibility6_2; }
set { SetProperty(ref _IsVisibility6_2, value); }
}
private Visibility _IsVisibility7 = Visibility.Collapsed;
public Visibility IsVisibility7
{
get { return _IsVisibility7; }
set { SetProperty(ref _IsVisibility7, value); }
}
private Visibility _IsVisibility7_2 = Visibility.Collapsed;
public Visibility IsVisibility7_2
{
get { return _IsVisibility7_2; }
set { SetProperty(ref _IsVisibility7_2, value); }
}
#endregion
#endregion
#region 命令
private DelegateCommand _SelectSequenceCommand;
public DelegateCommand SelectSequenceCommand =>
_SelectSequenceCommand ?? (_SelectSequenceCommand = new DelegateCommand(ExecuteSelectSequenceCommand));
private DelegateCommand _StartCommand;
public DelegateCommand StartCommand =>
_StartCommand ?? (_StartCommand = new DelegateCommand(ExecuteStartCommand));
private DelegateCommand _StopCommand;
public DelegateCommand StopCommand =>
_StopCommand ?? (_StopCommand = new DelegateCommand(ExecuteStopCommand));
private DelegateCommand _WriteParamCommand;
public DelegateCommand WriteParamCommand =>
_WriteParamCommand ?? (_WriteParamCommand = new DelegateCommand(ExecuteWriteParamCommand));
private DelegateCommand _SelectActionCommand1;
public DelegateCommand SelectActionCommand1 =>
_SelectActionCommand1 ?? (_SelectActionCommand1 = new DelegateCommand(ExecuteSelectActionCommand1));
private DelegateCommand _SelectActionCommand2;
public DelegateCommand SelectActionCommand2 =>
_SelectActionCommand2 ?? (_SelectActionCommand2 = new DelegateCommand(ExecuteSelectActionCommand2));
private DelegateCommand _SelectActionCommand3;
public DelegateCommand SelectActionCommand3 =>
_SelectActionCommand3 ?? (_SelectActionCommand3 = new DelegateCommand(ExecuteSelectActionCommand3));
private DelegateCommand _SelectActionCommand4;
public DelegateCommand SelectActionCommand4 =>
_SelectActionCommand4 ?? (_SelectActionCommand4 = new DelegateCommand(ExecuteSelectActionCommand4));
private DelegateCommand _SelectActionCommand5;
public DelegateCommand SelectActionCommand5 =>
_SelectActionCommand5 ?? (_SelectActionCommand5 = new DelegateCommand(ExecuteSelectActionCommand5));
private DelegateCommand _SelectActionCommand6;
public DelegateCommand SelectActionCommand6 =>
_SelectActionCommand6 ?? (_SelectActionCommand6 = new DelegateCommand(ExecuteSelectActionCommand6));
private DelegateCommand _SelectActionCommand7;
public DelegateCommand SelectActionCommand7 =>
_SelectActionCommand7 ?? (_SelectActionCommand7 = new DelegateCommand(ExecuteSelectActionCommand7));
#endregion
#region 方法
///
/// 选中序列时
///
async void ExecuteSelectSequenceCommand()
{
if (SelectedSequence == -1)
{
return;
}
if (Feeder == null || !Feeder.IsConnected)
{
return;
}
try
{
var id = SelectedSequence;
CurrentSequenceActionGroup = await Feeder.GetSequenceGroupAsync(id);
CurrentSequencePartCntMax = CurrentSequenceActionGroup.PartCntMax;
SingleSequenceAction1 = CurrentSequenceActionGroup.SingleSequenceActions[0];
SingleSequenceAction2 = CurrentSequenceActionGroup.SingleSequenceActions[1];
SingleSequenceAction3 = CurrentSequenceActionGroup.SingleSequenceActions[2];
SingleSequenceAction4 = CurrentSequenceActionGroup.SingleSequenceActions[3];
SingleSequenceAction5 = CurrentSequenceActionGroup.SingleSequenceActions[4];
SingleSequenceAction6 = CurrentSequenceActionGroup.SingleSequenceActions[5];
SingleSequenceAction7 = CurrentSequenceActionGroup.SingleSequenceActions[6];
}
catch (Exception ex)
{
LogHelper.WriteLogError("选中Feeder序列时时出错!", ex);
}
}
///
/// 开始执行序列
///
async void ExecuteStartCommand()
{
if (Feeder == null)
{
return;
}
if (SelectedSequence == -1)
{
return;
}
try
{
var needToExecute = CycleRunningTimes;
while (true)
{
var value = await Feeder.StartOneSequenceAsync(SelectedSequence + 1);
await Task.Delay(value);
needToExecute--;
if (needToExecute != 0 && !_manualStop) continue;
_manualStop = !_manualStop;
break;
}
}
catch (Exception ex)
{
LogHelper.WriteLogError("执行Feeder序列时出错!", ex);
}
}
///
/// 停止执行序列
///
async void ExecuteStopCommand()
{
try
{
if (Feeder == null)
{
return;
}
await Feeder.StopOneSequenceAsync();
_manualStop = true;
}
catch (Exception ex)
{
LogHelper.WriteLogError("停止Feeder序列时出错!", ex);
}
}
///
/// 下载
///
async void ExecuteWriteParamCommand()
{
try
{
var singleSequenceActions = new[]
{
SingleSequenceAction1,SingleSequenceAction2,SingleSequenceAction3,
SingleSequenceAction4,SingleSequenceAction5,SingleSequenceAction6,
SingleSequenceAction7
};
for (var i = 0; i < singleSequenceActions.Length; i++)
{
await Feeder.SetSequenceAsync(SelectedSequence, i, singleSequenceActions[i]);
}
await Feeder.SaveSequenceAsync();
}
catch (Exception ex)
{
LogHelper.WriteLogError("保存Feeder序列时出错!", ex);
}
}
///
/// 选择动作1时触发
///
void ExecuteSelectActionCommand1(int? index)
{
switch (index)
{
case null:
return;
case 1:
IsVisibility1 = Visibility.Visible;
IsVisibility1_2 = Visibility.Visible;
break;
case 2:
IsVisibility1 = Visibility.Visible;
IsVisibility1_2 = Visibility.Visible;
break;
case 3:
IsVisibility1 = Visibility.Collapsed;
IsVisibility1_2 = Visibility.Visible;
break;
default:
IsVisibility1 = Visibility.Collapsed;
IsVisibility1_2 = Visibility.Collapsed;
break;
}
}
///
/// 选择动作2时触发
///
void ExecuteSelectActionCommand2(int? index)
{
switch (index)
{
case null:
return;
case 1:
IsVisibility2 = Visibility.Visible;
IsVisibility2_2 = Visibility.Visible;
break;
case 2:
IsVisibility2 = Visibility.Visible;
IsVisibility2_2 = Visibility.Visible;
break;
case 3:
IsVisibility2 = Visibility.Collapsed;
IsVisibility2_2 = Visibility.Visible;
break;
default:
IsVisibility2 = Visibility.Collapsed;
IsVisibility2_2 = Visibility.Collapsed;
break;
}
}
///
/// 选择动作3时触发
///
void ExecuteSelectActionCommand3(int? index)
{
switch (index)
{
case null:
return;
case 1:
IsVisibility3 = Visibility.Visible;
IsVisibility3_2 = Visibility.Visible;
break;
case 2:
IsVisibility3 = Visibility.Visible;
IsVisibility3_2 = Visibility.Visible;
break;
case 3:
IsVisibility3 = Visibility.Collapsed;
IsVisibility3_2 = Visibility.Visible;
break;
default:
IsVisibility3 = Visibility.Collapsed;
IsVisibility3_2 = Visibility.Collapsed;
break;
}
}
///
/// 选择动作4时触发
///
void ExecuteSelectActionCommand4(int? index)
{
switch (index)
{
case null:
return;
case 1:
IsVisibility4 = Visibility.Visible;
IsVisibility4_2 = Visibility.Visible;
break;
case 2:
IsVisibility4 = Visibility.Visible;
IsVisibility4_2 = Visibility.Visible;
break;
case 3:
IsVisibility4 = Visibility.Collapsed;
IsVisibility4_2 = Visibility.Visible;
break;
default:
IsVisibility4 = Visibility.Collapsed;
IsVisibility4_2 = Visibility.Collapsed;
break;
}
}
///
/// 选择动作5时触发
///
void ExecuteSelectActionCommand5(int? index)
{
switch (index)
{
case null:
return;
case 1:
IsVisibility5 = Visibility.Visible;
IsVisibility5_2 = Visibility.Visible;
break;
case 2:
IsVisibility5 = Visibility.Visible;
IsVisibility5_2 = Visibility.Visible;
break;
case 3:
IsVisibility5 = Visibility.Collapsed;
IsVisibility5_2 = Visibility.Visible;
break;
default:
IsVisibility5 = Visibility.Collapsed;
IsVisibility5_2 = Visibility.Collapsed;
break;
}
}
///
/// 选择动作6时触发
///
void ExecuteSelectActionCommand6(int? index)
{
switch (index)
{
case null:
return;
case 1:
IsVisibility6 = Visibility.Visible;
IsVisibility6_2 = Visibility.Visible;
break;
case 2:
IsVisibility6 = Visibility.Visible;
IsVisibility6_2 = Visibility.Visible;
break;
case 3:
IsVisibility6 = Visibility.Collapsed;
IsVisibility6_2 = Visibility.Visible;
break;
default:
IsVisibility6 = Visibility.Collapsed;
IsVisibility6_2 = Visibility.Collapsed;
break;
}
}
///
/// 选择动作7时触发
///
void ExecuteSelectActionCommand7(int? index)
{
switch (index)
{
case null:
return;
case 1:
IsVisibility7 = Visibility.Visible;
IsVisibility7_2 = Visibility.Visible;
break;
case 2:
IsVisibility7 = Visibility.Visible;
IsVisibility7_2 = Visibility.Visible;
break;
case 3:
IsVisibility7 = Visibility.Collapsed;
IsVisibility7_2 = Visibility.Visible;
break;
default:
IsVisibility7 = Visibility.Collapsed;
IsVisibility7_2 = Visibility.Collapsed;
break;
}
}
#endregion
#region 属性更改通知
///
/// Occurs when a property value changes.
///
public event PropertyChangedEventHandler PropertyChanged;
///
/// Checks if a property already matches a desired value. Sets the property and
/// notifies listeners only when necessary.
///
/// Type of the property.
/// Reference to a property with both getter and setter.
/// Desired value for the property.
/// Name of the property used to notify listeners. This
/// value is optional and can be provided automatically when invoked from compilers that
/// support CallerMemberName.
/// True if the value was changed, false if the existing value matched the
/// desired value.
protected virtual bool SetProperty(ref T storage, T value, [CallerMemberName] string propertyName = null)
{
if (EqualityComparer.Default.Equals(storage, value)) return false;
storage = value;
RaisePropertyChanged(propertyName);
return true;
}
///
/// Checks if a property already matches a desired value. Sets the property and
/// notifies listeners only when necessary.
///
/// Type of the property.
/// Reference to a property with both getter and setter.
/// Desired value for the property.
/// Name of the property used to notify listeners. This
/// value is optional and can be provided automatically when invoked from compilers that
/// support CallerMemberName.
/// Action that is called after the property value has been changed.
/// True if the value was changed, false if the existing value matched the
/// desired value.
protected virtual bool SetProperty(ref T storage, T value, Action onChanged, [CallerMemberName] string propertyName = null)
{
if (EqualityComparer.Default.Equals(storage, value)) return false;
storage = value;
onChanged?.Invoke();
RaisePropertyChanged(propertyName);
return true;
}
///
/// Raises this object's PropertyChanged event.
///
/// Name of the property used to notify listeners. This
/// value is optional and can be provided automatically when invoked from compilers
/// that support .
protected void RaisePropertyChanged([CallerMemberName] string propertyName = null)
{
OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
}
///
/// Raises this object's PropertyChanged event.
///
/// The PropertyChangedEventArgs
protected virtual void OnPropertyChanged(PropertyChangedEventArgs args)
{
PropertyChanged?.Invoke(this, args);
}
#endregion
}
}