ShowBindingClass.cs 31 KB

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