领胜LDS 键盘AOI检测项目
patrick.xu
2021-09-15 8bd46da0c9fbfe39a65d75b1d85692d8783f5905
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
using Bro.Common.Base;
using Bro.Common.Helper;
using Bro.Common.Interface;
using Bro.Common.Model;
using Bro.Process;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing.Design;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace Bro.M071.Process
{
    [Process("M071", EnumHelper.DeviceAttributeType.InitialConfig)]
    public partial class M071Config : ProcessConfigBase
    {
        #region 公共字典配置
        [Category("公共字典配置")]
        [Description("键盘键名集合")]
        [TypeConverter(typeof(SimpleCollectionConvert<string>))]
        [Editor(typeof(SimpleCollectionEditor<string>), typeof(UITypeEditor))]
        public List<string> KeyNameCollection { get; set; } = new List<string>();
 
        [Category("公共字典配置")]
        [Description("检测类型和标准集合")]
        [TypeConverter(typeof(CollectionCountConvert))]
        [Editor(typeof(ComplexCollectionEditor<MeasureType>), typeof(UITypeEditor))]
        public List<MeasureType> MeasureTypeCollection { get; set; } = new List<MeasureType>();
 
        [Category("公共字典配置")]
        [Description("单键算法配置集合")]
        [TypeConverter(typeof(CollectionCountConvert))]
        [Editor(typeof(ComplexCollectionEditor<KeyAlgorithem>), typeof(UITypeEditor))]
        public List<KeyAlgorithem> KeyAlgorithemCollection { get; set; } = new List<KeyAlgorithem>();
 
        [Category("公共字典配置")]
        [Description("单键结果配置集合")]
        [TypeConverter(typeof(CollectionCountConvert))]
        [Editor(typeof(ComplexCollectionEditor<KeyResult>), typeof(UITypeEditor))]
        public List<KeyResult> KeyResultCollection { get; set; } = new List<KeyResult>();
        #endregion
 
        [Category("离线测试模式")]
        [Description("true:设备离线模式  false:设备连线模式")]
        [DisplayName("离线模式")]
        public bool IsOfflineMode { get; set; } = false;
 
        [Category("显示配置")]
        [Description("运行背景图片路径")]
        [Editor(typeof(FileDialogEditor), typeof(UITypeEditor))]
        [DisplayName("背景图片")]
        public string BackgroundImagePath { get; set; }
 
        [Category("显示配置")]
        [Description("键盘关键键位布局显示")]
        [TypeConverter(typeof(CollectionCountConvert))]
        [Editor(typeof(ComplexCollectionEditor<KeyLocation>), typeof(UITypeEditor))]
        [DisplayName("键位显示")]
        public List<KeyLocation> KeyLocationCollection { get; set; } = new List<KeyLocation>();
 
        [Category("检测设置")]
        [Description("拍摄点位设置集合")]
        [TypeConverter(typeof(CollectionCountConvert))]
        [Editor(typeof(ComplexCollectionEditor<SnapshotPoint>), typeof(UITypeEditor))]
        [DisplayName("1.运动点位")]
        public List<SnapshotPoint> SnapshotPointCollection { get; set; } = new List<SnapshotPoint>();
 
        [Category("检测设置")]
        [Description("视觉检测单键配置集合")]
        [TypeConverter(typeof(CollectionCountConvert))]
        [Editor(typeof(ComplexCollectionEditor<KeyUnit>), typeof(UITypeEditor))]
        [DisplayName("2.单键配置")]
        public List<KeyUnit> KeyUnitCollection { get; set; } = new List<KeyUnit>();
 
        [Category("检测设置")]
        [Description("检测配置集合")]
        [DisplayName("3.检测项集合")]
        [TypeConverter(typeof(CollectionCountConvert))]
        [Editor(typeof(ComplexCollectionEditor<MeasurementUnit>), typeof(UITypeEditor))]
        public List<MeasurementUnit> MeasurementUnitCollection { get; set; } = new List<MeasurementUnit>();
 
        [Category("检测设置")]
        [Description("平面补偿值")]
        [DisplayName("4.平面补偿值")]
        public double PlanCompensation { get; set; }
 
        [Category("检测设置")]
        [Description("数据精度设置")]
        [DisplayName("5.数据精度位数")]
        public int Precision { get; set; } = 3;
 
        //[Category("检测设置")]
        //[DisplayName("结果数据保存路径")]
        //[Description("检测结果数据保存路径")]
        //[Editor(typeof(FoldDialogEditor), typeof(UITypeEditor))]
        //public string ResultDataSaveFolder { get; set; } = "";
 
        [Category("单键图片保存配置")]
        [Description("单键图片保存配置")]
        [TypeConverter(typeof(ComplexObjectConvert))]
        [Editor(typeof(PropertyObjectEditor), typeof(UITypeEditor))]
        public ImageSaveOption ImageSaveOption { get; set; } = new ImageSaveOption();
 
        [Category("单键图片保存配置")]
        [Description("单键图片保存目录路径")]
        [Editor(typeof(FoldDialogEditor), typeof(UITypeEditor))]
        public string ImageSaveFolder { get; set; } = "";
 
        [Category("屏蔽配置")]
        [Description("true:屏蔽安全门 false:启用安全门")]
        [ReadOnly(true)]
        public bool IsSafetyDoorBlocked { get; set; } = false;
 
        [Category("屏蔽配置")]
        [Description("true:屏蔽安全光线 false:启用安全光线")]
        [ReadOnly(true)]
        public bool IsSafetyBeamBlocked { get; set; } = false;
 
        private bool isBeepBlocked = false;
        [Category("屏蔽配置")]
        [Description("true:屏蔽蜂鸣器 false:启用蜂鸣器")]
        public bool IsBeepBlocked
        {
            get => isBeepBlocked;
            set => Set(ref isBeepBlocked, value);
        }
 
        private bool isBarcodeManualInputBlocked = true;
        [Category("屏蔽配置")]
        [Description("true:禁止手动输入条码 false:允许手动输入条码")]
        public bool IsBarcodeManualInputBlocked
        {
            get => isBarcodeManualInputBlocked;
            set => Set(ref isBarcodeManualInputBlocked, value);
        }
 
        [Category("MES设置")]
        [Description("true:数据上传至MES false:数据不上传")]
        [DisplayName("MES上传启用")]
        [ReadOnly(true)]
        public bool IsEnableMESUpload { get; set; } = false;
 
        [Category("MES设置")]
        [Description("true:检测用户登录 false:不强制用户登录")]
        [DisplayName("用户登录检测")]
        [Browsable(false)]
        public bool IsUserLoginCheck { get; set; } = false;
 
        [Category("MES设置")]
        [Description("MES上传路径")]
        [DisplayName("MES上传路径")]
        public string MESURL { get; set; } = "";
 
        [Category("MES设置")]
        [Description("站点编码")]
        [DisplayName("站点编码")]
        public string StationCode { get; set; } = "";
 
        [Category("MES设置")]
        [Description("Project编码")]
        [DisplayName("Project编码")]
        public string ProjectCode { get; set; } = "";
 
        [Category("MES设置")]
        [Description("线体编码")]
        [DisplayName("线体编码")]
        public string LineCode { get; set; } = "";
 
        [Category("MES设置")]
        [Description("验证当前允许新增次数[FALSE=不验证 TRUE=限制两次以下(包含两次)]")]
        [DisplayName("多次验证开关")]
        public bool IsDisableMultipleCheckTimes { get; set; }
 
        [Category("MES设置")]
        [Description("键名和上传代码映射关系")]
        [DisplayName("键名映射")]
        [TypeConverter(typeof(CollectionCountConvert))]
        [Editor(typeof(ComplexCollectionEditor<KeyCodeMap>), typeof(UITypeEditor))]
        public List<KeyCodeMap> KeyCodeMappingCollection { get; set; } = new List<KeyCodeMap>();
 
        [Category("MES设置")]
        [Description("MES数据详细记录开关")]
        [DisplayName("MES日志开关")]
        public bool IsEnableMESLog { get; set; } = false;
 
        [Category("复位设置")]
        [Description("大复位需要信号持续时间,复位信号持续超出该时间执行大复位,单位:s")]
        [DisplayName("大复位持续信号长度")]
        public int FullResetRequiredDuration { get; set; } = 3;
    }
 
    [Device("Demostration", "Demo操作配置", EnumHelper.DeviceAttributeType.OperationConfig)]
    public class DemostrationOperationConfig : OperationConfigBase, IHalconToolPath
    {
        [Category("组合操作配置集合")]
        [Description("组合操作配置集合")]
        [TypeConverter(typeof(CollectionCountConvert))]
        [Editor(typeof(ComplexCollectionEditor<OperationCombination>), typeof(UITypeEditor))]
        public List<OperationCombination> DemoOperations { get; set; } = new List<OperationCombination>();
 
        public List<string> GetHalconToolPathList()
        {
            return DemoOperations.SelectMany(d => d.GetHalconToolPathList()).ToList();
        }
    }
 
    [Device("ManualTest", "手动测试操作配置", EnumHelper.DeviceAttributeType.OperationConfig)]
    public class ManualTestOperationConfig : OperationConfigBase
    {
        [Category("手动测试配置")]
        [Description("手动测试重复次数")]
        public int RepeatTimes { get; set; } = 1;
    }
 
    [Device("KeyUnitGenerate", "单键生成配置", EnumHelper.DeviceAttributeType.OperationConfig)]
    public class KeyUnitGenerateConfig : OperationConfigBase
    {
        [Category("键名配置")]
        [Description("开始键")]
        [TypeConverter(typeof(KeyNameDictConverter))]
        public string StartKey { get; set; }
 
        [Category("键名配置")]
        [Description("结束键")]
        [TypeConverter(typeof(KeyNameDictConverter))]
        public string EndKey { get; set; }
 
        [Category("图像来源")]
        [Description("拍照点位")]
        [TypeConverter(typeof(SnapshotPointConverter))]
        public string SnapshotPointId { get; set; }
 
        [Category("算法配置")]
        [Description("单键检测配置算法类型")]
        [TypeConverter(typeof(KeyAlgorithemConverter))]
        public string KeyAlgorithemId { get; set; }
 
        [Category("算法配置")]
        [Description("单键检测配置结果类型")]
        [TypeConverter(typeof(KeyResultConverter))]
        public string KeyResultId { get; set; }
    }
 
    public class OperationCombination : IComplexDisplay, IHalconToolPath
    {
        [Category("运动机构配置")]
        [Description("运动机构配置")]
        [TypeConverter(typeof(ComplexObjectConvert))]
        [Editor(typeof(IOperationConfigByDeviceEditor), typeof(UITypeEditor))]
        public DeviceOpBind MotionOp { get; set; } = new DeviceOpBind();
 
        [Category("相机和操作配置")]
        [Description("相机和操作配置")]
        [TypeConverter(typeof(ComplexObjectConvert))]
        [Editor(typeof(IOperationConfigByDeviceEditor), typeof(UITypeEditor))]
        public DeviceOpBind CameraOp { get; set; } = new DeviceOpBind();
 
        public string GetDisplayText()
        {
            return MotionOp.GetDisplayText() + "\t" + CameraOp.GetDisplayText();
        }
 
        public List<string> GetHalconToolPathList()
        {
            if (CameraOp.OpConfig is IHalconToolPath path)
            {
                return path.GetHalconToolPathList();
            }
            else
            {
                return new List<string>();
            }
        }
    }
}