117 lines
3.5 KiB
C#
117 lines
3.5 KiB
C#
|
|
|
|
using System.Text.RegularExpressions;
|
|
using DH.Commons.Base;
|
|
using DH.Commons.Enums;
|
|
using DH.Commons.Helper;
|
|
using DH.Commons.Models;
|
|
|
|
namespace DHSoftware.Views
|
|
{
|
|
public partial class SavePositionControl : UserControl
|
|
{
|
|
private AntdUI.Window window;
|
|
public bool submit;
|
|
public int Position;
|
|
|
|
|
|
public SavePositionControl(AntdUI.Window _window,int _position)
|
|
{
|
|
this.window = _window;
|
|
InitializeComponent();
|
|
Position=_position;
|
|
sltName.Items.Clear();
|
|
var targetFields = GetSpecificIOFields();
|
|
foreach(var item in targetFields)
|
|
{
|
|
sltName.Items.Add(item);
|
|
}
|
|
iptPosition.Text= Position.ToString();
|
|
// 绑定事件
|
|
BindEventHandler();
|
|
}
|
|
|
|
private void BindEventHandler()
|
|
{
|
|
button_ok.Click += Button_ok_Click;
|
|
button_cancel.Click += Button_cancel_Click;
|
|
}
|
|
|
|
private void Button_cancel_Click(object sender, EventArgs e)
|
|
{
|
|
submit = false;
|
|
this.Dispose();
|
|
}
|
|
|
|
private void Button_ok_Click(object sender, EventArgs e)
|
|
{
|
|
iptPosition.Status = AntdUI.TType.None;
|
|
|
|
if (String.IsNullOrEmpty(sltName.Text))
|
|
{
|
|
sltName.Status = AntdUI.TType.Error;
|
|
AntdUI.Message.warn(window, "请选择工位!", autoClose: 3);
|
|
return;
|
|
}
|
|
|
|
//根据工位查找点位
|
|
PLCItem? pLCItem = ConfigModel.PLCBaseList?
|
|
.FirstOrDefault()?
|
|
.PLCItemList?
|
|
.Where(it=>it.Name==sltName.Text).FirstOrDefault();
|
|
if (pLCItem == null)
|
|
{
|
|
AntdUI.Message.warn(window, $"未找到{sltName.Text}地址,请检查该地址是否存在于点位表!", autoClose: 3);
|
|
return;
|
|
}
|
|
|
|
PLCItem? pLCItem1 = ConfigModel.GlobalList?
|
|
.FirstOrDefault()?
|
|
.StartProcessList?
|
|
.Where(it=>it.Name ==sltName.Text).FirstOrDefault();
|
|
|
|
if (pLCItem1 == null)
|
|
{
|
|
pLCItem1=new PLCItem();
|
|
pLCItem1.Name = pLCItem.Name;
|
|
pLCItem1.Address = pLCItem.Address;
|
|
pLCItem1.Value = iptPosition.Text;
|
|
pLCItem1.Type = pLCItem.Type;
|
|
pLCItem1.StartExecute = true;
|
|
ConfigModel.GlobalList?
|
|
.FirstOrDefault()?
|
|
.StartProcessList?.Add(pLCItem1);
|
|
}
|
|
else
|
|
{
|
|
pLCItem1.Value = iptPosition.Text;
|
|
}
|
|
|
|
ConfigHelper.SaveConfig();
|
|
AntdUI.Message.success(window, "保存成功!", autoClose: 3);
|
|
submit = true;
|
|
this.Dispose();
|
|
}
|
|
|
|
public static List<string> GetSpecificIOFields()
|
|
{
|
|
return Enum.GetNames(typeof(EnumPLCOutputIO))
|
|
.Where(name =>
|
|
Regex.IsMatch(name, @"^工位[1-9]|10$") || // 匹配工位1-10
|
|
name == "OK脉冲" ||
|
|
name == "NG脉冲")
|
|
.OrderBy(name =>
|
|
{
|
|
// 对工位进行数字排序
|
|
if (name.StartsWith("工位"))
|
|
{
|
|
return int.Parse(name.Substring(2));
|
|
}
|
|
return 99; // OK/NG放在最后
|
|
})
|
|
.ToList();
|
|
}
|
|
}
|
|
}
|
|
|