SorterHostUsageRecipeXml.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355
  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 double _preAlignAngle = 0;
  109. [DataMember]
  110. public double PreAlignAngle
  111. {
  112. get { return _preAlignAngle; }
  113. set
  114. {
  115. _preAlignAngle = value;
  116. //OnPropertyChanged("PreAlignAngle");
  117. }
  118. }
  119. private double _postAlignAngle = 0;
  120. [DataMember]
  121. public double PostAlignAngle
  122. {
  123. get { return _postAlignAngle; }
  124. set
  125. {
  126. _postAlignAngle = value;
  127. OnPropertyChanged("PostAlignAngle");
  128. }
  129. }
  130. private bool _isPostAlign;
  131. [DataMember]
  132. public bool IsPostAlign
  133. {
  134. get { return _isPostAlign; }
  135. set
  136. {
  137. _isPostAlign = value;
  138. OnPropertyChanged("IsPostAlign");
  139. }
  140. }
  141. private bool _isTurnOver;
  142. [DataMember]
  143. public bool IsTurnOver
  144. {
  145. get { return _isTurnOver; }
  146. set
  147. {
  148. _isTurnOver= value;
  149. OnPropertyChanged("IsTurnOver");
  150. }
  151. }
  152. private int _laserMarkerWaferReaderIndex1;
  153. [DataMember]
  154. public int LaserMarkerWaferReaderIndex1
  155. {
  156. get => _laserMarkerWaferReaderIndex1;
  157. set
  158. {
  159. _laserMarkerWaferReaderIndex1 = value;
  160. OnPropertyChanged("LaserMarkerWaferReaderIndex1");
  161. }
  162. }
  163. private int _laserMarkerWaferReaderIndex2;
  164. [DataMember]
  165. public int LaserMarkerWaferReaderIndex2
  166. {
  167. get => _laserMarkerWaferReaderIndex2;
  168. set
  169. {
  170. _laserMarkerWaferReaderIndex2 = value;
  171. OnPropertyChanged("LaserMarkerWaferReaderIndex2");
  172. }
  173. }
  174. private ObservableCollection<KeyValuePair<string, string>> _ocrReaderJob1;
  175. [DataMember]
  176. public ObservableCollection<KeyValuePair<string, string>> OcrReaderJob1
  177. {
  178. get => _ocrReaderJob1;
  179. set
  180. {
  181. _ocrReaderJob1 = value;
  182. OnPropertyChanged("OcrReaderJob1");
  183. }
  184. }
  185. private ObservableCollection<KeyValuePair<string, string>> _ocrReaderJob2;
  186. [DataMember]
  187. public ObservableCollection<KeyValuePair<string, string>> OcrReaderJob2
  188. {
  189. get => _ocrReaderJob2;
  190. set
  191. {
  192. _ocrReaderJob2 = value;
  193. OnPropertyChanged("OcrReaderJob2");
  194. }
  195. }
  196. public SorterHostUsageRecipeXml(string name = "")
  197. {
  198. Name = name;
  199. OcrReaderJob1 = new ObservableCollection<KeyValuePair<string, string>>();
  200. OcrReaderJob2 = new ObservableCollection<KeyValuePair<string, string>>();
  201. }
  202. public SorterHostUsageRecipeXml(string content, string name = "")
  203. {
  204. Name = name;
  205. SetContent(content);
  206. }
  207. public bool SetContent(string content)
  208. {
  209. try
  210. {
  211. var doc = XDocument.Parse(content);
  212. ParseContent(doc);
  213. }
  214. catch (Exception e)
  215. {
  216. LOG.WriteExeption(e);
  217. return false;
  218. }
  219. return true;
  220. }
  221. public string GetContent()
  222. {
  223. var doc = new XDocument();
  224. var root = new XElement("Recipe");
  225. var element = new XElement("AitexSorterHostUsageRecipe"
  226. , new XAttribute("PreAlignAngle", PreAlignAngle)
  227. , new XAttribute("IsReadLaserMarker1", IsReadLaserMarker1.ToString())
  228. , new XAttribute("IsVerifyLaserMarker1", IsVerifyLaserMarker1.ToString())
  229. , new XAttribute("IsVerifyChecksumLaserMarker1", IsVerifyChecksumLaserMarker1.ToString())
  230. , new XAttribute("LaserMarkerWaferReaderIndex1", LaserMarkerWaferReaderIndex1)
  231. , new XAttribute("IsReadLaserMarker2", IsReadLaserMarker2.ToString())
  232. , new XAttribute("IsVerifyLaserMarker2", IsVerifyLaserMarker2.ToString())
  233. , new XAttribute("IsVerifyChecksumLaserMarker2", IsVerifyChecksumLaserMarker2.ToString())
  234. , new XAttribute("LaserMarkerWaferReaderIndex2", LaserMarkerWaferReaderIndex2)
  235. , new XAttribute("IsPostAlign", IsPostAlign.ToString())
  236. , new XAttribute("PostAlignAngle", PostAlignAngle)
  237. , new XAttribute("OcrReaderJob1", OcrReaderJob1 != null ? string.Join(";", OcrReaderJob1.Select(x => x.Value)) : "")
  238. , new XAttribute("OcrReaderJob2", OcrReaderJob2 != null ? string.Join(";", OcrReaderJob2.Select(x => x.Value)) : "")
  239. , new XAttribute("IsTurnOver", IsTurnOver.ToString())
  240. );
  241. root.Add(element);
  242. doc.Add(root);
  243. return doc.ToString();
  244. }
  245. private void ParseContent(XDocument doc)
  246. {
  247. try
  248. {
  249. var node = doc.Root.Element("AitexSorterHostUsageRecipe");
  250. if (node == null)
  251. {
  252. //LOG.Write(string.Format("recipe not valid"));
  253. return;
  254. }
  255. string value = node.Attribute("PreAlignAngle").Value;
  256. double preAngle;
  257. double.TryParse(value, out preAngle);
  258. PreAlignAngle = preAngle;
  259. value = node.Attribute("IsReadLaserMarker1").Value;
  260. bool isReadLaserMarker1;
  261. bool.TryParse(value, out isReadLaserMarker1);
  262. IsReadLaserMarker1 = isReadLaserMarker1;
  263. value = node.Attribute("IsVerifyLaserMarker1").Value;
  264. bool isVerifyLaserMarker1;
  265. bool.TryParse(value, out isVerifyLaserMarker1);
  266. IsVerifyLaserMarker1 = isVerifyLaserMarker1;
  267. value = node.Attribute("IsVerifyChecksumLaserMarker1").Value;
  268. bool isVerifyChecksumLaserMarker1;
  269. bool.TryParse(value, out isVerifyChecksumLaserMarker1);
  270. IsVerifyChecksumLaserMarker1 = isVerifyChecksumLaserMarker1;
  271. LaserMarkerWaferReaderIndex1 = GetValue<int>(node, "LaserMarkerWaferReaderIndex1");
  272. value = node.Attribute("IsReadLaserMarker2").Value;
  273. bool isReadLaserMarker2;
  274. bool.TryParse(value, out isReadLaserMarker2);
  275. IsReadLaserMarker2 = isReadLaserMarker2;
  276. value = node.Attribute("IsVerifyLaserMarker2").Value;
  277. bool isVerifyLaserMarker2;
  278. bool.TryParse(value, out isVerifyLaserMarker2);
  279. IsVerifyLaserMarker2 = isVerifyLaserMarker2;
  280. value = node.Attribute("IsVerifyChecksumLaserMarker2").Value;
  281. bool isVerifyChecksumLaserMarker2;
  282. bool.TryParse(value, out isVerifyChecksumLaserMarker2);
  283. IsVerifyChecksumLaserMarker2 = isVerifyChecksumLaserMarker2;
  284. LaserMarkerWaferReaderIndex2 = GetValue<int>(node, "LaserMarkerWaferReaderIndex2");
  285. value = node.Attribute("IsPostAlign").Value;
  286. bool ispostAlign;
  287. bool.TryParse(value, out ispostAlign);
  288. IsPostAlign = ispostAlign;
  289. value = node.Attribute("PostAlignAngle").Value;
  290. double postAngle;
  291. double.TryParse(value, out postAngle);
  292. PostAlignAngle = postAngle;
  293. value = node.Attribute("OcrReaderJob1").Value;
  294. var arr = value.Split(new char[] { ';' }, System.StringSplitOptions.RemoveEmptyEntries);
  295. OcrReaderJob1 = new ObservableCollection<KeyValuePair<string, string>>(arr.ToDictionary(k => Path.GetFileNameWithoutExtension(k), v => v));
  296. value = node.Attribute("OcrReaderJob2").Value;
  297. arr = value.Split(new char[] { ';' }, System.StringSplitOptions.RemoveEmptyEntries);
  298. OcrReaderJob2 = new ObservableCollection<KeyValuePair<string, string>>(arr.ToDictionary(k => Path.GetFileNameWithoutExtension(k), v => v));
  299. value = node.Attribute("IsTurnOver").Value;
  300. bool isTurnOver;
  301. bool.TryParse(value, out isTurnOver);
  302. IsTurnOver = isTurnOver;
  303. }
  304. catch (Exception ex)
  305. {
  306. LOG.WriteExeption(ex);
  307. }
  308. }
  309. private T GetValue<T>(XElement element, string Name)
  310. {
  311. var attr = element.Attribute(Name);
  312. if (attr != null)
  313. {
  314. return (T)Convert.ChangeType(attr.Value, typeof(T));
  315. }
  316. return default(T);
  317. }
  318. }
  319. }