ShowBindingClass.cs 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995
  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. /// 缩略图1
  181. /// </summary>
  182. private BitmapImage thumbnailImage1;
  183. public BitmapImage ThumbnailImage1
  184. {
  185. get { return thumbnailImage1; }
  186. set
  187. {
  188. thumbnailImage1 = value;
  189. OnPropertyChanged("ThumbnailImage1");
  190. }
  191. }
  192. // <summary>
  193. /// 缩略图2
  194. /// </summary>
  195. private BitmapImage thumbnailImage2;
  196. public BitmapImage ThumbnailImage2
  197. {
  198. get { return thumbnailImage2; }
  199. set
  200. {
  201. thumbnailImage2 = value;
  202. OnPropertyChanged("ThumbnailImage2");
  203. }
  204. }
  205. // <summary>
  206. /// 缩略图3
  207. /// </summary>
  208. private BitmapImage thumbnailImage3;
  209. public BitmapImage ThumbnailImage3
  210. {
  211. get { return thumbnailImage3; }
  212. set
  213. {
  214. thumbnailImage3 = value;
  215. OnPropertyChanged("ThumbnailImage3");
  216. }
  217. }
  218. // <summary>
  219. /// 缩略图4
  220. /// </summary>
  221. private BitmapImage thumbnailImage4;
  222. public BitmapImage ThumbnailImage4
  223. {
  224. get { return thumbnailImage4; }
  225. set
  226. {
  227. thumbnailImage4 = value;
  228. OnPropertyChanged("ThumbnailImage4");
  229. }
  230. }
  231. /// <summary>
  232. /// 相机运行状态字体颜色
  233. /// </summary>
  234. private SolidColorBrush cameraStaticColor = Brushes.Red;
  235. public SolidColorBrush CameraStaticColor
  236. {
  237. get { return cameraStaticColor; }
  238. set
  239. {
  240. cameraStaticColor = value;
  241. OnPropertyChanged("CameraStaticColor");
  242. }
  243. }
  244. /// <summary>
  245. /// 配方名称
  246. /// </summary>
  247. public string FormulationName
  248. {
  249. get
  250. {
  251. if (MessageBus.NowSettingLoadMainThread != null)
  252. {
  253. return MessageBus.NowSettingLoadMainThread.FormulationName;
  254. }
  255. return "";
  256. }
  257. set
  258. {
  259. if (MessageBus.NowSettingLoadMainThread != null)
  260. {
  261. MessageBus.NowSettingLoadMainThread.FormulationName = value;
  262. MessageBus.NowSettingLoadMainThread.CameraConfigIsChange = true;
  263. OnPropertyChanged("FormulationName");
  264. }
  265. }
  266. }
  267. /// <summary>
  268. /// 相机曝光时间
  269. /// </summary>
  270. public string ExposureTimeValue
  271. {
  272. get
  273. {
  274. // 从MessageBus获取最新值(保证读取时同步)
  275. if (MessageBus.NowSettingLoadMainThread != null)
  276. {
  277. return MessageBus.NowSettingLoadMainThread.cameraConfig.ExposureTimeValue.ToString();
  278. }
  279. return "";
  280. }
  281. set
  282. {
  283. if (MessageBus.NowSettingLoadMainThread != null && float.TryParse(value, out float newValue))
  284. {
  285. // 同步更新到MessageBus
  286. float oldValue = MessageBus.NowSettingLoadMainThread.cameraConfig.ExposureTimeValue;
  287. MessageBus.NowSettingLoadMainThread.cameraConfig.ExposureTimeValue = newValue;
  288. MessageBus.NowSettingLoadMainThread.CameraConfigIsChange = true;
  289. MessageBus.NowSettingLoadMainThread.ReLoadCameraConfig();
  290. FaultLog.RecordValueChangeMessage($"相机{MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum}的曝光时间已从{oldValue}修改为{newValue}");
  291. OnPropertyChanged("ExposureTimeValue");
  292. }
  293. }
  294. }
  295. /// <summary>
  296. /// 相机行频
  297. /// </summary>
  298. public string AcquistionLineRate
  299. {
  300. get
  301. {
  302. if (MessageBus.NowSettingLoadMainThread != null)
  303. {
  304. return MessageBus.NowSettingLoadMainThread.cameraConfig.AcquistionLineRateValue.ToString();
  305. }
  306. else
  307. {
  308. return "";
  309. }
  310. }
  311. set
  312. {
  313. if (MessageBus.NowSettingLoadMainThread != null)
  314. {
  315. try
  316. {
  317. float oldValue = MessageBus.NowSettingLoadMainThread.cameraConfig.AcquistionLineRateValue;
  318. MessageBus.NowSettingLoadMainThread.cameraConfig.AcquistionLineRateValue = int.Parse(value);
  319. MessageBus.NowSettingLoadMainThread.CameraConfigIsChange = true;
  320. MessageBus.NowSettingLoadMainThread.ReLoadCameraConfig();
  321. FaultLog.RecordValueChangeMessage($"相机{MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum}的行频从{oldValue}修改为{value}");
  322. OnPropertyChanged("AcquistionLineRate");
  323. }
  324. catch (Exception)
  325. {
  326. Console.WriteLine("AcquistionLineRate-SetError");
  327. }
  328. }
  329. }
  330. }
  331. /// <summary>
  332. /// 图像宽度
  333. /// </summary>
  334. public string ImageWidth
  335. {
  336. get
  337. {
  338. if (MessageBus.NowSettingLoadMainThread != null)
  339. {
  340. return MessageBus.NowSettingLoadMainThread.cameraConfig.Width.ToString();
  341. }
  342. else
  343. {
  344. return "";
  345. }
  346. }
  347. set
  348. {
  349. if (MessageBus.NowSettingLoadMainThread != null)
  350. {
  351. try
  352. {
  353. int oldValue = MessageBus.NowSettingLoadMainThread.cameraConfig.Width;
  354. MessageBus.NowSettingLoadMainThread.cameraConfig.Width = int.Parse(value);
  355. MessageBus.NowSettingLoadMainThread.CameraConfigIsChange = true;
  356. MessageBus.NowSettingLoadMainThread.ReLoadCameraConfig();
  357. FaultLog.RecordValueChangeMessage($"相机{MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum}的图像宽从{oldValue}修改为{value}");
  358. OnPropertyChanged("ImageWidth");
  359. }
  360. catch (Exception)
  361. {
  362. Console.WriteLine("ImageWidth-SetError");
  363. }
  364. }
  365. }
  366. }
  367. /// <summary>
  368. /// 相机名称(用户自定义)
  369. /// </summary>
  370. public string CamUserName
  371. {
  372. get
  373. {
  374. if (MessageBus.NowSettingLoadMainThread != null)
  375. {
  376. return MessageBus.NowSettingLoadMainThread.cameraConfig.CameraName;
  377. }
  378. else
  379. {
  380. return "";
  381. }
  382. }
  383. set
  384. {
  385. if (MessageBus.NowSettingLoadMainThread != null)
  386. {
  387. try
  388. {
  389. string oldValue = MessageBus.NowSettingLoadMainThread.cameraConfig.CameraName == "" ? "null" : MessageBus.NowSettingLoadMainThread.cameraConfig.CameraName;
  390. MessageBus.NowSettingLoadMainThread.cameraConfig.CameraName = value;
  391. MessageBus.NowSettingLoadMainThread.CameraConfigIsChange = true;
  392. MessageBus.NowSettingLoadMainThread.ReLoadCameraConfig();
  393. FaultLog.RecordValueChangeMessage($"相机{MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum}的用户自定义名从{oldValue}修改为{value}");
  394. OnPropertyChanged("CamUserName");
  395. }
  396. catch (Exception)
  397. {
  398. Console.WriteLine("CamUserName-SetError");
  399. }
  400. }
  401. }
  402. }
  403. /// <summary>
  404. /// 图像偏移X
  405. /// </summary>
  406. public string CamOffsetX
  407. {
  408. get
  409. {
  410. if (MessageBus.NowSettingLoadMainThread != null)
  411. {
  412. return MessageBus.NowSettingLoadMainThread.cameraConfig.OffsetX.ToString();
  413. }
  414. else
  415. {
  416. return "";
  417. }
  418. }
  419. set
  420. {
  421. if (MessageBus.NowSettingLoadMainThread != null)
  422. {
  423. try
  424. {
  425. int oldValue = MessageBus.NowSettingLoadMainThread.cameraConfig.OffsetX;
  426. MessageBus.NowSettingLoadMainThread.cameraConfig.OffsetX = int.Parse(value);
  427. MessageBus.NowSettingLoadMainThread.CameraConfigIsChange = true;
  428. MessageBus.NowSettingLoadMainThread.ReLoadCameraConfig();
  429. FaultLog.RecordValueChangeMessage($"相机{MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum}的图像X偏移从{oldValue}修改为{value}");
  430. OnPropertyChanged("CamOffsetX");
  431. }
  432. catch (Exception)
  433. {
  434. Console.WriteLine("CamOffsetX-SetError");
  435. }
  436. }
  437. }
  438. }
  439. /// <summary>
  440. /// 相机列表
  441. /// </summary>
  442. public ObservableCollection<CameraCoboxItem> CameraItems { get; } = new ObservableCollection<CameraCoboxItem>();
  443. public ObservableCollection<string> FormulationItems { get; } = new ObservableCollection<string>();
  444. /// <summary>
  445. /// 当前选择的相机SN
  446. /// </summary>
  447. public string CameraSNNum
  448. {
  449. get
  450. {
  451. if (MessageBus.NowSettingLoadMainThread != null)
  452. {
  453. return MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum.ToString();
  454. }
  455. else
  456. {
  457. return "";
  458. }
  459. }
  460. set
  461. {
  462. if (MessageBus.NowSettingLoadMainThread != null)
  463. {
  464. try
  465. {
  466. string oldValue = MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum;
  467. MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum = value;
  468. MessageBus.NowSettingLoadMainThread.shuLiConfig.CameraSN = value;
  469. MessageBus.NowSettingLoadMainThread.CameraConfigIsChange = true;
  470. FaultLog.RecordValueChangeMessage($"相机{MessageBus.NowSettingLoadMainThread.cameraConfig.CamerNo}的SN从{oldValue}修改为{value}");
  471. OnPropertyChanged("CameraSNNum");
  472. }
  473. catch (Exception)
  474. {
  475. Console.WriteLine("CameraSNNum-SetError");
  476. }
  477. }
  478. }
  479. }
  480. /// <summary>
  481. /// 预处理阈值
  482. /// </summary>
  483. public string RegionThreshold
  484. {
  485. get
  486. {
  487. if (MessageBus.NowSettingLoadMainThread != null)
  488. {
  489. return MessageBus.NowSettingLoadMainThread.shuLiConfig.RegionThreshold.ToString();
  490. }
  491. else
  492. {
  493. return "";
  494. }
  495. }
  496. set
  497. {
  498. if (MessageBus.NowSettingLoadMainThread != null)
  499. {
  500. try
  501. {
  502. int oldValue = MessageBus.NowSettingLoadMainThread.shuLiConfig.RegionThreshold;
  503. MessageBus.NowSettingLoadMainThread.shuLiConfig.RegionThreshold = int.Parse(value);
  504. FaultLog.RecordValueChangeMessage($"数粒识别{MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum}的预处理阈值从{oldValue}修改为{value}");
  505. OnPropertyChanged("RegionThreshold");
  506. }
  507. catch (Exception)
  508. {
  509. Console.WriteLine("RegionThreshold-SetError");
  510. }
  511. }
  512. }
  513. }
  514. /// <summary>
  515. /// 数粒通道数
  516. /// </summary>
  517. public string Channel
  518. {
  519. get
  520. {
  521. if (MessageBus.NowSettingLoadMainThread != null)
  522. {
  523. return MessageBus.NowSettingLoadMainThread.shuLiConfig.Channel.ToString();
  524. }
  525. else
  526. {
  527. return "";
  528. }
  529. }
  530. set
  531. {
  532. if (MessageBus.NowSettingLoadMainThread != null)
  533. {
  534. try
  535. {
  536. int oldValue = MessageBus.NowSettingLoadMainThread.shuLiConfig.Channel;
  537. MessageBus.NowSettingLoadMainThread.shuLiConfig.Channel = int.Parse(value);
  538. FaultLog.RecordValueChangeMessage($"数粒识别{MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum}的通道数从{oldValue}修改为{value}");
  539. OnPropertyChanged("Channel");
  540. }
  541. catch (Exception)
  542. {
  543. Console.WriteLine("Channel-SetError");
  544. }
  545. }
  546. }
  547. }
  548. /// <summary>
  549. /// 噪声滤波阈值
  550. /// </summary>
  551. public string NoiseFilter
  552. {
  553. get
  554. {
  555. if (MessageBus.NowSettingLoadMainThread != null)
  556. {
  557. return MessageBus.NowSettingLoadMainThread.shuLiConfig.NoiseFilter_Threshold.ToString();
  558. }
  559. else
  560. {
  561. return "";
  562. }
  563. }
  564. set
  565. {
  566. if (MessageBus.NowSettingLoadMainThread != null)
  567. {
  568. try
  569. {
  570. int oldValue = MessageBus.NowSettingLoadMainThread.shuLiConfig.NoiseFilter_Threshold;
  571. MessageBus.NowSettingLoadMainThread.shuLiConfig.NoiseFilter_Threshold = int.Parse(value);
  572. FaultLog.RecordValueChangeMessage($"数粒识别{MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum}的噪声滤波阈值从{oldValue}修改为{value}");
  573. OnPropertyChanged("NoiseFilter");
  574. }
  575. catch (Exception)
  576. {
  577. Console.WriteLine("NoiseFilter-SetError");
  578. }
  579. }
  580. }
  581. }
  582. /// <summary>
  583. /// 合格粒最小宽
  584. /// </summary>
  585. public string MIN_OBJECT_WIDTH
  586. {
  587. get
  588. {
  589. if (MessageBus.NowSettingLoadMainThread != null)
  590. {
  591. return MessageBus.NowSettingLoadMainThread.shuLiConfig.MIN_OBJECT_WIDTH.ToString();
  592. }
  593. else
  594. {
  595. return "";
  596. }
  597. }
  598. set
  599. {
  600. if (MessageBus.NowSettingLoadMainThread != null)
  601. {
  602. try
  603. {
  604. int oldValue = MessageBus.NowSettingLoadMainThread.shuLiConfig.MIN_OBJECT_WIDTH;
  605. MessageBus.NowSettingLoadMainThread.shuLiConfig.MIN_OBJECT_WIDTH = int.Parse(value);
  606. FaultLog.RecordValueChangeMessage($"数粒识别{MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum}的异常粒最小宽从{oldValue}修改为{value}");
  607. OnPropertyChanged("MIN_OBJECT_WIDTH");
  608. }
  609. catch (Exception)
  610. {
  611. Console.WriteLine("MIN_OBJECT_WIDTH-SetError");
  612. }
  613. }
  614. }
  615. }
  616. /// <summary>
  617. /// 合格粒最大宽
  618. /// </summary>
  619. public string MAX_OBJECT_WIDTH
  620. {
  621. get
  622. {
  623. if (MessageBus.NowSettingLoadMainThread != null)
  624. {
  625. return MessageBus.NowSettingLoadMainThread.shuLiConfig.MAX_OBJECT_WIDTH.ToString();
  626. }
  627. else
  628. {
  629. return "";
  630. }
  631. }
  632. set
  633. {
  634. if (MessageBus.NowSettingLoadMainThread != null)
  635. {
  636. try
  637. {
  638. int oldValue = MessageBus.NowSettingLoadMainThread.shuLiConfig.MAX_OBJECT_WIDTH;
  639. MessageBus.NowSettingLoadMainThread.shuLiConfig.MAX_OBJECT_WIDTH = int.Parse(value);
  640. FaultLog.RecordValueChangeMessage($"数粒识别{MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum}的异常粒最大宽从{oldValue}修改为{value}");
  641. OnPropertyChanged("MAX_OBJECT_WIDTH");
  642. }
  643. catch (Exception)
  644. {
  645. Console.WriteLine("MAX_OBJECT_WIDTH-SetError");
  646. }
  647. }
  648. }
  649. }
  650. /// <summary>
  651. /// 合格粒最小高
  652. /// </summary>
  653. public string MIN_OBJECT_HEIGHT
  654. {
  655. get
  656. {
  657. if (MessageBus.NowSettingLoadMainThread != null)
  658. {
  659. return MessageBus.NowSettingLoadMainThread.shuLiConfig.MIN_OBJECT_HEIGHT.ToString();
  660. }
  661. else
  662. {
  663. return "";
  664. }
  665. }
  666. set
  667. {
  668. if (MessageBus.NowSettingLoadMainThread != null)
  669. {
  670. try
  671. {
  672. int oldValue = MessageBus.NowSettingLoadMainThread.shuLiConfig.MIN_OBJECT_HEIGHT;
  673. MessageBus.NowSettingLoadMainThread.shuLiConfig.MIN_OBJECT_HEIGHT = int.Parse(value);
  674. FaultLog.RecordValueChangeMessage($"数粒识别{MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum}的异常粒最小高从{oldValue}修改为{value}");
  675. OnPropertyChanged("MIN_OBJECT_HEIGHT");
  676. }
  677. catch (Exception)
  678. {
  679. Console.WriteLine("MIN_OBJECT_HEIGHT-SetError");
  680. }
  681. }
  682. }
  683. }
  684. /// <summary>
  685. /// 合格粒最大高
  686. /// </summary>
  687. public string MAX_OBJECT_HEIGHT
  688. {
  689. get
  690. {
  691. if (MessageBus.NowSettingLoadMainThread != null)
  692. {
  693. return MessageBus.NowSettingLoadMainThread.shuLiConfig.MAX_OBJECT_HEIGHT.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_HEIGHT;
  707. MessageBus.NowSettingLoadMainThread.shuLiConfig.MAX_OBJECT_HEIGHT = int.Parse(value);
  708. FaultLog.RecordValueChangeMessage($"数粒识别{MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum}的异常粒最大高从{oldValue}修改为{value}");
  709. OnPropertyChanged("MAX_OBJECT_HEIGHT");
  710. }
  711. catch (Exception)
  712. {
  713. Console.WriteLine("MAX_OBJECT_HEIGHT-SetError");
  714. }
  715. }
  716. }
  717. }
  718. /// <summary>
  719. /// 合格粒最长长度
  720. /// </summary>
  721. public string MAX_OBJECT_LENGTH
  722. {
  723. get
  724. {
  725. if (MessageBus.NowSettingLoadMainThread != null)
  726. {
  727. return MessageBus.NowSettingLoadMainThread.shuLiConfig.MAX_Object_LENGTH.ToString();
  728. }
  729. else
  730. {
  731. return "";
  732. }
  733. }
  734. set
  735. {
  736. if (MessageBus.NowSettingLoadMainThread != null)
  737. {
  738. try
  739. {
  740. int oldValue = MessageBus.NowSettingLoadMainThread.shuLiConfig.MAX_Object_LENGTH;
  741. MessageBus.NowSettingLoadMainThread.shuLiConfig.MAX_Object_LENGTH = int.Parse(value);
  742. FaultLog.RecordValueChangeMessage($"数粒识别{MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum}的合格粒最长长度从{oldValue}修改为{value}");
  743. OnPropertyChanged("MAX_Object_LENGTH");
  744. }
  745. catch (Exception)
  746. {
  747. Console.WriteLine("MAX_Object_LENGTH-SetError");
  748. }
  749. }
  750. }
  751. }
  752. /// <summary>
  753. /// 合格粒最短长度
  754. /// </summary>
  755. public string MIN_OBJECT_LENGTH
  756. {
  757. get
  758. {
  759. if (MessageBus.NowSettingLoadMainThread != null)
  760. {
  761. return MessageBus.NowSettingLoadMainThread.shuLiConfig.MIN_Object_LENGTH.ToString();
  762. }
  763. else
  764. {
  765. return "";
  766. }
  767. }
  768. set
  769. {
  770. if (MessageBus.NowSettingLoadMainThread != null)
  771. {
  772. try
  773. {
  774. int oldValue = MessageBus.NowSettingLoadMainThread.shuLiConfig.MIN_Object_LENGTH;
  775. MessageBus.NowSettingLoadMainThread.shuLiConfig.MIN_Object_LENGTH = int.Parse(value);
  776. FaultLog.RecordValueChangeMessage($"数粒识别{MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum}的合格粒的最短长度从{oldValue}修改为{value}");
  777. OnPropertyChanged("MIN_Object_LENGTH");
  778. }
  779. catch (Exception)
  780. {
  781. Console.WriteLine("MIN_Object_LENGTH-SetError");
  782. }
  783. }
  784. }
  785. }
  786. /// <summary>
  787. /// 合格粒最小面积
  788. /// </summary>
  789. public string MinArea
  790. {
  791. get
  792. {
  793. if (MessageBus.NowSettingLoadMainThread != null)
  794. {
  795. return MessageBus.NowSettingLoadMainThread.shuLiConfig.MinArea.ToString();
  796. }
  797. else
  798. {
  799. return "";
  800. }
  801. }
  802. set
  803. {
  804. if (MessageBus.NowSettingLoadMainThread != null)
  805. {
  806. try
  807. {
  808. int oldValue = MessageBus.NowSettingLoadMainThread.shuLiConfig.MinArea;
  809. MessageBus.NowSettingLoadMainThread.shuLiConfig.MinArea = int.Parse(value);
  810. FaultLog.RecordValueChangeMessage($"数粒识别{MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum}的异常粒最小面积从{oldValue}修改为{value}");
  811. OnPropertyChanged("MinArea");
  812. }
  813. catch (Exception)
  814. {
  815. Console.WriteLine("MinArea-SetError");
  816. }
  817. }
  818. }
  819. }
  820. /// <summary>
  821. /// 合格粒最大面积
  822. /// </summary>
  823. public string MaxArea
  824. {
  825. get
  826. {
  827. if (MessageBus.NowSettingLoadMainThread != null)
  828. {
  829. return MessageBus.NowSettingLoadMainThread.shuLiConfig.MaxArea.ToString();
  830. }
  831. else
  832. {
  833. return "";
  834. }
  835. }
  836. set
  837. {
  838. if (MessageBus.NowSettingLoadMainThread != null)
  839. {
  840. try
  841. {
  842. int oldValue = MessageBus.NowSettingLoadMainThread.shuLiConfig.MaxArea;
  843. MessageBus.NowSettingLoadMainThread.shuLiConfig.MaxArea = int.Parse(value);
  844. FaultLog.RecordValueChangeMessage($"数粒识别{MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum}的异常粒最大面积从{oldValue}修改为{value}");
  845. OnPropertyChanged("MaxArea");
  846. }
  847. catch (Exception)
  848. {
  849. Console.WriteLine("MaxArea-SetError");
  850. }
  851. }
  852. }
  853. }
  854. /// <summary>
  855. /// 异常粒识别码
  856. /// </summary>
  857. public string PandingCode
  858. {
  859. get
  860. {
  861. if (MessageBus.NowSettingLoadMainThread != null)
  862. {
  863. return MessageBus.NowSettingLoadMainThread.shuLiConfig.MaxArea.ToString();
  864. }
  865. else
  866. {
  867. return "";
  868. }
  869. }
  870. set
  871. {
  872. if (MessageBus.NowSettingLoadMainThread != null)
  873. {
  874. try
  875. {
  876. int oldValue = MessageBus.NowSettingLoadMainThread.shuLiConfig.PandingCode;
  877. if(oldValue != int.Parse(value))
  878. {
  879. MessageBus.NowSettingLoadMainThread.shuLiConfig.PandingCode = int.Parse(value);
  880. FaultLog.RecordValueChangeMessage($"数粒识别{MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum}的判断标准识别码从{oldValue}修改为{value}");
  881. }
  882. OnPropertyChanged("PandingCode");
  883. }
  884. catch (Exception)
  885. {
  886. Console.WriteLine("PandingCode-SetError");
  887. }
  888. }
  889. }
  890. }
  891. /// <summary>
  892. /// 错误信息列表
  893. /// </summary>
  894. private List<ErroeMesDataModelClass> errMessageList = new List<ErroeMesDataModelClass>();
  895. public List<ErroeMesDataModelClass> ErrMessageShowList
  896. {
  897. get { return errMessageList; }
  898. set
  899. {
  900. errMessageList = value;
  901. OnPropertyChanged("errMessageList");
  902. }
  903. }
  904. private string showErrMessage = "";
  905. public string ShowErrMessage
  906. {
  907. get { return showErrMessage; }
  908. set
  909. {
  910. showErrMessage = value;
  911. OnPropertyChanged("showErrMessage");
  912. }
  913. }
  914. /// <summary>
  915. /// 用户数据信息列表
  916. /// </summary>
  917. private List<UserMesDataModelClass> userMesDataModels = new List<UserMesDataModelClass>();
  918. public List<UserMesDataModelClass> UserMesDataModels
  919. {
  920. get { return userMesDataModels; }
  921. set
  922. {
  923. userMesDataModels = value;
  924. OnPropertyChanged("userMesDataModels");
  925. }
  926. }
  927. //数据绑定核心实现
  928. public event PropertyChangedEventHandler PropertyChanged;
  929. protected void OnPropertyChanged(string propertyName)
  930. {
  931. PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
  932. }
  933. }
  934. }