BarcodeReaderConfigManager.cs 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. using Aitex.Common.Util;
  2. using Aitex.Core.Util;
  3. using MECF.Framework.Common.Device.ResistivityProbe;
  4. using MECF.Framework.Common.Utilities;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.IO.Ports;
  8. using System.IO;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. using Aitex.Core.RT.DataCenter;
  13. using Aitex.Core.RT.Log;
  14. using Aitex.Core.RT.SCCore;
  15. namespace MECF.Framework.Common.Device.BarcodeReader
  16. {
  17. public class BarcodeReaderConfigManager : Singleton<BarcodeReaderConfigManager>
  18. {
  19. #region 常量
  20. private const string BARCODEREADER_DEVICELIST = "BarcodeReaderDeviceList";
  21. private const string BARCODE_VALUE = "BarcodeValue";
  22. private const string IS_CONNECTED = "IsConnected";
  23. #endregion
  24. #region 内部变量
  25. /// <summary>
  26. /// 模块设备字典
  27. /// </summary>
  28. private Dictionary<string, BarcodeReaderDeviceConfig> _barcodeReaderDeviceConfigDic = new Dictionary<string, BarcodeReaderDeviceConfig>();
  29. /// <summary>
  30. /// 模块数值字典
  31. /// </summary>
  32. private Dictionary<string, string> _barcodeValueDic = new Dictionary<string, string>();
  33. /// <summary>
  34. /// 模块串口设备字典
  35. /// </summary>
  36. private Dictionary<string, BarcodeReaderSerialDevice> _barcodeReaderSerialDeviceDic = new Dictionary<string, BarcodeReaderSerialDevice>();
  37. #endregion
  38. /// <summary>
  39. /// 初始化
  40. /// </summary>
  41. public void Initialize()
  42. {
  43. bool isSimulate = SC.GetValue<bool>("System.IsSimulatorMode");
  44. string xmlPath = "";
  45. if (isSimulate)
  46. {
  47. xmlPath = PathManager.GetCfgDir() + "Devices\\BarcodeReaderCfg-simulator.xml";
  48. }
  49. else
  50. {
  51. xmlPath = PathManager.GetCfgDir() + "Devices\\BarcodeReaderCfg.xml";
  52. }
  53. try
  54. {
  55. LOG.WriteBackgroundLog(eEvent.INFO_BARCODEREADER, "Barcode", "start Load BarcodeReaderCfg xml file");
  56. BarcodeReaderConfig cfg = CustomXmlSerializer.Deserialize<BarcodeReaderConfig>(new FileInfo(xmlPath));
  57. if (cfg != null)
  58. {
  59. foreach (BarcodeReaderDeviceConfig config in cfg.BarcodeDeviceConfigs)
  60. {
  61. DATA.Subscribe($"{config.Name}.{BARCODEREADER_DEVICELIST}", () => config, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  62. BarcodeReaderSerialDevice barcodeReaderSerialDevice = new BarcodeReaderSerialDevice(config.Name, config.Port, config.BaudRate, (StopBits)config.StopBit,
  63. config.Data, SerialPortUtil.GetParity(config.Parity), true);
  64. //订阅事件
  65. barcodeReaderSerialDevice.OnDataChanged += BarcodeReaderSerialDevice_OnDataChanged;
  66. _barcodeReaderDeviceConfigDic[config.Name] = config;
  67. _barcodeValueDic[config.Name] = "";
  68. DATA.Subscribe($"{config.Name}.{BARCODE_VALUE}", () => _barcodeValueDic[config.Name], SubscriptionAttribute.FLAG.IgnoreSaveDB);
  69. _barcodeReaderSerialDeviceDic[config.Name] = barcodeReaderSerialDevice;
  70. DATA.Subscribe($"{config.Name}.{IS_CONNECTED}", () => barcodeReaderSerialDevice.Connected, SubscriptionAttribute.FLAG.IgnoreSaveDB);
  71. }
  72. }
  73. else
  74. {
  75. LOG.WriteBackgroundLog(eEvent.ERR_BARCODEREADER, "Barcode", "BarcodeReaderCfg object is null");
  76. }
  77. }
  78. catch
  79. {
  80. LOG.WriteBackgroundLog(eEvent.ERR_BARCODEREADER, "Barcode", "Load BarcodeReaderCfg xml failed");
  81. }
  82. }
  83. /// <summary>
  84. /// 接收到数据
  85. /// </summary>
  86. /// <param name="name"></param>
  87. /// <param name="lstContent"></param>
  88. private void BarcodeReaderSerialDevice_OnDataChanged(string name, string lstContent)
  89. {
  90. if (_barcodeReaderDeviceConfigDic.ContainsKey(name))
  91. {
  92. BarcodeReaderDeviceConfig barcoderReaderDeviceConfig = _barcodeReaderDeviceConfigDic[name];
  93. if (_barcodeValueDic.ContainsKey(barcoderReaderDeviceConfig.Name))
  94. {
  95. _barcodeValueDic[barcoderReaderDeviceConfig.Name] = lstContent.Trim();
  96. }
  97. }
  98. }
  99. /// <summary>
  100. /// 读一次条形码
  101. /// </summary>
  102. /// <param name="name"></param>
  103. public string ReadbarcodeOnce(string name)
  104. {
  105. if (_barcodeReaderSerialDeviceDic.ContainsKey(name))
  106. {
  107. if (_barcodeReaderSerialDeviceDic[name].Connected)
  108. {
  109. return _barcodeReaderSerialDeviceDic[name].ReadData();
  110. }
  111. else
  112. {
  113. LOG.WriteBackgroundLog(eEvent.ERR_BARCODEREADER, "Barcode", "BarcodeReader is not connect");
  114. }
  115. }
  116. return "";
  117. }
  118. /// <summary>
  119. /// 查询连接状态
  120. /// </summary>
  121. /// <param name="name"></param>
  122. /// <returns></returns>
  123. public bool GetDeviceConnect(string name)
  124. {
  125. if (_barcodeReaderSerialDeviceDic.ContainsKey(name))
  126. {
  127. bool result = _barcodeReaderSerialDeviceDic[name].Connected;
  128. if (result)
  129. {
  130. _barcodeValueDic[name] = "Initialized";
  131. }
  132. else
  133. {
  134. _barcodeValueDic[name] = "Not Connected";
  135. }
  136. return result;
  137. }
  138. return false;
  139. }
  140. /// <summary>
  141. /// 获取数值
  142. /// </summary>
  143. /// <param name="name"></param>
  144. /// <returns></returns>
  145. public string GetBarcodeValueByName(string name)
  146. {
  147. return _barcodeValueDic.ContainsKey(name) ? _barcodeValueDic[name] : "";
  148. }
  149. public Dictionary<string, BarcodeReaderDeviceConfig> GetReaderDeviceConfigDic()
  150. {
  151. return _barcodeReaderDeviceConfigDic;
  152. }
  153. /// <summary>
  154. /// 初始化设备
  155. /// </summary>
  156. /// <param name="name"></param>
  157. public void InitialDevice(string name)
  158. {
  159. if (_barcodeReaderSerialDeviceDic.ContainsKey(name))
  160. {
  161. _barcodeReaderSerialDeviceDic[name].Start();
  162. }
  163. }
  164. }
  165. }