SorterHostUsageRecipeXml.cs 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571
  1. using Aitex.Core.Common;
  2. using Aitex.Core.RT.Log;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Collections.ObjectModel;
  6. using System.ComponentModel;
  7. using System.Linq;
  8. using System.Runtime.Serialization;
  9. using System.Text;
  10. using System.Xml;
  11. using System.Xml.Linq;
  12. using MECF.Framework.Common.Equipment;
  13. using System.IO;
  14. namespace Aitex.Sorter.Common
  15. {
  16. [DataContract]
  17. [Serializable]
  18. public class SorterHostUsageRecipeXml : INotifyPropertyChanged
  19. {
  20. public event PropertyChangedEventHandler PropertyChanged;
  21. public void OnPropertyChanged(string propertyName)
  22. {
  23. if (PropertyChanged != null)
  24. {
  25. PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
  26. }
  27. }
  28. private string name;
  29. [DataMember]
  30. public string Name
  31. {
  32. get
  33. {
  34. return name;
  35. }
  36. set
  37. {
  38. name = value;
  39. OnPropertyChanged("Name");
  40. }
  41. }
  42. private bool _isReadLaserMarker1 = false;
  43. [DataMember]
  44. public bool IsReadLaserMarker1
  45. {
  46. get { return _isReadLaserMarker1; }
  47. set
  48. {
  49. _isReadLaserMarker1 = value;
  50. OnPropertyChanged("IsReadLaserMarker1");
  51. }
  52. }
  53. private bool _isVerifyLaserMarker1;
  54. [DataMember]
  55. public bool IsVerifyLaserMarker1
  56. {
  57. get { return _isVerifyLaserMarker1; }
  58. set
  59. {
  60. _isVerifyLaserMarker1 = value;
  61. OnPropertyChanged("IsVerifyLaserMarker1");
  62. }
  63. }
  64. private bool _isVerifyChecksumLaserMarker1;
  65. [DataMember]
  66. public bool IsVerifyChecksumLaserMarker1
  67. {
  68. get { return _isVerifyChecksumLaserMarker1; }
  69. set
  70. {
  71. _isVerifyChecksumLaserMarker1 = value;
  72. OnPropertyChanged("IsVerifyChecksumLaserMarker1");
  73. }
  74. }
  75. private bool _isReadLaserMarker2 = false;
  76. [DataMember]
  77. public bool IsReadLaserMarker2
  78. {
  79. get { return _isReadLaserMarker2; }
  80. set
  81. {
  82. _isReadLaserMarker2 = value;
  83. OnPropertyChanged("IsReadLaserMarker2");
  84. }
  85. }
  86. private bool _isVerifyLaserMarker2;
  87. [DataMember]
  88. public bool IsVerifyLaserMarker2
  89. {
  90. get { return _isVerifyLaserMarker2; }
  91. set
  92. {
  93. _isVerifyLaserMarker2 = value;
  94. OnPropertyChanged("IsVerifyLaserMarker2");
  95. }
  96. }
  97. private bool _isVerifyChecksumLaserMarker2;
  98. [DataMember]
  99. public bool IsVerifyChecksumLaserMarker2
  100. {
  101. get { return _isVerifyChecksumLaserMarker2; }
  102. set
  103. {
  104. _isVerifyChecksumLaserMarker2 = value;
  105. OnPropertyChanged("IsVerifyChecksumLaserMarker2");
  106. }
  107. }
  108. private bool _isVerifyLaserMarkLength;
  109. [DataMember]
  110. public bool IsVerifyLaserMarkLength
  111. {
  112. get { return _isVerifyLaserMarkLength; }
  113. set
  114. {
  115. _isVerifyLaserMarkLength = value;
  116. OnPropertyChanged("IsVerifyLaserMarkLength");
  117. }
  118. }
  119. private bool _isVerifySlotPositionInLaserMarker;
  120. [DataMember]
  121. public bool IsVerifySlotPositionInLaserMarker
  122. {
  123. get { return _isVerifySlotPositionInLaserMarker; }
  124. set
  125. {
  126. _isVerifySlotPositionInLaserMarker = value;
  127. OnPropertyChanged("IsVerifySlotPositionInLaserMark");
  128. }
  129. }
  130. private bool _isVerifyWithHostDefine;
  131. [DataMember]
  132. public bool IsVerifyWithHostDefine
  133. {
  134. get { return _isVerifyWithHostDefine; }
  135. set
  136. {
  137. _isVerifyWithHostDefine = value;
  138. OnPropertyChanged("IsVerifyWithHostDefine");
  139. }
  140. }
  141. private int _intVerifyLaserMarkLength;
  142. [DataMember]
  143. public int IntVerifyLaserMarkerLength
  144. {
  145. get { return _intVerifyLaserMarkLength; }
  146. set
  147. {
  148. _intVerifyLaserMarkLength = value;
  149. OnPropertyChanged("IntVerifyLaserMarkLength");
  150. }
  151. }
  152. private int _intVerifySlotPositionInLaserMark;
  153. [DataMember]
  154. public int IntVerifySlotPositionInLaserMark
  155. {
  156. get { return _intVerifySlotPositionInLaserMark; }
  157. set
  158. {
  159. _intVerifySlotPositionInLaserMark = value;
  160. OnPropertyChanged("IntVerifySlotPositionInLaserMark");
  161. }
  162. }
  163. private bool _isAlign;
  164. [DataMember]
  165. public bool IsAlign
  166. {
  167. get { return _isAlign; }
  168. set
  169. {
  170. _isAlign = value;
  171. OnPropertyChanged("IsAlign");
  172. }
  173. }
  174. private double _preAlignAngle = 0;
  175. [DataMember]
  176. public double PreAlignAngle
  177. {
  178. get { return _preAlignAngle; }
  179. set
  180. {
  181. _preAlignAngle = value;
  182. //OnPropertyChanged("PreAlignAngle");
  183. }
  184. }
  185. private double _postAlignAngle = 0;
  186. [DataMember]
  187. public double PostAlignAngle
  188. {
  189. get { return _postAlignAngle; }
  190. set
  191. {
  192. _postAlignAngle = value;
  193. OnPropertyChanged("PostAlignAngle");
  194. }
  195. }
  196. private double _bladeRegulatorRatio = 0;
  197. [DataMember]
  198. public double BladeRegulatorRatio
  199. {
  200. get { return _bladeRegulatorRatio; }
  201. set
  202. {
  203. _bladeRegulatorRatio = value;
  204. OnPropertyChanged("BladeRegulatorRatio");
  205. }
  206. }
  207. private bool _isPostAlign;
  208. [DataMember]
  209. public bool IsPostAlign
  210. {
  211. get { return _isPostAlign; }
  212. set
  213. {
  214. _isPostAlign = value;
  215. OnPropertyChanged("IsPostAlign");
  216. }
  217. }
  218. private bool _isTurnOver;
  219. [DataMember]
  220. public bool IsTurnOver
  221. {
  222. get { return _isTurnOver; }
  223. set
  224. {
  225. _isTurnOver= value;
  226. OnPropertyChanged("IsTurnOver");
  227. }
  228. }
  229. private bool _isTurnOverBeforeAlign;
  230. [DataMember]
  231. public bool IsTurnOverBeforeAlign
  232. {
  233. get { return _isTurnOverBeforeAlign; }
  234. set
  235. {
  236. _isTurnOverBeforeAlign = value;
  237. OnPropertyChanged("IsTurnOverBeforeAlign");
  238. }
  239. }
  240. private int _laserMarkerWaferReaderIndex1;
  241. [DataMember]
  242. public int LaserMarkerWaferReaderIndex1
  243. {
  244. get => _laserMarkerWaferReaderIndex1;
  245. set
  246. {
  247. _laserMarkerWaferReaderIndex1 = value;
  248. OnPropertyChanged("LaserMarkerWaferReaderIndex1");
  249. }
  250. }
  251. private int _laserMarkerWaferReaderIndex2;
  252. [DataMember]
  253. public int LaserMarkerWaferReaderIndex2
  254. {
  255. get => _laserMarkerWaferReaderIndex2;
  256. set
  257. {
  258. _laserMarkerWaferReaderIndex2 = value;
  259. OnPropertyChanged("LaserMarkerWaferReaderIndex2");
  260. }
  261. }
  262. private bool _isRobotFlippeBeforeAlign;
  263. [DataMember]
  264. public bool IsRobotFlippeBeforeAlign
  265. {
  266. get { return _isRobotFlippeBeforeAlign; }
  267. set
  268. {
  269. _isRobotFlippeBeforeAlign = value;
  270. OnPropertyChanged("IsRobotFlippeBeforeAlign");
  271. }
  272. }
  273. private bool _isRobotFlippeAfterAlign;
  274. [DataMember]
  275. public bool IsRobotFlippeAfterAlign
  276. {
  277. get { return _isRobotFlippeAfterAlign; }
  278. set
  279. {
  280. _isRobotFlippeAfterAlign = value;
  281. OnPropertyChanged("IsRobotFlippeAfterAlign");
  282. }
  283. }
  284. private ObservableCollection<KeyValuePair<string, string>> _ocrReaderJob1;
  285. [DataMember]
  286. public ObservableCollection<KeyValuePair<string, string>> OcrReaderJob1
  287. {
  288. get => _ocrReaderJob1;
  289. set
  290. {
  291. _ocrReaderJob1 = value;
  292. OnPropertyChanged("OcrReaderJob1");
  293. }
  294. }
  295. private ObservableCollection<KeyValuePair<string, string>> _ocrReaderJob2;
  296. [DataMember]
  297. public ObservableCollection<KeyValuePair<string, string>> OcrReaderJob2
  298. {
  299. get => _ocrReaderJob2;
  300. set
  301. {
  302. _ocrReaderJob2 = value;
  303. OnPropertyChanged("OcrReaderJob2");
  304. }
  305. }
  306. public SorterHostUsageRecipeXml(string name = "")
  307. {
  308. Name = name;
  309. OcrReaderJob1 = new ObservableCollection<KeyValuePair<string, string>>();
  310. OcrReaderJob2 = new ObservableCollection<KeyValuePair<string, string>>();
  311. }
  312. public SorterHostUsageRecipeXml(string content, string name = "")
  313. {
  314. Name = name;
  315. SetContent(content);
  316. }
  317. public bool SetContent(string content)
  318. {
  319. try
  320. {
  321. var doc = XDocument.Parse(content);
  322. ParseContent(doc);
  323. }
  324. catch (Exception e)
  325. {
  326. LOG.Write(e);
  327. return false;
  328. }
  329. return true;
  330. }
  331. public string GetContent()
  332. {
  333. var doc = new XDocument();
  334. var root = new XElement("Recipe");
  335. var element = new XElement("AitexSorterHostUsageRecipe"
  336. , new XAttribute("IsAlign", IsAlign)
  337. , new XAttribute("PreAlignAngle", PreAlignAngle)
  338. , new XAttribute("IsReadLaserMarker1", IsReadLaserMarker1.ToString())
  339. , new XAttribute("IsVerifyLaserMarker1", IsVerifyLaserMarker1.ToString())
  340. , new XAttribute("IsVerifyChecksumLaserMarker1", IsVerifyChecksumLaserMarker1.ToString())
  341. , new XAttribute("LaserMarkerWaferReaderIndex1", LaserMarkerWaferReaderIndex1)
  342. , new XAttribute("IsReadLaserMarker2", IsReadLaserMarker2.ToString())
  343. , new XAttribute("IsVerifyLaserMarker2", IsVerifyLaserMarker2.ToString())
  344. , new XAttribute("IsVerifyChecksumLaserMarker2", IsVerifyChecksumLaserMarker2.ToString())
  345. , new XAttribute("LaserMarkerWaferReaderIndex2", LaserMarkerWaferReaderIndex2)
  346. , new XAttribute("IsPostAlign", IsPostAlign.ToString())
  347. , new XAttribute("PostAlignAngle", PostAlignAngle)
  348. , new XAttribute("OcrReaderJob1", OcrReaderJob1 != null ? string.Join(";", OcrReaderJob1.Select(x => x.Value)) : "")
  349. , new XAttribute("OcrReaderJob2", OcrReaderJob2 != null ? string.Join(";", OcrReaderJob2.Select(x => x.Value)) : "")
  350. , new XAttribute("IsTurnOver", IsTurnOver.ToString())
  351. , new XAttribute("IsTurnOverBeforeAlign", IsTurnOverBeforeAlign.ToString())
  352. , new XAttribute("IsVerifyLaserMarkLength", IsVerifyLaserMarkLength.ToString())
  353. , new XAttribute("IsVerifySlotPositionInLaserMarker", IsVerifySlotPositionInLaserMarker.ToString())
  354. , new XAttribute("IntVerifyLaserMarkerLength", IntVerifyLaserMarkerLength.ToString())
  355. , new XAttribute("IntVerifySlotPositionInLaserMark", IntVerifySlotPositionInLaserMark.ToString())
  356. , new XAttribute("IsVerifyWithHostDefine", IsVerifyWithHostDefine.ToString())
  357. , new XAttribute("BladeRegulatorRatio", BladeRegulatorRatio)
  358. , new XAttribute("IsRobotFlippeBeforeAlign", IsRobotFlippeBeforeAlign.ToString())
  359. , new XAttribute("IsRobotFlippeAfterAlign", IsRobotFlippeAfterAlign.ToString())
  360. );
  361. root.Add(element);
  362. doc.Add(root);
  363. return doc.ToString();
  364. }
  365. private void ParseContent(XDocument doc)
  366. {
  367. try
  368. {
  369. var node = doc.Root.Element("AitexSorterHostUsageRecipe");
  370. if (node == null)
  371. {
  372. LOG.Write(string.Format("recipe not valid"));
  373. return;
  374. }
  375. string value = node.Attribute("PreAlignAngle").Value;
  376. double preAngle;
  377. double.TryParse(value, out preAngle);
  378. PreAlignAngle = preAngle;
  379. value = node.Attribute("IsReadLaserMarker1").Value;
  380. bool isReadLaserMarker1;
  381. bool.TryParse(value, out isReadLaserMarker1);
  382. IsReadLaserMarker1 = isReadLaserMarker1;
  383. value = node.Attribute("IsVerifyLaserMarker1").Value;
  384. bool isVerifyLaserMarker1;
  385. bool.TryParse(value, out isVerifyLaserMarker1);
  386. IsVerifyLaserMarker1 = isVerifyLaserMarker1;
  387. value = node.Attribute("IsVerifyChecksumLaserMarker1").Value;
  388. bool isVerifyChecksumLaserMarker1;
  389. bool.TryParse(value, out isVerifyChecksumLaserMarker1);
  390. IsVerifyChecksumLaserMarker1 = isVerifyChecksumLaserMarker1;
  391. LaserMarkerWaferReaderIndex1 = GetValue<int>(node, "LaserMarkerWaferReaderIndex1");
  392. value = node.Attribute("IsReadLaserMarker2").Value;
  393. bool isReadLaserMarker2;
  394. bool.TryParse(value, out isReadLaserMarker2);
  395. IsReadLaserMarker2 = isReadLaserMarker2;
  396. value = node.Attribute("IsVerifyLaserMarker2").Value;
  397. bool isVerifyLaserMarker2;
  398. bool.TryParse(value, out isVerifyLaserMarker2);
  399. IsVerifyLaserMarker2 = isVerifyLaserMarker2;
  400. value = node.Attribute("IsVerifyChecksumLaserMarker2").Value;
  401. bool isVerifyChecksumLaserMarker2;
  402. bool.TryParse(value, out isVerifyChecksumLaserMarker2);
  403. IsVerifyChecksumLaserMarker2 = isVerifyChecksumLaserMarker2;
  404. LaserMarkerWaferReaderIndex2 = GetValue<int>(node, "LaserMarkerWaferReaderIndex2");
  405. value = node.Attribute("IsPostAlign").Value;
  406. bool ispostAlign;
  407. bool.TryParse(value, out ispostAlign);
  408. IsPostAlign = ispostAlign;
  409. if (node.Attribute("IsAlign") != null)
  410. {
  411. value = node.Attribute("IsAlign").Value;
  412. bool isAlign;
  413. bool.TryParse(value, out isAlign);
  414. IsAlign = isAlign;
  415. }
  416. value = node.Attribute("PostAlignAngle").Value;
  417. double postAngle;
  418. double.TryParse(value, out postAngle);
  419. PostAlignAngle = postAngle;
  420. value = node.Attribute("OcrReaderJob1").Value;
  421. var arr = value.Split(new char[] { ';' }, System.StringSplitOptions.RemoveEmptyEntries);
  422. OcrReaderJob1 = new ObservableCollection<KeyValuePair<string, string>>(arr.ToDictionary(k => Path.GetFileNameWithoutExtension(k), v => v));
  423. value = node.Attribute("OcrReaderJob2").Value;
  424. arr = value.Split(new char[] { ';' }, System.StringSplitOptions.RemoveEmptyEntries);
  425. OcrReaderJob2 = new ObservableCollection<KeyValuePair<string, string>>(arr.ToDictionary(k => Path.GetFileNameWithoutExtension(k), v => v));
  426. value = node.Attribute("IsTurnOver").Value;
  427. bool isTurnOver;
  428. bool.TryParse(value, out isTurnOver);
  429. IsTurnOver = isTurnOver;
  430. if (node.Attribute("IsTurnOverBeforeAlign") != null)
  431. {
  432. value = node.Attribute("IsTurnOverBeforeAlign").Value;
  433. bool isTurnOverBeforeAlign;
  434. bool.TryParse(value, out isTurnOverBeforeAlign);
  435. IsTurnOverBeforeAlign = isTurnOverBeforeAlign;
  436. }
  437. if (node.Attribute("IsVerifyLaserMarkLength") != null)
  438. {
  439. value = node.Attribute("IsVerifyLaserMarkLength").Value;
  440. bool isVerifyLaserMarkLength;
  441. bool.TryParse(value, out isVerifyLaserMarkLength);
  442. IsVerifyLaserMarkLength = isVerifyLaserMarkLength;
  443. }
  444. if (node.Attribute("IsVerifySlotPositionInLaserMarker") != null)
  445. {
  446. value = node.Attribute("IsVerifySlotPositionInLaserMarker").Value;
  447. bool isVerifySlotPositionInLaserMarker;
  448. bool.TryParse(value, out isVerifySlotPositionInLaserMarker);
  449. IsVerifySlotPositionInLaserMarker = isVerifySlotPositionInLaserMarker;
  450. }
  451. if (node.Attribute("IntVerifyLaserMarkerLength") != null)
  452. {
  453. value = node.Attribute("IntVerifyLaserMarkerLength").Value;
  454. int intVerifyLaserMarkerLength;
  455. int.TryParse(value, out intVerifyLaserMarkerLength);
  456. IntVerifyLaserMarkerLength = intVerifyLaserMarkerLength;
  457. }
  458. if (node.Attribute("IntVerifySlotPositionInLaserMark") != null)
  459. {
  460. value = node.Attribute("IntVerifySlotPositionInLaserMark").Value;
  461. int intVerifySlotPositionInLaserMark;
  462. int.TryParse(value, out intVerifySlotPositionInLaserMark);
  463. IntVerifySlotPositionInLaserMark = intVerifySlotPositionInLaserMark;
  464. }
  465. if (node.Attribute("IsVerifyWithHostDefine") != null)
  466. {
  467. value = node.Attribute("IsVerifyWithHostDefine").Value;
  468. bool isVerifyWithHostDefine;
  469. bool.TryParse(value, out isVerifyWithHostDefine);
  470. IsVerifyWithHostDefine = isVerifyWithHostDefine;
  471. }
  472. if (node.Attribute("BladeRegulatorRatio") != null)
  473. {
  474. value = node.Attribute("BladeRegulatorRatio").Value;
  475. double bladeRegulatorRatio;
  476. double.TryParse(value, out bladeRegulatorRatio);
  477. BladeRegulatorRatio = bladeRegulatorRatio;
  478. }
  479. if (node.Attribute("IsRobotFlippeBeforeAlign") != null)
  480. {
  481. value = node.Attribute("IsRobotFlippeBeforeAlign").Value;
  482. bool isRobotFlippeBeforeAlign;
  483. bool.TryParse(value, out isRobotFlippeBeforeAlign);
  484. IsRobotFlippeBeforeAlign = isRobotFlippeBeforeAlign;
  485. }
  486. if (node.Attribute("IsRobotFlippeAfterAlign") != null)
  487. {
  488. value = node.Attribute("IsRobotFlippeAfterAlign").Value;
  489. bool isRobotFlippeAfterAlign;
  490. bool.TryParse(value, out isRobotFlippeAfterAlign);
  491. IsRobotFlippeAfterAlign = isRobotFlippeAfterAlign;
  492. }
  493. //value = node.Attribute("IsTurnOverBeforeAlign").Value;
  494. //bool isTurnOverBeforeAlign;
  495. //bool.TryParse(value, out isTurnOverBeforeAlign);
  496. //IsTurnOverBeforeAlign = isTurnOverBeforeAlign;
  497. }
  498. catch (Exception ex)
  499. {
  500. LOG.Write(ex);
  501. }
  502. }
  503. private T GetValue<T>(XElement element, string Name)
  504. {
  505. var attr = element.Attribute(Name);
  506. if (attr != null)
  507. {
  508. return (T)Convert.ChangeType(attr.Value, typeof(T));
  509. }
  510. return default(T);
  511. }
  512. }
  513. }