Files

243 lines
7.5 KiB
C#
Raw Permalink Normal View History

using MainShell.Hardware;
using MaxwellControl.Tools;
using MaxwellFramework.Core.Interfaces;
using MwFramework.Device;
using MwFramework.Controls.UIControl;
using MwFramework.ManagerService;
using Stylet;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using static MainShell.ParaSetting.Model.SpeedSetting;
using MessageBox = MaxwellControl.Controls.MessageBox;
namespace MainShell.ParaSetting.ViewModel
{
public class SpeedSettingViewModel:Screen,IPage
{
public string Name { get; set; } = "SpeedParaSys";
private readonly IParamList _paramList;
private ParameterHelper _parameterHelper = new ParameterHelper();
public ParameterHelper ParameterHelper
{
get
{
return _parameterHelper;
}
set
{
_parameterHelper = value;
OnPropertyChanged(nameof(ParameterHelper));
}
}
private SpeedParaSysSetting _speedParaSysSetting;
public SpeedParaSysSetting SpeedParaSysSetting
{
get
{
return _speedParaSysSetting;
}
set
{
_speedParaSysSetting = value;
OnPropertyChanged(nameof(SpeedParaSysSetting));
}
}
private double _speed = 10;
public double Speed
{
get
{
return _speed;
}
set
{
_speed = value;
OnPropertyChanged(nameof(Speed));
}
}
private readonly HardwareManager _hardware;
public SpeedSettingViewModel(IParameterManager parameterManager, HardwareManager hardware)
{
_paramList = parameterManager as IParamList;
if (_paramList == null)
{
throw new ArgumentNullException(nameof(parameterManager));
}
_hardware = hardware ?? throw new ArgumentNullException(nameof(hardware));
}
protected override void OnViewLoaded()
{
base.OnViewLoaded();
SpeedParaSysSetting = _paramList.GetParameter<SpeedParaSysSetting>();
InitializeAxisSpeedItems();
}
private void InitializeAxisSpeedItems()
{
Dictionary<string, IAxis> axisNameDic = _hardware.AxesDic;
if (SpeedParaSysSetting.SpeedTypeItemCollection.SpeedTypeItemList.Count != axisNameDic.Count)
{
SpeedParaSysSetting.SpeedTypeItemCollection.SpeedTypeItemList.Clear();
foreach (var axisByIndex in axisNameDic)
{
SpeedParaSysSetting.SpeedTypeItemCollection.SpeedTypeItemList.Add(new SpeedTypeItem
{
AxisName = axisByIndex.Key,
});
}
}
}
public void btnSet()
{
if (MessageBox.Show("是否保存", null, "确认保存", MessageBoxButton.OKCancel, MessageBoxImage.Question, MessageBoxResult.Cancel) == MessageBoxResult.OK)
{
try
{
SpeedParaSysSetting.Write();
LogWatchValueManager.Save(SpeedParaSysSetting.SpeedTypeItemCollection, "SpeedPara_速度规划");
ParameterHelper.RaiseValueAccept();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
public void btnRowData()
{
try
{
if (!Confirm("是否修改当前选中数据的速度")) return;
IList<SpeedTypeItem> items = SpeedParaSysSetting?.SpeedTypeItemCollection?.SpeedTypeItemList;
SpeedTypeItem selected = SpeedParaSysSetting?.SpeedTypeItemCollection?.CurrentSelectSpeedTypeItemList;
if (items == null || selected == null)
{
MessageBox.Show("未找到速度项或未选择项。");
return;
}
// 找到轴索引相同的项并更新
SpeedTypeItem item = items.FirstOrDefault(x => x.AxisName == selected.AxisName);
if (item != null)
{
UpdateItem(item, Speed);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
public void btnPageData()
{
try
{
if (!Confirm("是否修改当前界面的速度")) return;
var items = SpeedParaSysSetting?.SpeedTypeItemCollection?.SpeedTypeItemList;
if (items == null)
{
MessageBox.Show("未找到速度项。");
return;
}
ApplyTo(items, Speed);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
/// <summary>
/// 修改当前界面的龙门速度
/// </summary>
public void btnPageGantryData()
{
try
{
if (!Confirm("是否修改当前界面的龙门速度")) return;
var items = SpeedParaSysSetting?.SpeedTypeItemCollection?.SpeedTypeItemList;
if (items == null)
{
MessageBox.Show("未找到速度项。");
return;
}
// 假设龙门轴号为 0..3(按 AxisIndex 判断,避免直接按列表索引)
//var gantryItems = items.Where(x => x.AxisIndex >= 0 && x.AxisIndex <= 3);
//ApplyTo(gantryItems, Speed);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
/// <summary>
/// 修改当前界面的Z和TH轴速度
/// </summary>
public void btnPageZAndTHData()
{
try
{
if (!Confirm("是否修改当前界面的Z和TH轴速度")) return;
var items = SpeedParaSysSetting?.SpeedTypeItemCollection?.SpeedTypeItemList;
if (items == null)
{
MessageBox.Show("未找到速度项。");
return;
}
//var zthItems = items.Where(x => x.AxisIndex >= 4 && x.AxisIndex <= 6);
//ApplyTo(zthItems, Speed);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
#region Helpers
private bool Confirm(string message)
{
return MessageBox.Show(message, null, "确认修改", MessageBoxButton.OKCancel, MessageBoxImage.Question, MessageBoxResult.Cancel) == MessageBoxResult.OK;
}
private void ApplyTo(IEnumerable<SpeedTypeItem> items, double speed)
{
if (items == null) return;
foreach (var it in items)
{
UpdateItem(it, speed);
}
}
private void UpdateItem(SpeedTypeItem item, double speed)
{
if (item == null) return;
item.Speed = speed;
item.Acc = 10 * speed;
item.Dec = 10 * speed;
item.Jerk = 100 * speed;
}
#endregion
}
}