| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579 |
- using Cognex.VisionPro.ToolBlock;
- using Newtonsoft.Json;
- using Prism.Mvvm;
- using System;
- using System.Collections.Generic;
- using System.Collections.ObjectModel;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using TeamAAS_VP.Enums;
- using TeamAAS_VP.Models.Feeder;
- using TeamAAS_VP.Models.Lights;
- using TeamAAS_VP.Models.Product;
- namespace TeamAAS_VP.Models
- {
- /// <summary>
- /// 流程模型
- /// </summary>
- [JsonObject(MemberSerialization.OptOut)]
- public class ProcedureModel : BindableBase
- {
- public Guid Id { get; set; }
- /// <summary>
- /// 流程名称
- /// </summary>
- public string Name { get; set; }
- public string CameraName { get; set; }
- private int _CameraNo;
- /// <summary>
- /// 相机编号
- /// </summary>
- public int CameraNo
- {
- get { return _CameraNo; }
- set { SetProperty(ref _CameraNo, value); }
- }
- /// <summary>
- /// AI Train 文件夹名称
- /// </summary>
- private string _CameraTrainFolder;
- public string CameraTrainFolder
- {
- get { return _CameraTrainFolder; }
- set
- {
- if (value == null)
- {
- return;
- }
- if (value=="Null")
- {
- SetProperty(ref _CameraTrainFolder, null);
- }
- else
- {
- SetProperty(ref _CameraTrainFolder, value);
- }
- }
- }
- /// <summary>
- /// 视觉图像处理模式
- /// </summary>
- public VisionModel VisionModel { get; set; }
- /// <summary>
- /// 触发相机命令
- /// </summary>
- public string TriggerCommand { get; set; }
- /// <summary>
- /// 机器人
- /// </summary>
- public Guid RobotId { get; set; }
- /// <summary>
- /// Feeder
- /// </summary>
- public Guid FeederId { get; set; }
- /// <summary>
- /// Camera
- /// </summary>
- public Guid CameraId { get; set; }
- /// <summary>
- /// 校准
- /// </summary>
- public Guid CalibrationId { get; set; }
- private ObservableCollection<ProcedureOutput> _ProcedureOutputs;
- /// <summary>
- /// 主页图像显示窗口的ID
- /// </summary>
- public Guid DisplayId { get; set; }
- /// <summary>
- /// 主页图像显示窗口的名称
- /// </summary>
- public string DisplayName { get; set; }
- /// <summary>
- /// 视觉流程输出集合
- /// </summary>
- public ObservableCollection<ProcedureOutput> ProcedureOutputs
- {
- get { return _ProcedureOutputs; }
- set { SetProperty(ref _ProcedureOutputs, value); }
- }
- private string _OutputSeparator = ";";
- /// <summary>
- /// 视觉流程输出项之间的分割符
- /// </summary>
- public string OutputSeparator
- {
- get { return _OutputSeparator; }
- set { SetProperty(ref _OutputSeparator, value); }
- }
- private FeederWorks _FeederWorks;
- /// <summary>
- /// Feeder振动集合
- /// </summary>
- public FeederWorks FeederWorks
- {
- get { return _FeederWorks; }
- set { SetProperty(ref _FeederWorks, value); }
- }
- private FeederStockWorks _FeederStockWorks;
- /// <summary>
- /// Feeder料仓振动集合
- /// </summary>
- public FeederStockWorks FeederStockWorks
- {
- get { return _FeederStockWorks; }
- set { SetProperty(ref _FeederStockWorks, value); }
- }
- private double _MinArea;
- /// <summary>
- /// Blob最小面积
- /// </summary>
- public double MinArea
- {
- get { return _MinArea; }
- set { SetProperty(ref _MinArea, value); }
- }
- private int _LightValue;
- /// <summary>
- /// 亮度
- /// </summary>
- public int LightValue
- {
- get { return _LightValue; }
- set { SetProperty(ref _LightValue, value); }
- }
- private float _ExposureTime;
- /// <summary>
- /// 相机曝光时间
- /// </summary>
- public float ExposureTime
- {
- get { return _ExposureTime; }
- set { SetProperty(ref _ExposureTime, value); }
- }
- private float _ExposureTime2;
- /// <summary>
- /// 相机曝光2时间
- /// </summary>
- public float ExposureTime2
- {
- get { return _ExposureTime2; }
- set { SetProperty(ref _ExposureTime2, value); }
- }
- private float _Gain;
- /// <summary>
- /// 相机增益
- /// </summary>
- public float Gain
- {
- get { return _Gain; }
- set { SetProperty(ref _Gain, value); }
- }
- private float _Gain2;
- /// <summary>
- /// 相机增益2
- /// </summary>
- public float Gain2
- {
- get { return _Gain2; }
- set { SetProperty(ref _Gain2, value); }
- }
- private int _Photo1Light1;
- /// <summary>
- /// 第一次拍照光源1亮度
- /// </summary>
- public int Photo1Light1
- {
- get { return _Photo1Light1; }
- set { SetProperty(ref _Photo1Light1, value); }
- }
- private int _Photo1Light2;
- /// <summary>
- /// 第一次拍照光源2亮度
- /// </summary>
- public int Photo1Light2
- {
- get { return _Photo1Light2; }
- set { SetProperty(ref _Photo1Light2, value); }
- }
- private int _Photo1Light3;
- /// <summary>
- /// 第一次拍照光源3亮度
- /// </summary>
- public int Photo1Light3
- {
- get { return _Photo1Light3; }
- set { SetProperty(ref _Photo1Light3, value); }
- }
- private int _Photo2Light1;
- /// <summary>
- /// 第二次拍照光源1亮度
- /// </summary>
- public int Photo2Light1
- {
- get { return _Photo2Light1; }
- set { SetProperty(ref _Photo2Light1, value); }
- }
- private int _Photo2Light2;
- /// <summary>
- /// 第二次拍照光源2亮度
- /// </summary>
- public int Photo2Light2
- {
- get { return _Photo2Light2; }
- set { SetProperty(ref _Photo2Light2, value); }
- }
- private int _Photo2Light3;
- /// <summary>
- /// 第二次拍照光源3亮度
- /// </summary>
- public int Photo2Light3
- {
- get { return _Photo2Light3; }
- set { SetProperty(ref _Photo2Light3, value); }
- }
- private int _PhotoCount;
- /// <summary>
- /// 拍照次数
- /// </summary>
- public int PhotoCount
- {
- get { return _PhotoCount; }
- set { SetProperty(ref _PhotoCount, value); }
- }
- private CogToolBlock _ToolBlock;
- /// <summary>
- /// 工具组
- /// </summary>
- [JsonIgnore]
- public CogToolBlock ToolBlock
- {
- get { return _ToolBlock; }
- set { SetProperty(ref _ToolBlock, value); }
- }
- private ObservableCollection<ToolInfo> _ToolInfo = new ObservableCollection<ToolInfo>();
- /// <summary>
- /// 工具末端的补偿
- /// </summary>
- public ObservableCollection<ToolInfo> ToolInfo
- {
- get { return _ToolInfo; }
- set { SetProperty(ref _ToolInfo, value); }
- }
- private int _WaitPhoto;
- /// <summary>
- /// 延时拍照时长(ms)
- /// </summary>
- public int WaitPhoto
- {
- get { return _WaitPhoto; }
- set { SetProperty(ref _WaitPhoto, value); }
- }
- private int _WaitFeederStop;
- /// <summary>
- /// 等待震动盘静止时长(ms)
- /// </summary>
- public int WaitFeederStop
- {
- get { return _WaitFeederStop; }
- set { SetProperty(ref _WaitFeederStop, value); }
- }
- private VibrationModel _VibrationModel;
- /// <summary>
- /// 振动模式
- /// </summary>
- public VibrationModel VibrationModel
- {
- get { return _VibrationModel; }
- set { SetProperty(ref _VibrationModel, value); }
- }
- private int _FeederFailLimit;
- /// <summary>
- /// 拍照失败Feeder振动最大次数
- /// </summary>
- public int FeederFailLimit
- {
- get { return _FeederFailLimit; }
- set { SetProperty(ref _FeederFailLimit, value); }
- }
- private OutputPointMode _OutputPointMode;
- /// <summary>
- /// 点位发送的模式
- /// </summary>
- public OutputPointMode OutputPointMode
- {
- get { return _OutputPointMode; }
- set { SetProperty(ref _OutputPointMode, value); }
- }
- private int _OutputPointCountMax = 100;
- /// <summary>
- /// 每次发送给机器人的点数最大值
- /// </summary>
- public int OutputPointCountMax
- {
- get { return _OutputPointCountMax; }
- set { SetProperty(ref _OutputPointCountMax, value); }
- }
- private bool _IsExcludeNearPoint;
- /// <summary>
- /// 是否剔除本次识别到的物料与上一次识别到的物料位置过近的点
- /// </summary>
- public bool IsExcludeNearPoint
- {
- get { return _IsExcludeNearPoint; }
- set { SetProperty(ref _IsExcludeNearPoint, value); }
- }
- private double _ExcludeNearPointThreshol = 1;
- /// <summary>
- /// 物料位置过近阈值
- /// </summary>
- public double ExcludeNearPointThreshol
- {
- get { return _ExcludeNearPointThreshol; }
- set { SetProperty(ref _ExcludeNearPointThreshol, value); }
- }
- private bool _IsSaveImage;
- /// <summary>
- /// 保存图像
- /// </summary>
- public bool IsSaveImage
- {
- get { return _IsSaveImage; }
- set { SetProperty(ref _IsSaveImage, value); }
- }
- private ProcedureSaveImageModel _SaveImageModel;
- /// <summary>
- /// 存图模式
- /// </summary>
- public ProcedureSaveImageModel SaveImageModel
- {
- get { return _SaveImageModel; }
- set { SetProperty(ref _SaveImageModel, value); }
- }
- private ProcedureSaveImagePathModel _SaveImagePathModel;
- /// <summary>
- /// 存图路径模式
- /// </summary>
- public ProcedureSaveImagePathModel SaveImagePathModel
- {
- get { return _SaveImagePathModel; }
- set { SetProperty(ref _SaveImagePathModel, value); }
- }
- private string _SavePath;
- /// <summary>
- /// 存图路径
- /// </summary>
- public string SavePath
- {
- get { return _SavePath; }
- set { SetProperty(ref _SavePath, value); }
- }
- //用户定义的图片文件名格式,例如:{ProductSN}_Daisy_KB Screw _01 _{CameraName}-Locate_{ShotCount}_WhiteRingLight_{Result}_{DateTime:yyyy-MM-dd_HH-mm-ss}.png
- private string _ImageFileNameFormat;
- /// <summary>
- /// 用户定义的图片文件名格式,例如:{ProductSN}_Daisy_KB Screw _01 _{CameraName}-Locate_{ShotCount}_WhiteRingLight_{Result}_{DateTime:yyyy-MM-dd_HH-mm-ss}.png
- /// </summary>
- public string ImageFileNameFormat
- {
- get { return _ImageFileNameFormat; }
- set { SetProperty(ref _ImageFileNameFormat, value); }
- }
- private bool _IsCompress;
- /// <summary>
- /// 是否压缩图片
- /// </summary>
- public bool IsCompress
- {
- get { return _IsCompress; }
- set { SetProperty(ref _IsCompress, value); }
- }
- private FeederFrequencyModel _FeederFindFrequency;
- /// <summary>
- /// Feeder自动寻频配置
- /// </summary>
- public FeederFrequencyModel FeederFindFrequency
- {
- get { return _FeederFindFrequency; }
- set { SetProperty(ref _FeederFindFrequency, value); }
- }
- private ObservableCollection<ProcedureUserDefineParam> _UserDefineParameters;
- /// <summary>
- /// 用户自定义参数
- /// </summary>
- public ObservableCollection<ProcedureUserDefineParam> UserDefineParameters
- {
- get { return _UserDefineParameters; }
- set { SetProperty(ref _UserDefineParameters, value); }
- }
- private bool _IsControlLightChannels;
- /// <summary>
- /// 是否控制光源通道亮灭
- /// </summary>
- public bool IsControlLightChannels
- {
- get { return _IsControlLightChannels; }
- set { SetProperty(ref _IsControlLightChannels, value); }
- }
- private ObservableCollection<ChannelConfig> _LightChannels;
- /// <summary>
- /// 光源通道配置集合。每个流程可配置多个光源通道及其默认亮度。
- /// </summary>
- public ObservableCollection<ChannelConfig> LightChannels
- {
- get { return _LightChannels; }
- set { SetProperty(ref _LightChannels, value); }
- }
- #region 运行时的一些临时记忆
- /// <summary>
- /// 最后一次的Blob面积值
- /// </summary>
- [JsonIgnore]
- public double LastBlobArea { get; set; } = 0;
- /// <summary>
- /// 最后一次运行的点数据
- /// </summary>
- [JsonIgnore]
- public List<double[]> LastRunPoints { get; set; } = new List<double[]>();
- #endregion
- public ProcedureModel()
- {
- Id = Guid.NewGuid();
- ProcedureOutputs = new ObservableCollection<ProcedureOutput>();
- ToolInfo = new ObservableCollection<ToolInfo>();
- FeederFindFrequency = new FeederFrequencyModel();
- UserDefineParameters = new ObservableCollection<ProcedureUserDefineParam>();
- FeederWorks = new FeederWorks();
- FeederStockWorks = new FeederStockWorks();
- LightChannels = new ObservableCollection<ChannelConfig>();
- }
- public ProcedureModel(string name, string cameraName, Guid cameraId, int camerano)
- {
- Id = Guid.NewGuid();
- Name = name;
- CameraName = cameraName;
- CameraNo = camerano;
- CameraId = cameraId;
- ProcedureOutputs = new ObservableCollection<ProcedureOutput>();
- ToolInfo = new ObservableCollection<ToolInfo>();
- FeederFindFrequency = new FeederFrequencyModel();
- UserDefineParameters = new ObservableCollection<ProcedureUserDefineParam>();
- FeederWorks = new FeederWorks();
- FeederStockWorks = new FeederStockWorks();
- LightChannels = new ObservableCollection<ChannelConfig>();
- }
- public ProcedureModel Clone()
- {
- return new ProcedureModel
- {
- Id = this.Id,
- Name = this.Name,
- CameraName = this.CameraName,
- CameraNo = this.CameraNo,
- VisionModel = this.VisionModel,
- CameraTrainFolder = this.CameraTrainFolder,
- TriggerCommand = this.TriggerCommand,
- RobotId = this.RobotId,
- FeederId = this.FeederId,
- CameraId = this.CameraId,
- CalibrationId = this.CalibrationId,
- DisplayId = this.DisplayId,
- DisplayName = this.DisplayName,
- ProcedureOutputs = new ObservableCollection<ProcedureOutput>(this.ProcedureOutputs.Select(po => po.Copy())),
- FeederWorks = this.FeederWorks?.Copy(),
- FeederStockWorks = this.FeederStockWorks?.Copy(),
- MinArea = this.MinArea,
- LightValue = this.LightValue,
- ExposureTime = this.ExposureTime,
- Gain = this.Gain,
- // ToolBlock不克隆
- ToolInfo = new ObservableCollection<ToolInfo>(this.ToolInfo.Select(ti => ti.Copy())),
- WaitPhoto = this.WaitPhoto,
- WaitFeederStop = this.WaitFeederStop,
- VibrationModel = this.VibrationModel,
- FeederFailLimit = this.FeederFailLimit,
- OutputPointCountMax = this.OutputPointCountMax,
- IsSaveImage = this.IsSaveImage,
- SaveImageModel = this.SaveImageModel,
- SaveImagePathModel = this.SaveImagePathModel,
- SavePath = this.SavePath,
- ImageFileNameFormat = this.ImageFileNameFormat,
- IsCompress = this.IsCompress,
- FeederFindFrequency = this.FeederFindFrequency?.Copy(),
- IsExcludeNearPoint = this.IsExcludeNearPoint,
- ExcludeNearPointThreshol = this.ExcludeNearPointThreshol,
- OutputPointMode = this.OutputPointMode,
- OutputSeparator = this.OutputSeparator,
- UserDefineParameters = new ObservableCollection<ProcedureUserDefineParam>(this.UserDefineParameters.Select(udp => udp.Copy())),
- LightChannels = this.LightChannels == null ? new ObservableCollection<ChannelConfig>() : new ObservableCollection<ChannelConfig>(this.LightChannels.Select(ch => new ChannelConfig
- {
- Name = ch.Name,
- Description = ch.Description,
- LocalIndex = ch.LocalIndex,
- GlobalIndex = ch.GlobalIndex,
- DefaultBrightness = ch.DefaultBrightness
- })),
- };
- }
- }
- }
|