using Aitex.Common.Util; using Aitex.Core.Util; using MECF.Framework.Common.Device.ResistivityProbe; using MECF.Framework.Common.Utilities; using System; using System.Collections.Generic; using System.IO.Ports; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using Aitex.Core.RT.DataCenter; using Aitex.Core.RT.Log; using Aitex.Core.RT.SCCore; namespace MECF.Framework.Common.Device.BarcodeReader { public class BarcodeReaderConfigManager : Singleton { #region 常量 private const string BARCODEREADER_DEVICELIST = "BarcodeReaderDeviceList"; private const string BARCODE_VALUE = "BarcodeValue"; private const string IS_CONNECTED = "IsConnected"; #endregion #region 内部变量 /// /// 模块设备字典 /// private Dictionary _barcodeReaderDeviceConfigDic = new Dictionary(); /// /// 模块数值字典 /// private Dictionary _barcodeValueDic = new Dictionary(); /// /// 模块串口设备字典 /// private Dictionary _barcodeReaderSerialDeviceDic = new Dictionary(); #endregion /// /// 初始化 /// public void Initialize() { bool isSimulate = SC.GetValue("System.IsSimulatorMode"); string xmlPath = ""; if (isSimulate) { xmlPath = PathManager.GetCfgDir() + "Devices\\BarcodeReaderCfg-simulator.xml"; } else { xmlPath = PathManager.GetCfgDir() + "Devices\\BarcodeReaderCfg.xml"; } try { LOG.WriteBackgroundLog(eEvent.INFO_BARCODEREADER, "Barcode", "start Load BarcodeReaderCfg xml file"); BarcodeReaderConfig cfg = CustomXmlSerializer.Deserialize(new FileInfo(xmlPath)); if (cfg != null) { foreach (BarcodeReaderDeviceConfig config in cfg.BarcodeDeviceConfigs) { DATA.Subscribe($"{config.Name}.{BARCODEREADER_DEVICELIST}", () => config, SubscriptionAttribute.FLAG.IgnoreSaveDB); BarcodeReaderSerialDevice barcodeReaderSerialDevice = new BarcodeReaderSerialDevice(config.Name, config.Port, config.BaudRate, (StopBits)config.StopBit, config.Data, SerialPortUtil.GetParity(config.Parity), true); //订阅事件 barcodeReaderSerialDevice.OnDataChanged += BarcodeReaderSerialDevice_OnDataChanged; _barcodeReaderDeviceConfigDic[config.Name] = config; _barcodeValueDic[config.Name] = ""; DATA.Subscribe($"{config.Name}.{BARCODE_VALUE}", () => _barcodeValueDic[config.Name], SubscriptionAttribute.FLAG.IgnoreSaveDB); _barcodeReaderSerialDeviceDic[config.Name] = barcodeReaderSerialDevice; DATA.Subscribe($"{config.Name}.{IS_CONNECTED}", () => barcodeReaderSerialDevice.Connected, SubscriptionAttribute.FLAG.IgnoreSaveDB); } } else { LOG.WriteBackgroundLog(eEvent.ERR_BARCODEREADER, "Barcode", "BarcodeReaderCfg object is null"); } } catch { LOG.WriteBackgroundLog(eEvent.ERR_BARCODEREADER, "Barcode", "Load BarcodeReaderCfg xml failed"); } } /// /// 接收到数据 /// /// /// private void BarcodeReaderSerialDevice_OnDataChanged(string name, string lstContent) { if (_barcodeReaderDeviceConfigDic.ContainsKey(name)) { BarcodeReaderDeviceConfig barcoderReaderDeviceConfig = _barcodeReaderDeviceConfigDic[name]; if (_barcodeValueDic.ContainsKey(barcoderReaderDeviceConfig.Name)) { _barcodeValueDic[barcoderReaderDeviceConfig.Name] = lstContent.Trim(); } } } /// /// 读一次条形码 /// /// public string ReadbarcodeOnce(string name) { if (_barcodeReaderSerialDeviceDic.ContainsKey(name)) { if (_barcodeReaderSerialDeviceDic[name].Connected) { return _barcodeReaderSerialDeviceDic[name].ReadData(); } else { LOG.WriteBackgroundLog(eEvent.ERR_BARCODEREADER, "Barcode", "BarcodeReader is not connect"); } } return ""; } /// /// 查询连接状态 /// /// /// public bool GetDeviceConnect(string name) { if (_barcodeReaderSerialDeviceDic.ContainsKey(name)) { bool result = _barcodeReaderSerialDeviceDic[name].Connected; if (result) { _barcodeValueDic[name] = "Initialized"; } else { _barcodeValueDic[name] = "Not Connected"; } return result; } return false; } /// /// 获取数值 /// /// /// public string GetBarcodeValueByName(string name) { return _barcodeValueDic.ContainsKey(name) ? _barcodeValueDic[name] : ""; } public Dictionary GetReaderDeviceConfigDic() { return _barcodeReaderDeviceConfigDic; } /// /// 初始化设备 /// /// public void InitialDevice(string name) { if (_barcodeReaderSerialDeviceDic.ContainsKey(name)) { _barcodeReaderSerialDeviceDic[name].Start(); } } } }