Handler.cs 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
  1. using System;
  2. using System.Text.RegularExpressions;
  3. using Aitex.Core.RT.Log;
  4. using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.LoadPorts;
  5. namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.OcrReaders
  6. {
  7. public interface IReaderMsg
  8. {
  9. string package(params object[] args);
  10. /// </summary>
  11. /// return value, completed
  12. /// <param name="type"></param>
  13. /// <param name="cmd"></param>
  14. /// <returns></returns>
  15. bool unpackage(string type, string[] items);
  16. bool background { get; }
  17. void SetExeError();
  18. }
  19. public class handler : IHandler
  20. {
  21. public int ID { get; set; }
  22. public int Unit { get; set; }
  23. public bool IsBackground { get { return _imp.background; } }
  24. private static int retry_time = 1;
  25. private int retry_count = retry_time;
  26. private IReaderMsg _imp ;
  27. private object[] _objs = null;
  28. public handler(IReaderMsg imp, params object[] objs)
  29. {
  30. _imp = imp;
  31. this._objs = objs;
  32. }
  33. public bool Execute<TPort>(ref TPort port) where TPort : ICommunication
  34. {
  35. retry_count = retry_time;
  36. //return port.Write(string.Format("{0}\r", _imp.package(this._objs)));
  37. return port.Write(string.Format("{0}\r\n", _imp.package(this._objs)));
  38. }
  39. /// <summary>
  40. /// return value: bhandle
  41. /// </summary>
  42. /// <typeparam name="TPort"></typeparam>
  43. /// <param name="port"></param>
  44. /// <param name="msg"></param>
  45. /// <param name="completed"></param>
  46. /// <returns></returns>
  47. public bool OnMessage<TPort>(ref TPort port, string message, out bool completed) where TPort : ICommunication
  48. {
  49. completed = false;
  50. try
  51. {
  52. string msg = message.Trim();
  53. //if (msg.IndexOf("WELCOME") >= 0)
  54. //{
  55. // completed = true;
  56. // return true;
  57. //}
  58. //msg = msg.Replace("USER:","");
  59. //if (string.IsNullOrWhiteSpace(msg))
  60. //{
  61. // completed = true;
  62. // return true;
  63. //}
  64. msg = message.TrimStart('[');
  65. msg = msg.TrimEnd(']');
  66. string[] data = Regex.Split(msg, ",");
  67. completed = _imp.unpackage("", data);
  68. //if (msg.Length == 1)
  69. //{
  70. // if (!msg.Equals("1")) //0: command failed
  71. // {
  72. // _imp.SetExeError();
  73. // completed = true;
  74. // }
  75. // if (!IsBackground)
  76. // {
  77. // _imp.unpackage("", null);
  78. // completed = true;
  79. // }
  80. // return true;
  81. //}
  82. //if (IsBackground)
  83. //{
  84. // msg = message.TrimStart('[');
  85. // msg = msg.TrimEnd(']');
  86. // string[] data = Regex.Split(msg, ",");
  87. // completed = _imp.unpackage("", data);
  88. //}
  89. return true;
  90. }
  91. catch (ExcuteFailedException e)
  92. {
  93. throw (e);
  94. }
  95. catch (Exception ex)
  96. {
  97. LOG.Write(ex);
  98. throw (new InvalidPackageException(message));
  99. }
  100. }
  101. }
  102. public class ReadHandler : IReaderMsg //common move
  103. {
  104. public bool background { get; private set; }
  105. private OcrReader _device ;
  106. public ReadHandler(OcrReader device)
  107. {
  108. _device = device;
  109. background = false;
  110. }
  111. public string package(params object[] args)
  112. {
  113. return string.Format("SM\"READ\"0 ");
  114. }
  115. public void SetExeError()
  116. {
  117. _device.ExeError = true;
  118. }
  119. public bool unpackage(string type, string[] items)
  120. {
  121. if(items.Length == 1)
  122. {
  123. if (items[0] != "1" && !items[0].Contains("WELCOME"))
  124. {
  125. SetExeError();
  126. return true;
  127. }
  128. else return false;
  129. }
  130. if (_device.ReadLaserMaker)
  131. {
  132. _device.LaserMaker = items[0];
  133. _device.LaserMark1 = items[0];
  134. if (items.Length > 1) _device.LaserMark1Score = items[1];
  135. if (items.Length > 2) _device.LaserMark1ReadTime = items[2];
  136. LOG.Write($"{_device.Name} laser marker updated to {_device.LaserMaker}");
  137. }
  138. else
  139. {
  140. _device.T7Code = items[0];
  141. _device.LaserMark2 = items[0];
  142. if (items.Length > 1) _device.LaserMark2Score = items[1];
  143. if (items.Length > 2) _device.LaserMark2ReadTime = items[2];
  144. LOG.Write($"{_device.Name} T7 code updated to {_device.T7Code}");
  145. }
  146. _device.ReadOK = double.Parse(items[1]) > 0;
  147. return true;
  148. }
  149. }
  150. public class OnlineHandler : IReaderMsg //common move
  151. {
  152. public bool background { get; private set; }
  153. private OcrReader _device ;
  154. private bool _online = false;
  155. public OnlineHandler(OcrReader device)
  156. {
  157. _device = device;
  158. background = false;
  159. }
  160. public string package(params object[] args)
  161. {
  162. _online = (bool)args[0];
  163. if(_online)
  164. return string.Format("SO1");
  165. return string.Format("SO0");
  166. }
  167. public void SetExeError()
  168. {
  169. _device.ExeError = true;
  170. }
  171. public bool unpackage(string type, string[] items)
  172. {
  173. if (items[0] != "1" && !items[0].Contains("WELCOME"))
  174. SetExeError();
  175. return true;
  176. }
  177. }
  178. public class GetJobHandler : IReaderMsg
  179. {
  180. public bool background { get; private set; }
  181. private OcrReader _device ;
  182. public GetJobHandler(OcrReader device)
  183. {
  184. _device = device;
  185. background = false;
  186. }
  187. public string package(params object[] args)
  188. {
  189. return string.Format("GF");
  190. }
  191. public void SetExeError()
  192. {
  193. _device.ExeError = true;
  194. }
  195. public bool unpackage(string type, string[] items)
  196. {
  197. //if (items[0] != "1")
  198. //{
  199. // SetExeError();
  200. // return true;
  201. //}
  202. //else return false;
  203. _device.JobName = (string)items[0];
  204. return true;
  205. }
  206. }
  207. public class LoadJobHandler : IReaderMsg //common move
  208. {
  209. public bool background { get; private set; }
  210. private OcrReader _device ;
  211. private string _job;
  212. public LoadJobHandler(OcrReader device)
  213. {
  214. _device = device;
  215. background = false;
  216. }
  217. public string package(params object[] args)
  218. {
  219. _job = (string)args[0]; //full path
  220. // _job = _job.Substring(_job.LastIndexOf("\\") + 1); //remove dir
  221. // _job = _job.Substring(0, _job.LastIndexOf(".")); //remove expand
  222. return string.Format("LF{0}.job",_job);
  223. }
  224. public void SetExeError()
  225. {
  226. _device.ExeError = true;
  227. }
  228. public bool unpackage(string type, string[] items)
  229. {
  230. if (items[0] != "1" && !items[0].Contains("WELCOME"))
  231. SetExeError();
  232. else _device.JobName = _job;
  233. return true;
  234. }
  235. }
  236. }