ShowBindingClass.cs 34 KB

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