|
@@ -1,11 +1,16 @@
|
|
|
|
|
|
+using DBNames;
|
|
|
+using LiveCharts.Defaults;
|
|
|
using Microsoft.DwayneNeed.Shapes;
|
|
|
+using Mysqlx.Session;
|
|
|
using Newtonsoft.Json;
|
|
|
using NPOI.POIFS.Crypt.Dsig.Facets;
|
|
|
using NPOI.SS.Formula.Functions;
|
|
|
using NPOI.XWPF.UserModel;
|
|
|
using Opc.Ua;
|
|
|
using SCADA.BarcodeReader;
|
|
|
+using SCADA.CommonLib;
|
|
|
+using SCADA.CommonLib.Data.DIL;
|
|
|
using SCADA.CommonLib.Helper;
|
|
|
using SCADA.Drive;
|
|
|
using SCADA_DAQ.Customer.Models;
|
|
@@ -24,6 +29,7 @@ using System.Threading;
|
|
|
using System.Threading.Tasks;
|
|
|
using System.Windows;
|
|
|
using System.Windows.Ink;
|
|
|
+using System.Windows.Shapes;
|
|
|
using System.Xml.Linq;
|
|
|
|
|
|
namespace SCADA_DAQ.Customer.Machines
|
|
@@ -51,6 +57,26 @@ namespace SCADA_DAQ.Customer.Machines
|
|
|
|
|
|
//}
|
|
|
CuttingMac = new SyntecRemoteCNC(CustomerEnv.SortingMacConfigValue.CuttingMacIP);
|
|
|
+ _Lbls = Env.DAL.App_Hold_SortingLabels.GetData<LabelModel>().ToList();
|
|
|
+ Labels = new ObservableCollection<LabelModel>(_Lbls);
|
|
|
+ CurrentCycDoc = CustomerEnv.SortingMacConfigValue.CurrentFileName;
|
|
|
+ //var str = "{ \"X\" : [],\"Y\":[],\"R\":[],\"ID\":\"\"}";
|
|
|
+ //var labels = JsonHelper.JsonDeserialize<CameraModels>(str);
|
|
|
+ //var codes = labels.ID.Split(',');
|
|
|
+ //var labelModels = new List<LabelModel>();
|
|
|
+ //for (int i = 0; i < codes.Count(); i++)
|
|
|
+ //{
|
|
|
+ // labelModels.Add(new LabelModel { X = labels.X[i], Y = labels.Y[i], R = labels.R[i], CodeID = codes[i] });
|
|
|
+ //}
|
|
|
+ //var model = labelModels.Where(x => x.CodeID == "5151").FirstOrDefault();
|
|
|
+ //if (model != null)
|
|
|
+ //{
|
|
|
+
|
|
|
+ //}
|
|
|
+ //else
|
|
|
+ //{
|
|
|
+
|
|
|
+ //}
|
|
|
//var str = CycFilePath(6378049);
|
|
|
}
|
|
|
|
|
@@ -71,8 +97,8 @@ namespace SCADA_DAQ.Customer.Machines
|
|
|
}
|
|
|
private ObservableCollection<LabelModel> _Labels;
|
|
|
private List<LabelModel> _Lbls;
|
|
|
- private double CenterX { get; set; }
|
|
|
- private double CenterY { get; set; }
|
|
|
+ private double CenterX { get; set; }
|
|
|
+ private double CenterY { get; set; }
|
|
|
|
|
|
///// <summary>
|
|
|
///// 文件选择
|
|
@@ -212,8 +238,8 @@ namespace SCADA_DAQ.Customer.Machines
|
|
|
|
|
|
var reg = (RegInfo)sender;
|
|
|
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
if (reg.Comment.Variable == Tag_StartSort && reg.Value == 1)
|
|
|
{
|
|
|
//_Lbls = GetLabes(File.FilePath);
|
|
@@ -225,14 +251,16 @@ namespace SCADA_DAQ.Customer.Machines
|
|
|
end = true;
|
|
|
if (CustomerEnv.SortingMacConfigValue.CycFilePath != null)
|
|
|
{
|
|
|
- _Lbls = GetLabes(CustomerEnv.SortingMacConfigValue.CycFilePath);
|
|
|
- Labels = new ObservableCollection<LabelModel>(_Lbls);
|
|
|
+
|
|
|
+
|
|
|
+ ExistSmallBoard(CustomerEnv.SortingMacConfigValue.CycFilePath);
|
|
|
+
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
MessageBox.Show($"参数页面中的'单机运行时cyc文件'为空!");
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
}
|
|
|
else
|
|
|
{
|
|
@@ -243,11 +271,10 @@ namespace SCADA_DAQ.Customer.Machines
|
|
|
var ncName = new int[41];
|
|
|
CuttingMac.READ_plc_register(7200, 7240, out ncName);
|
|
|
var path = CycFilePath(ncName);
|
|
|
- CuttingMac.WRITE_plc_register(7200, 7240, new int[41]);
|
|
|
- if (path != null)
|
|
|
+ if (File.Exists(path))
|
|
|
{
|
|
|
- _Lbls = GetLabes(path);
|
|
|
- Labels = new ObservableCollection<LabelModel>(_Lbls);
|
|
|
+ CuttingMac.WRITE_plc_register(7200, 7240, new int[41]);
|
|
|
+ ExistSmallBoard(path);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
@@ -277,8 +304,8 @@ namespace SCADA_DAQ.Customer.Machines
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- reg.ResetBit();
|
|
|
+
|
|
|
+ reg.ResetBit();
|
|
|
NewBoardArrived?.Invoke(this, EventArgs.Empty);
|
|
|
}
|
|
|
else if (reg.Comment.Variable == Tag_RequestNext && reg.Value == 1 && reg.OldValue == 0)
|
|
@@ -299,7 +326,7 @@ namespace SCADA_DAQ.Customer.Machines
|
|
|
//var Cup1Center = new Point(-140, -155);
|
|
|
//var Cup3Center = new Point(135, -155);
|
|
|
//修改后
|
|
|
-
|
|
|
+
|
|
|
|
|
|
if ((CurrentLabel.ActualLength > 550 && CurrentLabel.ActualWidth > 200) ||
|
|
|
(CurrentLabel.ActualWidth > 550 && CurrentLabel.ActualLength > 200)
|
|
@@ -349,7 +376,7 @@ namespace SCADA_DAQ.Customer.Machines
|
|
|
else
|
|
|
{
|
|
|
BoardInfo.Rotation = 90;
|
|
|
- var cup1NewCenter = new Point(Cup1Center.Y,-1 * (double)Cup1Center.X); //旋转后的坐标
|
|
|
+ var cup1NewCenter = new Point(Cup1Center.Y, -1 * (double)Cup1Center.X); //旋转后的坐标
|
|
|
CupNewCenter = cup1NewCenter;
|
|
|
//cup3NewCenter.Offset(100, 32.5); //补偿夹具尺寸
|
|
|
BoardInfo.CupCenter = new Point(BoardInfo.CupCenter.X - cup1NewCenter.X, BoardInfo.CupCenter.Y - cup1NewCenter.Y);
|
|
@@ -368,7 +395,7 @@ namespace SCADA_DAQ.Customer.Machines
|
|
|
if (CurrentLabel.ActualLength < CurrentLabel.ActualWidth)
|
|
|
{
|
|
|
BoardInfo.Rotation = -90;
|
|
|
- var cup3NewCenter = new Point(Cup3Center.Y * -1,(double)Cup3Center.X); //旋转后的坐标
|
|
|
+ var cup3NewCenter = new Point(Cup3Center.Y * -1, (double)Cup3Center.X); //旋转后的坐标
|
|
|
BoardInfo.CupCenter = new Point(BoardInfo.CupCenter.X - cup3NewCenter.X, BoardInfo.CupCenter.Y - cup3NewCenter.Y);
|
|
|
CupNewCenter = cup3NewCenter;
|
|
|
|
|
@@ -399,28 +426,31 @@ namespace SCADA_DAQ.Customer.Machines
|
|
|
|
|
|
}
|
|
|
|
|
|
- GetListenReg(Tag_PhotoAngle).WriteObject(null,(float)BoardInfo.Rotation);
|
|
|
+ GetListenReg(Tag_PhotoAngle).WriteObject(null, (float)BoardInfo.Rotation);
|
|
|
GetListenReg(Tag_PhotographX).WriteObject(null,
|
|
|
(float)(CurrentLabel.X > originXOffset ? CurrentLabel.X - originXOffset : 0),
|
|
|
(float)(CurrentLabel.Y - cameraOriginy), (short)1);
|
|
|
- if (CurrentLabel == _Lbls.Where(t=>t.Status == Models.TaskStatus.None).Last())
|
|
|
+ if (CurrentLabel == _Lbls.Where(t => t.Status == Models.TaskStatus.None).Last())
|
|
|
{
|
|
|
System.Threading.Thread.Sleep(1000);
|
|
|
GetListenReg(Tag_SortFinish).SetBit();
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
CurrentLabel.Status = Models.TaskStatus.Excuting;
|
|
|
-
|
|
|
+ Env.DAL.App_Hold_SortingLabels.Update($"{T_Col_Name.App_Hold_SortingLabels.CodeID_Str} = '{CurrentLabel.CodeID}'",
|
|
|
+ new UpdateItem(T_Col_Name.App_Hold_SortingLabels.Status_Int, (int)Models.TaskStatus.Excuting));
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- MessageBox.Show("板件已经分拣完成!!!");
|
|
|
+ MessageBox.Show("板件已经分拣完成!!!");
|
|
|
}
|
|
|
|
|
|
reg.ResetBit();
|
|
|
}
|
|
|
else if (reg.Comment.Variable == Tag_CameraMoveOK && reg.Value == 1 && reg.OldValue == 0)
|
|
|
- {
|
|
|
- //var _lbl = new LabelModel() { ID = CurrentLabel.ID };
|
|
|
+ {
|
|
|
+ //var _lbl = new LabelModel() { CodeID = CurrentLabel.CodeID };
|
|
|
var _lbl = new LabelModel();
|
|
|
var isCancel = false;
|
|
|
if (GetListenReg(Tag_CameraEnable).Value == 0)
|
|
@@ -435,9 +465,36 @@ namespace SCADA_DAQ.Customer.Machines
|
|
|
new SCADA.Comm.ResponseInfo(SCADA.Comm.ResponseType.EndFlag) { EndFlags = new byte[] { 0x0A } });
|
|
|
if (_strContent != null)
|
|
|
{
|
|
|
- _lbl = JsonHelper.JsonDeserialize<LabelModel>(_strContent); //获取标签位置
|
|
|
- log.Info($"相机计算的偏差值为:X={_lbl.X},Y={_lbl.Y},R={_lbl.R}");
|
|
|
- _lbl.X += CustomerEnv.SortingMacConfigValue.XCameraOffset;
|
|
|
+ //var labels = new List<LabelModel>();
|
|
|
+
|
|
|
+ var labels = JsonHelper.JsonDeserialize<CameraModels>(_strContent); //获取标签位置
|
|
|
+ var codes = labels.ID.Split(',');
|
|
|
+ var labelModels = new List<LabelModel>();
|
|
|
+ for (int i = 0; i < codes.Count(); i++)
|
|
|
+ {
|
|
|
+ labelModels.Add(new LabelModel { X = labels.X[i], Y = labels.Y[i], R = labels.R[i], CodeID = codes[i] });
|
|
|
+ }
|
|
|
+ _lbl = labelModels.Where(t => t.CodeID == CurrentLabel.CodeID).FirstOrDefault();
|
|
|
+ if (_lbl != null)
|
|
|
+ {
|
|
|
+ log.Info($"相机计算的偏差值为:X={_lbl.X},Y={_lbl.Y},R={_lbl.R}");
|
|
|
+ _lbl.X += CustomerEnv.SortingMacConfigValue.XCameraOffset;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ _lbl = new LabelModel { CodeID = CurrentLabel.CodeID };
|
|
|
+
|
|
|
+ if (!CustomerEnv.SortingMacConfigValue.IsCameraFailForceRun)
|
|
|
+ {
|
|
|
+ if (MessageBox.Show($"相机数据中没有识别到数据 \n 是否继续?", "相机数据", MessageBoxButton.YesNo) == MessageBoxResult.No)
|
|
|
+ {
|
|
|
+ isCancel = true;
|
|
|
+ CurrentLabel.Status = Models.TaskStatus.None;
|
|
|
+ GetListenReg(Tag_Reset).SetBit();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
else
|
|
|
{
|
|
@@ -449,7 +506,7 @@ namespace SCADA_DAQ.Customer.Machines
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- _lbl.ID = CurrentLabel.ID;
|
|
|
+ _lbl.CodeID = CurrentLabel.CodeID;
|
|
|
|
|
|
}
|
|
|
}
|
|
@@ -457,42 +514,39 @@ namespace SCADA_DAQ.Customer.Machines
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
+ //var path = ((JsonReaderException)ex).Path;
|
|
|
+ _lbl.CodeID = CurrentLabel.CodeID;
|
|
|
|
|
|
- if (ex.Source == "Newtonsoft.Json")
|
|
|
+ if (!CustomerEnv.SortingMacConfigValue.IsCameraFailForceRun)
|
|
|
{
|
|
|
- var path = ((JsonReaderException)ex).Path;
|
|
|
- _lbl.ID = CurrentLabel.ID;
|
|
|
-
|
|
|
- if (!CustomerEnv.SortingMacConfigValue.IsCameraFailForceRun)
|
|
|
+ if (MessageBox.Show($"相机数据中没有识别到数据 \n 是否继续?", "相机数据", MessageBoxButton.YesNo) == MessageBoxResult.No)
|
|
|
{
|
|
|
- if (MessageBox.Show($"相机数据中属性“{path}”数据错误 \n 是否继续?", "相机数据", MessageBoxButton.YesNo) == MessageBoxResult.No)
|
|
|
- {
|
|
|
- isCancel = true;
|
|
|
- CurrentLabel.Status = Models.TaskStatus.None;
|
|
|
- GetListenReg(Tag_Reset).SetBit();
|
|
|
- }
|
|
|
+ isCancel = true;
|
|
|
+ CurrentLabel.Status = Models.TaskStatus.None;
|
|
|
+ GetListenReg(Tag_Reset).SetBit();
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
|
|
|
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- _lbl.ID = CurrentLabel.ID;
|
|
|
+ _lbl.CodeID = CurrentLabel.CodeID;
|
|
|
}
|
|
|
if (!isCancel)
|
|
|
{
|
|
|
- if (_lbl.ID == CurrentLabel.ID)
|
|
|
+ if (_lbl.CodeID == CurrentLabel.CodeID)
|
|
|
{
|
|
|
- Log.Info($"开始处理,{CurrentLabel.ID}");
|
|
|
-
|
|
|
+ Log.Info($"开始处理,{CurrentLabel.CodeID}");
|
|
|
+
|
|
|
var rotation = BoardInfo.Rotation;
|
|
|
- var releaseRotation = rotation == 0 ? -90 : rotation;
|
|
|
-
|
|
|
+ var releaseRotation = rotation == 0 ? -90 : rotation;
|
|
|
+
|
|
|
var releaseXOffset = 0f;
|
|
|
if (BoardInfo.CupIndex != 2)
|
|
|
{
|
|
@@ -504,7 +558,15 @@ namespace SCADA_DAQ.Customer.Machines
|
|
|
// releaseRotation = -90;
|
|
|
//}
|
|
|
BoardInfo.ReleaseY = Math.Max(10, BoardInfo.ReleaseY);
|
|
|
- rotation += _lbl.R;
|
|
|
+ if (CurrentLabel.R == 90)
|
|
|
+ {
|
|
|
+ rotation += Math.Abs(_lbl.R) - CurrentLabel.R;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ rotation += _lbl.R - CurrentLabel.R;
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
var moveX = (float)((double)_lbl.X + BoardInfo.CupCenter.X);
|
|
|
moveX = moveX > originXOffset ? moveX - originXOffset : 0;
|
|
@@ -526,7 +588,7 @@ namespace SCADA_DAQ.Customer.Machines
|
|
|
xOffset = CupNewCenter.X - (CupNewCenter.X * Math.Cos(angle) - CupNewCenter.Y * Math.Sin(angle));
|
|
|
yOffset = CupNewCenter.Y - (CupNewCenter.X * Math.Sin(angle) + CupNewCenter.Y * Math.Cos(angle));
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
|
|
|
//var xoffset = Math.Sin(a) * (double)CurrentLabel.ActualLength;
|
|
|
//var yoffset = Math.Sin(angle) * (double)CurrentLabel.ActualWidth;
|
|
@@ -540,6 +602,8 @@ namespace SCADA_DAQ.Customer.Machines
|
|
|
//{
|
|
|
// releaseXOffset -= 200;
|
|
|
//}
|
|
|
+ //都放在输送辊中心点,无需偏移
|
|
|
+ BoardInfo.ReleaseY = 0;
|
|
|
GetListenReg(Tag_CaptureX).WriteObject(null,
|
|
|
moveX + (float)xOffset, //D1512
|
|
|
moveY + (float)yOffset, //D1514
|
|
@@ -551,10 +615,10 @@ namespace SCADA_DAQ.Customer.Machines
|
|
|
(float)BoardInfo.ReleaseY, // D1524 放板位置Y
|
|
|
(float)releaseRotation //放板角度
|
|
|
);
|
|
|
-
|
|
|
+
|
|
|
CupMove?.Invoke(this, new CupMoveEventArgs() { X = (double)_lbl.X + BoardInfo.CupCenter.X, Y = (double)_lbl.Y + BoardInfo.CupCenter.Y, R = (double)rotation, CupIndex = BoardInfo.CupIndex });
|
|
|
|
|
|
- Log.Info($"正在分拣:{CurrentLabel.ID},X:{moveX},Y:{moveY},角度:{rotation},吸盘:{BoardInfo.CupIndex}");
|
|
|
+ Log.Info($"正在分拣:{CurrentLabel.CodeID},X:{moveX},Y:{moveY},角度:{rotation},吸盘:{BoardInfo.CupIndex}");
|
|
|
}
|
|
|
else
|
|
|
{
|
|
@@ -563,7 +627,7 @@ namespace SCADA_DAQ.Customer.Machines
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- Log.Error($"拍照获取的ID与需求ID不一致,被拍照的ID:{_lbl.ID},需求的板材ID:{CurrentLabel.ID}");
|
|
|
+ Log.Error($"拍照获取的ID与需求ID不一致,被拍照的ID:{_lbl.CodeID},需求的板材ID:{CurrentLabel.CodeID}");
|
|
|
}
|
|
|
}
|
|
|
else
|
|
@@ -573,6 +637,17 @@ namespace SCADA_DAQ.Customer.Machines
|
|
|
|
|
|
//}
|
|
|
}
|
|
|
+ else if (reg.Comment.Variable == Tag_LastBoardPutOK && reg.Value == 1)
|
|
|
+ {
|
|
|
+ if (GetListenReg(Tag_SmallBoardManualConfirm).Value == 1)
|
|
|
+ {
|
|
|
+ if (MessageBox.Show("存在小板,请人工取走后点击确认按钮") == MessageBoxResult.OK)
|
|
|
+ {
|
|
|
+ GetListenReg(Tag_SmallBoardManualConfirm).ResetBit();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ reg.ResetBit();
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -609,8 +684,8 @@ namespace SCADA_DAQ.Customer.Machines
|
|
|
for (int i = 0; i < values.Count(); i++)
|
|
|
{
|
|
|
code[0 + i * 4] = (byte)(values[i] >> 0);
|
|
|
- code[1+ i * 4] = (byte)(values[i] >> 8);
|
|
|
- code[2+ i * 4] = (byte)(values[i] >> 16);
|
|
|
+ code[1 + i * 4] = (byte)(values[i] >> 8);
|
|
|
+ code[2 + i * 4] = (byte)(values[i] >> 16);
|
|
|
code[3 + i * 4] = (byte)(values[i] >> 24);
|
|
|
}
|
|
|
for (int i = 0; i < code.Count(); i++)
|
|
@@ -623,12 +698,39 @@ namespace SCADA_DAQ.Customer.Machines
|
|
|
}
|
|
|
log.Info($"开料机解析的加工文件为{str}");
|
|
|
//return str;
|
|
|
- var fileName ="Label_"+str.Replace(".nc",".cyc");
|
|
|
+ var fileName = "Label_" + str.Replace(".nc", ".cyc");
|
|
|
CurrentCycDoc = fileName;
|
|
|
+ CustomerEnv.SortingMacConfigValue.CurrentFileName = fileName;
|
|
|
var filePath = new DirectoryInfo(CustomerEnv.SortingMacConfigValue.CycFolder).GetFiles().Where(t => t.Name.Contains(fileName)).FirstOrDefault();
|
|
|
return CustomerEnv.SortingMacConfigValue.CycFolder + $@"\{fileName}";
|
|
|
}
|
|
|
|
|
|
+ public void ExistSmallBoard(string path)
|
|
|
+ {
|
|
|
+ _Lbls = GetLabes(path);
|
|
|
+ Labels = new ObservableCollection<LabelModel>(_Lbls);
|
|
|
+ Env.DAL.App_Hold_SortingLabels.Delete("1=1");
|
|
|
+
|
|
|
+ var smallBoard = Labels.Where(t => Math.Min(t.ActualWidth, t.ActualLength) <= 80 ||
|
|
|
+ Math.Max(t.ActualWidth, t.ActualLength) <= 250).ToList();
|
|
|
+ if (smallBoard != null && smallBoard.Count > 0)
|
|
|
+ {
|
|
|
+ foreach (var t in smallBoard)
|
|
|
+ {
|
|
|
+ t.Status = Models.TaskStatus.Finished;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ GetListenReg(Tag_SmallBoardManualConfirm).SetBit();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ GetListenReg(Tag_SmallBoardManualConfirm).ResetBit();
|
|
|
+
|
|
|
+ }
|
|
|
+ Env.DAL.Insert(_Lbls);
|
|
|
+ }
|
|
|
+
|
|
|
/// <summary>
|
|
|
///
|
|
|
/// </summary>
|
|
@@ -656,6 +758,82 @@ namespace SCADA_DAQ.Customer.Machines
|
|
|
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ public class CameraModels : ObservableObject
|
|
|
+ {
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// X集合
|
|
|
+ /// </summary>
|
|
|
+ public List<decimal> X
|
|
|
+ {
|
|
|
+ get { return _X; }
|
|
|
+ set
|
|
|
+ {
|
|
|
+ if (value != _X)
|
|
|
+ {
|
|
|
+ _X = value;
|
|
|
+ OnPropertyChanged(nameof(X));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ private List<decimal> _X;
|
|
|
+
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// Y集合
|
|
|
+ /// </summary>
|
|
|
+ public List<decimal> Y
|
|
|
+ {
|
|
|
+ get { return _Y; }
|
|
|
+ set
|
|
|
+ {
|
|
|
+ if (value != _Y)
|
|
|
+ {
|
|
|
+ _Y = value;
|
|
|
+ OnPropertyChanged(nameof(Y));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ private List<decimal> _Y;
|
|
|
+
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// R集合
|
|
|
+ /// </summary>
|
|
|
+ public List<decimal> R
|
|
|
+ {
|
|
|
+ get { return _R; }
|
|
|
+ set
|
|
|
+ {
|
|
|
+ if (value != _R)
|
|
|
+ {
|
|
|
+ _R = value;
|
|
|
+ OnPropertyChanged(nameof(R));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ private List<decimal> _R;
|
|
|
+
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// ID集合
|
|
|
+ /// </summary>
|
|
|
+ public string ID
|
|
|
+ {
|
|
|
+ get { return _ID; }
|
|
|
+ set
|
|
|
+ {
|
|
|
+ if (value != _ID)
|
|
|
+ {
|
|
|
+ _ID = value;
|
|
|
+ OnPropertyChanged(nameof(ID));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ private string _ID;
|
|
|
+
|
|
|
}
|
|
|
}
|