ShowBindingClass.cs 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035
  1. using CCDCount.DLL;
  2. using CCDCount.MODEL.ConfigModel;
  3. using CCDCount.MODEL.SqlDataModel;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Collections.ObjectModel;
  7. using System.ComponentModel;
  8. using System.Drawing.Text;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. using System.Windows.Media;
  13. using System.Windows.Media.Imaging;
  14. namespace CCDCountWpf
  15. {
  16. public class CameraCoboxItem
  17. {
  18. public string Name { get; set; } // 显示的名称
  19. public string SNValue { get; set; } // 对应的编号
  20. }
  21. public class ShowBindingClass : INotifyPropertyChanged
  22. {
  23. /// <summary>
  24. /// 累计数量
  25. /// </summary>
  26. private string allActiveNum = "0";
  27. public string AllActiveNum
  28. {
  29. get { return allActiveNum; }
  30. set
  31. {
  32. allActiveNum = value;
  33. OnPropertyChanged("AllActiveNum");
  34. }
  35. }
  36. /// <summary>
  37. /// 累计OK
  38. /// </summary>
  39. private string allOkNum = "0";
  40. public string AllOkNum
  41. {
  42. get { return allOkNum; }
  43. set
  44. {
  45. allOkNum = value;
  46. OnPropertyChanged("AllOkNum");
  47. }
  48. }
  49. /// <summary>
  50. /// 累计NG
  51. /// </summary>
  52. private string allNgNum = "0";
  53. public string AllNgNum
  54. {
  55. get { return allNgNum; }
  56. set
  57. {
  58. allNgNum = value;
  59. OnPropertyChanged("AllNgNum");
  60. }
  61. }
  62. /// <summary>
  63. /// 数粒速度
  64. /// </summary>
  65. private string shuLiSpeed = "0";
  66. public string ShuLiSpeed
  67. {
  68. get { return shuLiSpeed; }
  69. set
  70. {
  71. shuLiSpeed = value;
  72. OnPropertyChanged("ShuLiSpeed");
  73. }
  74. }
  75. /// <summary>
  76. /// 内存监控
  77. /// </summary>
  78. private string ramMonitor = "";
  79. public string RamMonitor
  80. {
  81. get { return ramMonitor; }
  82. set
  83. {
  84. ramMonitor = value;
  85. OnPropertyChanged("RamMonitor");
  86. }
  87. }
  88. /// <summary>
  89. /// CPU监控
  90. /// </summary>
  91. private string _CPUMonitor = "";
  92. public string CPUMonitor
  93. {
  94. get { return _CPUMonitor; }
  95. set
  96. {
  97. _CPUMonitor = value;
  98. OnPropertyChanged("CPUMonitor");
  99. }
  100. }
  101. /// <summary>
  102. /// 相机运行状态
  103. /// </summary>
  104. private string camRunStatic = "未运行";
  105. public string CamRunStatic
  106. {
  107. get { return camRunStatic; }
  108. set
  109. {
  110. camRunStatic = value;
  111. OnPropertyChanged("CamRunStatic");
  112. }
  113. }
  114. /// <summary>
  115. /// 历史结果当前图像编号
  116. /// </summary>
  117. private int historyImageNum = 1;
  118. public int HistoryImageNum
  119. {
  120. get { return historyImageNum; }
  121. set
  122. {
  123. historyImageNum = value;
  124. OnPropertyChanged("HistoryImageNum");
  125. }
  126. }
  127. /// <summary>
  128. /// 历史结果图像数量
  129. /// </summary>
  130. private int historyImageCount = 0;
  131. public int HistoryImageCount
  132. {
  133. get { return historyImageCount; }
  134. set
  135. {
  136. historyImageCount = value;
  137. OnPropertyChanged("HistoryImageCount");
  138. }
  139. }
  140. /// <summary>
  141. /// 历史结果图像
  142. /// </summary>
  143. private BitmapImage historyImage;
  144. public BitmapImage HistoryImage
  145. {
  146. get { return historyImage; }
  147. set
  148. {
  149. historyImage = value;
  150. OnPropertyChanged("HistoryImage");
  151. }
  152. }
  153. /// <summary>
  154. /// 结果图像
  155. /// </summary>
  156. private BitmapImage bitmapImage;
  157. public BitmapImage BitmapImage
  158. {
  159. get { return bitmapImage; }
  160. set
  161. {
  162. bitmapImage = value;
  163. OnPropertyChanged("BitmapImage");
  164. }
  165. }
  166. /// <summary>
  167. /// 结果图像
  168. /// </summary>
  169. private BitmapImage _DebugImage;
  170. public BitmapImage DebugImage
  171. {
  172. get { return _DebugImage; }
  173. set
  174. {
  175. _DebugImage = value;
  176. OnPropertyChanged("DebugImage");
  177. }
  178. }
  179. /// <summary>
  180. /// 相机运行状态字体颜色
  181. /// </summary>
  182. private SolidColorBrush cameraStaticColor = Brushes.Red;
  183. public SolidColorBrush CameraStaticColor
  184. {
  185. get { return cameraStaticColor; }
  186. set
  187. {
  188. cameraStaticColor = value;
  189. OnPropertyChanged("CameraStaticColor");
  190. }
  191. }
  192. /// <summary>
  193. /// 配方名称
  194. /// </summary>
  195. public string FormulationName
  196. {
  197. get
  198. {
  199. if (MessageBus.NowSettingLoadMainThread != null)
  200. {
  201. return MessageBus.NowSettingLoadMainThread.FormulationName;
  202. }
  203. return "";
  204. }
  205. set
  206. {
  207. if (MessageBus.NowSettingLoadMainThread != null)
  208. {
  209. string oldValue = MessageBus.NowSettingLoadMainThread.FormulationName;
  210. MessageBus.NowSettingLoadMainThread.FormulationName = value;
  211. MessageBus.NowSettingLoadMainThread.CameraConfigIsChange = true;
  212. if (oldValue != value)
  213. FaultLog.RecordValueChangeMessage($"配方名称从{ oldValue }修改为{value}");
  214. OnPropertyChanged("FormulationName");
  215. }
  216. }
  217. }
  218. /// <summary>
  219. /// 相机曝光时间
  220. /// </summary>
  221. public string ExposureTimeValue
  222. {
  223. get
  224. {
  225. // 从MessageBus获取最新值(保证读取时同步)
  226. if (MessageBus.NowSettingLoadMainThread != null)
  227. {
  228. return MessageBus.NowSettingLoadMainThread.cameraConfig.ExposureTimeValue.ToString();
  229. }
  230. return "";
  231. }
  232. set
  233. {
  234. if (MessageBus.NowSettingLoadMainThread != null && float.TryParse(value, out float newValue))
  235. {
  236. // 同步更新到MessageBus
  237. float oldValue = MessageBus.NowSettingLoadMainThread.cameraConfig.ExposureTimeValue;
  238. MessageBus.NowSettingLoadMainThread.cameraConfig.ExposureTimeValue = newValue;
  239. MessageBus.NowSettingLoadMainThread.CameraConfigIsChange = true;
  240. MessageBus.NowSettingLoadMainThread.ReLoadCameraConfig();
  241. if (oldValue != newValue)
  242. FaultLog.RecordValueChangeMessage($"相机{MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum}的曝光时间已从{oldValue}修改为{newValue}");
  243. OnPropertyChanged("ExposureTimeValue");
  244. }
  245. }
  246. }
  247. /// <summary>
  248. /// 相机行频
  249. /// </summary>
  250. public string AcquistionLineRate
  251. {
  252. get
  253. {
  254. if (MessageBus.NowSettingLoadMainThread != null)
  255. {
  256. return MessageBus.NowSettingLoadMainThread.cameraConfig.AcquistionLineRateValue.ToString();
  257. }
  258. else
  259. {
  260. return "";
  261. }
  262. }
  263. set
  264. {
  265. if (MessageBus.NowSettingLoadMainThread != null)
  266. {
  267. try
  268. {
  269. float oldValue = MessageBus.NowSettingLoadMainThread.cameraConfig.AcquistionLineRateValue;
  270. MessageBus.NowSettingLoadMainThread.cameraConfig.AcquistionLineRateValue = int.Parse(value);
  271. MessageBus.NowSettingLoadMainThread.CameraConfigIsChange = true;
  272. MessageBus.NowSettingLoadMainThread.ReLoadCameraConfig();
  273. if (oldValue != int.Parse(value))
  274. FaultLog.RecordValueChangeMessage($"相机{MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum}的行频从{oldValue}修改为{value}");
  275. OnPropertyChanged("AcquistionLineRate");
  276. }
  277. catch (Exception)
  278. {
  279. Console.WriteLine("AcquistionLineRate-SetError");
  280. }
  281. }
  282. }
  283. }
  284. /// <summary>
  285. /// 图像宽度
  286. /// </summary>
  287. public string ImageWidth
  288. {
  289. get
  290. {
  291. if (MessageBus.NowSettingLoadMainThread != null)
  292. {
  293. return MessageBus.NowSettingLoadMainThread.cameraConfig.Width.ToString();
  294. }
  295. else
  296. {
  297. return "";
  298. }
  299. }
  300. set
  301. {
  302. if (MessageBus.NowSettingLoadMainThread != null)
  303. {
  304. try
  305. {
  306. int oldValue = MessageBus.NowSettingLoadMainThread.cameraConfig.Width;
  307. MessageBus.NowSettingLoadMainThread.cameraConfig.Width = int.Parse(value);
  308. MessageBus.NowSettingLoadMainThread.CameraConfigIsChange = true;
  309. MessageBus.NowSettingLoadMainThread.ReLoadCameraConfig();
  310. if (oldValue != int.Parse(value))
  311. FaultLog.RecordValueChangeMessage($"相机{MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum}的图像宽从{oldValue}修改为{value}");
  312. OnPropertyChanged("ImageWidth");
  313. }
  314. catch (Exception)
  315. {
  316. Console.WriteLine("ImageWidth-SetError");
  317. }
  318. }
  319. }
  320. }
  321. /// <summary>
  322. /// 相机名称(用户自定义)
  323. /// </summary>
  324. public string CamUserName
  325. {
  326. get
  327. {
  328. if (MessageBus.NowSettingLoadMainThread != null)
  329. {
  330. return MessageBus.NowSettingLoadMainThread.cameraConfig.CameraName;
  331. }
  332. else
  333. {
  334. return "";
  335. }
  336. }
  337. set
  338. {
  339. if (MessageBus.NowSettingLoadMainThread != null)
  340. {
  341. try
  342. {
  343. string oldValue = MessageBus.NowSettingLoadMainThread.cameraConfig.CameraName == "" ? "null" : MessageBus.NowSettingLoadMainThread.cameraConfig.CameraName;
  344. MessageBus.NowSettingLoadMainThread.cameraConfig.CameraName = value;
  345. MessageBus.NowSettingLoadMainThread.CameraConfigIsChange = true;
  346. MessageBus.NowSettingLoadMainThread.ReLoadCameraConfig();
  347. if (oldValue != value)
  348. FaultLog.RecordValueChangeMessage($"相机{MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum}的用户自定义名从{oldValue}修改为{value}");
  349. OnPropertyChanged("CamUserName");
  350. }
  351. catch (Exception)
  352. {
  353. Console.WriteLine("CamUserName-SetError");
  354. }
  355. }
  356. }
  357. }
  358. /// <summary>
  359. /// 图像偏移X
  360. /// </summary>
  361. public string CamOffsetX
  362. {
  363. get
  364. {
  365. if (MessageBus.NowSettingLoadMainThread != null)
  366. {
  367. return MessageBus.NowSettingLoadMainThread.cameraConfig.OffsetX.ToString();
  368. }
  369. else
  370. {
  371. return "";
  372. }
  373. }
  374. set
  375. {
  376. if (MessageBus.NowSettingLoadMainThread != null)
  377. {
  378. try
  379. {
  380. int oldValue = MessageBus.NowSettingLoadMainThread.cameraConfig.OffsetX;
  381. MessageBus.NowSettingLoadMainThread.cameraConfig.OffsetX = int.Parse(value);
  382. MessageBus.NowSettingLoadMainThread.CameraConfigIsChange = true;
  383. MessageBus.NowSettingLoadMainThread.ReLoadCameraConfig();
  384. if (oldValue != int.Parse(value))
  385. FaultLog.RecordValueChangeMessage($"相机{MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum}的图像X偏移从{oldValue}修改为{value}");
  386. OnPropertyChanged("CamOffsetX");
  387. }
  388. catch (Exception)
  389. {
  390. Console.WriteLine("CamOffsetX-SetError");
  391. }
  392. }
  393. }
  394. }
  395. /// <summary>
  396. /// 相机列表
  397. /// </summary>
  398. public ObservableCollection<CameraCoboxItem> CameraItems { get; } = new ObservableCollection<CameraCoboxItem>();
  399. public ObservableCollection<string> FormulationItems { get; } = new ObservableCollection<string>();
  400. public ObservableCollection<string> BatchItems { get; } = new ObservableCollection<string>();
  401. public ObservableCollection<string> ValueChangeItems { get; } = new ObservableCollection<string>();
  402. public ObservableCollection<string> ErrorMessItems { get; } = new ObservableCollection<string>();
  403. /// <summary>
  404. /// 当前选择的相机SN
  405. /// </summary>
  406. public string CameraSNNum
  407. {
  408. get
  409. {
  410. if (MessageBus.NowSettingLoadMainThread != null)
  411. {
  412. return MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum.ToString();
  413. }
  414. else
  415. {
  416. return "";
  417. }
  418. }
  419. set
  420. {
  421. if (MessageBus.NowSettingLoadMainThread != null)
  422. {
  423. try
  424. {
  425. string oldValue = MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum;
  426. MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum = value;
  427. MessageBus.NowSettingLoadMainThread.shuLiConfig.CameraSN = value;
  428. MessageBus.NowSettingLoadMainThread.CameraConfigIsChange = true;
  429. FaultLog.RecordValueChangeMessage($"相机{MessageBus.NowSettingLoadMainThread.cameraConfig.CamerNo}的SN从{oldValue}修改为{value}");
  430. OnPropertyChanged("CameraSNNum");
  431. }
  432. catch (Exception)
  433. {
  434. Console.WriteLine("CameraSNNum-SetError");
  435. }
  436. }
  437. }
  438. }
  439. /// <summary>
  440. /// 预处理阈值
  441. /// </summary>
  442. public string RegionThreshold
  443. {
  444. get
  445. {
  446. if (MessageBus.NowSettingLoadMainThread != null)
  447. {
  448. return MessageBus.NowSettingLoadMainThread.shuLiConfig.RegionThreshold.ToString();
  449. }
  450. else
  451. {
  452. return "";
  453. }
  454. }
  455. set
  456. {
  457. if (MessageBus.NowSettingLoadMainThread != null)
  458. {
  459. try
  460. {
  461. int oldValue = MessageBus.NowSettingLoadMainThread.shuLiConfig.RegionThreshold;
  462. MessageBus.NowSettingLoadMainThread.shuLiConfig.RegionThreshold = int.Parse(value);
  463. if (oldValue != int.Parse(value))
  464. FaultLog.RecordValueChangeMessage($"数粒识别{MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum}的预处理阈值从{oldValue}修改为{value}");
  465. OnPropertyChanged("RegionThreshold");
  466. }
  467. catch (Exception)
  468. {
  469. Console.WriteLine("RegionThreshold-SetError");
  470. }
  471. }
  472. }
  473. }
  474. /// <summary>
  475. /// 数粒通道数
  476. /// </summary>
  477. public string Channel
  478. {
  479. get
  480. {
  481. if (MessageBus.NowSettingLoadMainThread != null)
  482. {
  483. return MessageBus.NowSettingLoadMainThread.shuLiConfig.Channel.ToString();
  484. }
  485. else
  486. {
  487. return "";
  488. }
  489. }
  490. set
  491. {
  492. if (MessageBus.NowSettingLoadMainThread != null)
  493. {
  494. try
  495. {
  496. int oldValue = MessageBus.NowSettingLoadMainThread.shuLiConfig.Channel;
  497. MessageBus.NowSettingLoadMainThread.shuLiConfig.Channel = int.Parse(value);
  498. if (oldValue != int.Parse(value))
  499. FaultLog.RecordValueChangeMessage($"数粒识别{MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum}的通道数从{oldValue}修改为{value}");
  500. OnPropertyChanged("Channel");
  501. }
  502. catch (Exception)
  503. {
  504. Console.WriteLine("Channel-SetError");
  505. }
  506. }
  507. }
  508. }
  509. /// <summary>
  510. /// 噪声滤波阈值
  511. /// </summary>
  512. public string NoiseFilter
  513. {
  514. get
  515. {
  516. if (MessageBus.NowSettingLoadMainThread != null)
  517. {
  518. return MessageBus.NowSettingLoadMainThread.shuLiConfig.NoiseFilter_Threshold.ToString();
  519. }
  520. else
  521. {
  522. return "";
  523. }
  524. }
  525. set
  526. {
  527. if (MessageBus.NowSettingLoadMainThread != null)
  528. {
  529. try
  530. {
  531. int oldValue = MessageBus.NowSettingLoadMainThread.shuLiConfig.NoiseFilter_Threshold;
  532. MessageBus.NowSettingLoadMainThread.shuLiConfig.NoiseFilter_Threshold = int.Parse(value);
  533. if (oldValue != int.Parse(value))
  534. FaultLog.RecordValueChangeMessage($"数粒识别{MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum}的噪声滤波阈值从{oldValue}修改为{value}");
  535. OnPropertyChanged("NoiseFilter");
  536. }
  537. catch (Exception)
  538. {
  539. Console.WriteLine("NoiseFilter-SetError");
  540. }
  541. }
  542. }
  543. }
  544. /// <summary>
  545. /// 合格粒最小宽
  546. /// </summary>
  547. public string MIN_OBJECT_WIDTH
  548. {
  549. get
  550. {
  551. if (MessageBus.NowSettingLoadMainThread != null)
  552. {
  553. return MessageBus.NowSettingLoadMainThread.shuLiConfig.MIN_OBJECT_WIDTH.ToString();
  554. }
  555. else
  556. {
  557. return "";
  558. }
  559. }
  560. set
  561. {
  562. if (MessageBus.NowSettingLoadMainThread != null)
  563. {
  564. try
  565. {
  566. int oldValue = MessageBus.NowSettingLoadMainThread.shuLiConfig.MIN_OBJECT_WIDTH;
  567. MessageBus.NowSettingLoadMainThread.shuLiConfig.MIN_OBJECT_WIDTH = int.Parse(value);
  568. if (oldValue != int.Parse(value))
  569. FaultLog.RecordValueChangeMessage($"数粒识别{MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum}的异常粒最小宽从{oldValue}修改为{value}");
  570. OnPropertyChanged("MIN_OBJECT_WIDTH");
  571. }
  572. catch (Exception)
  573. {
  574. Console.WriteLine("MIN_OBJECT_WIDTH-SetError");
  575. }
  576. }
  577. }
  578. }
  579. /// <summary>
  580. /// 合格粒最大宽
  581. /// </summary>
  582. public string MAX_OBJECT_WIDTH
  583. {
  584. get
  585. {
  586. if (MessageBus.NowSettingLoadMainThread != null)
  587. {
  588. return MessageBus.NowSettingLoadMainThread.shuLiConfig.MAX_OBJECT_WIDTH.ToString();
  589. }
  590. else
  591. {
  592. return "";
  593. }
  594. }
  595. set
  596. {
  597. if (MessageBus.NowSettingLoadMainThread != null)
  598. {
  599. try
  600. {
  601. int oldValue = MessageBus.NowSettingLoadMainThread.shuLiConfig.MAX_OBJECT_WIDTH;
  602. MessageBus.NowSettingLoadMainThread.shuLiConfig.MAX_OBJECT_WIDTH = int.Parse(value);
  603. if (oldValue != int.Parse(value))
  604. FaultLog.RecordValueChangeMessage($"数粒识别{MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum}的异常粒最大宽从{oldValue}修改为{value}");
  605. OnPropertyChanged("MAX_OBJECT_WIDTH");
  606. }
  607. catch (Exception)
  608. {
  609. Console.WriteLine("MAX_OBJECT_WIDTH-SetError");
  610. }
  611. }
  612. }
  613. }
  614. /// <summary>
  615. /// 合格粒最小高
  616. /// </summary>
  617. public string MIN_OBJECT_HEIGHT
  618. {
  619. get
  620. {
  621. if (MessageBus.NowSettingLoadMainThread != null)
  622. {
  623. return MessageBus.NowSettingLoadMainThread.shuLiConfig.MIN_OBJECT_HEIGHT.ToString();
  624. }
  625. else
  626. {
  627. return "";
  628. }
  629. }
  630. set
  631. {
  632. if (MessageBus.NowSettingLoadMainThread != null)
  633. {
  634. try
  635. {
  636. int oldValue = MessageBus.NowSettingLoadMainThread.shuLiConfig.MIN_OBJECT_HEIGHT;
  637. MessageBus.NowSettingLoadMainThread.shuLiConfig.MIN_OBJECT_HEIGHT = int.Parse(value);
  638. if (oldValue != int.Parse(value))
  639. FaultLog.RecordValueChangeMessage($"数粒识别{MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum}的异常粒最小高从{oldValue}修改为{value}");
  640. OnPropertyChanged("MIN_OBJECT_HEIGHT");
  641. }
  642. catch (Exception)
  643. {
  644. Console.WriteLine("MIN_OBJECT_HEIGHT-SetError");
  645. }
  646. }
  647. }
  648. }
  649. /// <summary>
  650. /// 合格粒最大高
  651. /// </summary>
  652. public string MAX_OBJECT_HEIGHT
  653. {
  654. get
  655. {
  656. if (MessageBus.NowSettingLoadMainThread != null)
  657. {
  658. return MessageBus.NowSettingLoadMainThread.shuLiConfig.MAX_OBJECT_HEIGHT.ToString();
  659. }
  660. else
  661. {
  662. return "";
  663. }
  664. }
  665. set
  666. {
  667. if (MessageBus.NowSettingLoadMainThread != null)
  668. {
  669. try
  670. {
  671. int oldValue = MessageBus.NowSettingLoadMainThread.shuLiConfig.MAX_OBJECT_HEIGHT;
  672. MessageBus.NowSettingLoadMainThread.shuLiConfig.MAX_OBJECT_HEIGHT = int.Parse(value);
  673. if (oldValue != int.Parse(value))
  674. FaultLog.RecordValueChangeMessage($"数粒识别{MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum}的异常粒最大高从{oldValue}修改为{value}");
  675. OnPropertyChanged("MAX_OBJECT_HEIGHT");
  676. }
  677. catch (Exception)
  678. {
  679. Console.WriteLine("MAX_OBJECT_HEIGHT-SetError");
  680. }
  681. }
  682. }
  683. }
  684. /// <summary>
  685. /// 合格粒最长长度
  686. /// </summary>
  687. public string MAX_OBJECT_LENGTH
  688. {
  689. get
  690. {
  691. if (MessageBus.NowSettingLoadMainThread != null)
  692. {
  693. return MessageBus.NowSettingLoadMainThread.shuLiConfig.MAX_Object_LENGTH.ToString();
  694. }
  695. else
  696. {
  697. return "";
  698. }
  699. }
  700. set
  701. {
  702. if (MessageBus.NowSettingLoadMainThread != null)
  703. {
  704. try
  705. {
  706. int oldValue = MessageBus.NowSettingLoadMainThread.shuLiConfig.MAX_Object_LENGTH;
  707. MessageBus.NowSettingLoadMainThread.shuLiConfig.MAX_Object_LENGTH = int.Parse(value);
  708. if (oldValue != int.Parse(value))
  709. FaultLog.RecordValueChangeMessage($"数粒识别{MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum}的合格粒最长长度从{oldValue}修改为{value}");
  710. OnPropertyChanged("MAX_Object_LENGTH");
  711. }
  712. catch (Exception)
  713. {
  714. Console.WriteLine("MAX_Object_LENGTH-SetError");
  715. }
  716. }
  717. }
  718. }
  719. /// <summary>
  720. /// 合格粒最短长度
  721. /// </summary>
  722. public string MIN_OBJECT_LENGTH
  723. {
  724. get
  725. {
  726. if (MessageBus.NowSettingLoadMainThread != null)
  727. {
  728. return MessageBus.NowSettingLoadMainThread.shuLiConfig.MIN_Object_LENGTH.ToString();
  729. }
  730. else
  731. {
  732. return "";
  733. }
  734. }
  735. set
  736. {
  737. if (MessageBus.NowSettingLoadMainThread != null)
  738. {
  739. try
  740. {
  741. int oldValue = MessageBus.NowSettingLoadMainThread.shuLiConfig.MIN_Object_LENGTH;
  742. MessageBus.NowSettingLoadMainThread.shuLiConfig.MIN_Object_LENGTH = int.Parse(value);
  743. if (oldValue != int.Parse(value))
  744. FaultLog.RecordValueChangeMessage($"数粒识别{MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum}的合格粒的最短长度从{oldValue}修改为{value}");
  745. OnPropertyChanged("MIN_Object_LENGTH");
  746. }
  747. catch (Exception)
  748. {
  749. Console.WriteLine("MIN_Object_LENGTH-SetError");
  750. }
  751. }
  752. }
  753. }
  754. /// <summary>
  755. /// 合格粒最小面积
  756. /// </summary>
  757. public string MinArea
  758. {
  759. get
  760. {
  761. if (MessageBus.NowSettingLoadMainThread != null)
  762. {
  763. return MessageBus.NowSettingLoadMainThread.shuLiConfig.MinArea.ToString();
  764. }
  765. else
  766. {
  767. return "";
  768. }
  769. }
  770. set
  771. {
  772. if (MessageBus.NowSettingLoadMainThread != null)
  773. {
  774. try
  775. {
  776. int oldValue = MessageBus.NowSettingLoadMainThread.shuLiConfig.MinArea;
  777. MessageBus.NowSettingLoadMainThread.shuLiConfig.MinArea = int.Parse(value);
  778. if (oldValue != int.Parse(value))
  779. FaultLog.RecordValueChangeMessage($"数粒识别{MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum}的异常粒最小面积从{oldValue}修改为{value}");
  780. OnPropertyChanged("MinArea");
  781. }
  782. catch (Exception)
  783. {
  784. Console.WriteLine("MinArea-SetError");
  785. }
  786. }
  787. }
  788. }
  789. /// <summary>
  790. /// 合格粒最大面积
  791. /// </summary>
  792. public string MaxArea
  793. {
  794. get
  795. {
  796. if (MessageBus.NowSettingLoadMainThread != null)
  797. {
  798. return MessageBus.NowSettingLoadMainThread.shuLiConfig.MaxArea.ToString();
  799. }
  800. else
  801. {
  802. return "";
  803. }
  804. }
  805. set
  806. {
  807. if (MessageBus.NowSettingLoadMainThread != null)
  808. {
  809. try
  810. {
  811. int oldValue = MessageBus.NowSettingLoadMainThread.shuLiConfig.MaxArea;
  812. MessageBus.NowSettingLoadMainThread.shuLiConfig.MaxArea = int.Parse(value);
  813. if (oldValue != int.Parse(value))
  814. FaultLog.RecordValueChangeMessage($"数粒识别{MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum}的异常粒最大面积从{oldValue}修改为{value}");
  815. OnPropertyChanged("MaxArea");
  816. }
  817. catch (Exception)
  818. {
  819. Console.WriteLine("MaxArea-SetError");
  820. }
  821. }
  822. }
  823. }
  824. /// <summary>
  825. /// 合格粒最大面积
  826. /// </summary>
  827. public string XCoefficient
  828. {
  829. get
  830. {
  831. if (MessageBus.NowSettingLoadMainThread != null)
  832. {
  833. return MessageBus.NowSettingLoadMainThread.XCoefficient.ToString();
  834. }
  835. else
  836. {
  837. return "";
  838. }
  839. }
  840. set
  841. {
  842. if (MessageBus.NowSettingLoadMainThread != null)
  843. {
  844. try
  845. {
  846. double oldValue = MessageBus.NowSettingLoadMainThread.XCoefficient;
  847. MessageBus.NowSettingLoadMainThread.XCoefficient = double.Parse(value);
  848. if (oldValue != double.Parse(value))
  849. FaultLog.RecordValueChangeMessage($"数粒识别{MessageBus.NowSettingLoadMainThread.XCoefficient}的X轴系数从{oldValue}修改为{value}");
  850. OnPropertyChanged("XCoefficient");
  851. }
  852. catch (Exception)
  853. {
  854. Console.WriteLine("XCoefficient-SetError");
  855. }
  856. }
  857. }
  858. }
  859. /// <summary>
  860. /// 异常粒识别码
  861. /// </summary>
  862. public string PandingCode
  863. {
  864. get
  865. {
  866. if (MessageBus.NowSettingLoadMainThread != null)
  867. {
  868. return MessageBus.NowSettingLoadMainThread.shuLiConfig.MaxArea.ToString();
  869. }
  870. else
  871. {
  872. return "";
  873. }
  874. }
  875. set
  876. {
  877. if (MessageBus.NowSettingLoadMainThread != null)
  878. {
  879. try
  880. {
  881. int oldValue = MessageBus.NowSettingLoadMainThread.shuLiConfig.PandingCode;
  882. if(oldValue != int.Parse(value))
  883. {
  884. MessageBus.NowSettingLoadMainThread.shuLiConfig.PandingCode = int.Parse(value);
  885. if (oldValue != int.Parse(value))
  886. FaultLog.RecordValueChangeMessage($"数粒识别{MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum}的判断标准识别码从{oldValue}修改为{value}");
  887. }
  888. OnPropertyChanged("PandingCode");
  889. }
  890. catch (Exception)
  891. {
  892. Console.WriteLine("PandingCode-SetError");
  893. }
  894. }
  895. }
  896. }
  897. /// <summary>
  898. /// 错误信息列表
  899. /// </summary>
  900. private List<ErroeMesDataModelClass> errMessageList = new List<ErroeMesDataModelClass>();
  901. public List<ErroeMesDataModelClass> ErrMessageShowList
  902. {
  903. get { return errMessageList; }
  904. set
  905. {
  906. errMessageList = value;
  907. OnPropertyChanged("errMessageList");
  908. }
  909. }
  910. private string showErrMessage = "";
  911. public string ShowErrMessage
  912. {
  913. get { return showErrMessage; }
  914. set
  915. {
  916. showErrMessage = value;
  917. OnPropertyChanged("showErrMessage");
  918. }
  919. }
  920. /// <summary>
  921. /// 用户数据信息列表
  922. /// </summary>
  923. private List<UserMesDataModelClass> userMesDataModels = new List<UserMesDataModelClass>();
  924. public List<UserMesDataModelClass> UserMesDataModels
  925. {
  926. get { return userMesDataModels; }
  927. set
  928. {
  929. userMesDataModels = value;
  930. OnPropertyChanged("userMesDataModels");
  931. }
  932. }
  933. private string batchNumber = "";
  934. public string BatchNumber
  935. {
  936. get { return batchNumber; }
  937. set
  938. {
  939. batchNumber = value;
  940. OnPropertyChanged("BatchNumber");
  941. }
  942. }
  943. private int bottingCount;
  944. public int BottingCount
  945. {
  946. get { return bottingCount; }
  947. set
  948. {
  949. bottingCount = value;
  950. OnPropertyChanged("BottingCount");
  951. }
  952. }
  953. private ushort bottingSpeed;
  954. public ushort BottingSpeed
  955. {
  956. get { return bottingSpeed; }
  957. set
  958. {
  959. bottingSpeed = value;
  960. OnPropertyChanged("BottingSpeed");
  961. }
  962. }
  963. //数据绑定核心实现
  964. public event PropertyChangedEventHandler PropertyChanged;
  965. protected void OnPropertyChanged(string propertyName)
  966. {
  967. PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
  968. }
  969. }
  970. }