private bool MonitorDataConverter(CompletedMonitorCallbackParams monitorData, out Dictionary<string, object> allScreenMonitorData)
        {
            allScreenMonitorData = new Dictionary<string, object>();
            if (monitorData == null) return false;
            StringBuilder pathSB = new StringBuilder();
            byte keyByte = 0;
            List<byte> pathByteArr = new List<byte>();
            List<byte> tmpArr;
            if (monitorData.MonitorData.AllScreenMonitorCollection.Count == 0) return false;
            string key;
            foreach (var sData in monitorData.MonitorData.AllScreenMonitorCollection)
            {
                Dictionary<string, object> terMonitorData = new Dictionary<string, object>();
                #region sender card
                foreach (var senderData in sData.SenderMonitorCollection)//sender monitor data list
                {
                    keyByte = (byte)HWDeviceType.Sender;//equip type
                    pathByteArr.Clear();
                    for (int i = 0; i < senderData.MappingList.Count; i++)
                    {
                        pathByteArr.Add((byte)(int)senderData.MappingList[i].Device);
                        pathByteArr.Add((byte)senderData.MappingList[i].DeviceIndex);
                    }
                    tmpArr = new List<byte>(pathByteArr);
                    tmpArr.Add((byte)(int)PhysicalType.workstatus);
                    tmpArr.Add((byte)0);
                    key = ByteToHexStrX1(new byte[] { keyByte })
                                       + "|" + ByteToHexStrX1(new byte[] { (byte)(int)PhysicalType.workstatus })
                                       + "|" + ByteToHexStrX1(new byte[] { (byte)(tmpArr.Count / 2) })
                                       + "|" + ByteToHexStrX2(tmpArr.ToArray());
                    if (terMonitorData.ContainsKey(key)) continue;
                    terMonitorData.Add(key, (int)senderData.DeviceStatus);
                    if (senderData.DeviceStatus == DeviceWorkStatus.OK)
                    {
                        tmpArr = new List<byte>(pathByteArr);
                        tmpArr.Add((byte)(int)PhysicalType.connectedstatus);
                        tmpArr.Add((byte)0);
                        key = ByteToHexStrX1(new byte[] { keyByte })
                                           + "|" + ByteToHexStrX1(new byte[] { (byte)(int)PhysicalType.connectedstatus })
                                           + "|" + ByteToHexStrX1(new byte[] { (byte)(tmpArr.Count / 2) })
                                           + "|" + ByteToHexStrX2(tmpArr.ToArray());
                        if (terMonitorData.ContainsKey(key)) continue;
                        terMonitorData.Add(key, Convert.ToInt32(!senderData.IsDviConnected));

                        tmpArr = new List<byte>(pathByteArr);
                        tmpArr.Add((byte)(int)PhysicalType.dviRate);
                        tmpArr.Add((byte)0);
                        key = ByteToHexStrX1(new byte[] { keyByte })
                                               + "|" + ByteToHexStrX1(new byte[] { (byte)(int)PhysicalType.dviRate })
                                               + "|" + ByteToHexStrX1(new byte[] { (byte)(tmpArr.Count / 2) })
                                               + "|" + ByteToHexStrX2(tmpArr.ToArray());
                        if (terMonitorData.ContainsKey(key)) continue;
                        terMonitorData.Add(key, (int)senderData.DviRate);
                        #region Sender Card Port
                        foreach (var portInfo in senderData.ReduPortIndexCollection)
                        {
                            pathByteArr.Clear();
                            for (int i = 0; i < portInfo.MappingList.Count; i++)
                            {
                                pathByteArr.Add((byte)(int)portInfo.MappingList[i].Device);
                                pathByteArr.Add((byte)portInfo.MappingList[i].DeviceIndex);
                            }
                            tmpArr = new List<byte>(pathByteArr);
                            tmpArr.Add((byte)(int)PhysicalType.PortOfSenderStatus);
                            tmpArr.Add((byte)0);
                            key = ByteToHexStrX1(new byte[] { keyByte })
                                                   + "|" + ByteToHexStrX1(new byte[] { (byte)(int)PhysicalType.PortOfSenderStatus })
                                                   + "|" + ByteToHexStrX1(new byte[] { (byte)(tmpArr.Count / 2) })
                                                   + "|" + ByteToHexStrX2(tmpArr.ToArray());
                            if (terMonitorData.ContainsKey(key)) continue;
                            terMonitorData.Add(key, Convert.ToInt32(portInfo.IsReduState));
                        }
                        #endregion
                    }
                }
                #endregion
                #region Deconcentrator
                foreach (var deconcentratorData in sData.DeconcentratorCollection)
                {
                    pathByteArr.Clear();
                    for (int i = 0; i < deconcentratorData.MappingList.Count; i++)
                    {
                        pathByteArr.Add((byte)(int)deconcentratorData.MappingList[i].Device);
                        pathByteArr.Add((byte)deconcentratorData.MappingList[i].DeviceIndex);
                    }
                    tmpArr = new List<byte>(pathByteArr);
                    tmpArr.Add((byte)(int)PhysicalType.workstatus);
                    tmpArr.Add((byte)0);
                    key = ByteToHexStrX1(new byte[] { keyByte })
                       + "|" + ByteToHexStrX1(new byte[] { (byte)(int)PhysicalType.workstatus })
                       + "|" + ByteToHexStrX1(new byte[] { (byte)(tmpArr.Count / 2) })
                       + "|" + ByteToHexStrX2(tmpArr.ToArray());
                    if (terMonitorData.ContainsKey(key))
                        terMonitorData.Add(key, (int)deconcentratorData.DeviceStatus);
                }
                #endregion
                #region scanner card
                keyByte = (byte)HWDeviceType.Scanner;//equip type
                foreach (var scannerData in sData.ScannerMonitorCollection)
                {
                    pathByteArr.Clear();
                    for (int i = 0; i < scannerData.MappingList.Count; i++)
                    {
                        pathByteArr.Add((byte)(int)scannerData.MappingList[i].Device);
                        pathByteArr.Add((byte)scannerData.MappingList[i].DeviceIndex);
                    }
                    tmpArr = new List<byte>(pathByteArr);
                    tmpArr.Add((byte)(int)PhysicalType.workstatus);
                    tmpArr.Add((byte)0);

                    key = ByteToHexStrX1(new byte[] { keyByte })
                                       + "|" + ByteToHexStrX1(new byte[] { (byte)(int)PhysicalType.workstatus })
                                       + "|" + ByteToHexStrX1(new byte[] { (byte)(tmpArr.Count / 2) })
                                       + "|" + ByteToHexStrX2(tmpArr.ToArray());

                    if (terMonitorData.ContainsKey(key)) continue;
                    terMonitorData.Add(key, (int)scannerData.DeviceStatus);
                    if (scannerData.DeviceStatus == DeviceWorkStatus.OK)
                    {
                        tmpArr = new List<byte>(pathByteArr);
                        tmpArr.Add((byte)(int)PhysicalType.temperature);
                        tmpArr.Add((byte)0);
                        key = ByteToHexStrX1(new byte[] { keyByte })
                                           + "|" + ByteToHexStrX1(new byte[] { (byte)(int)PhysicalType.temperature })
                                           + "|" + ByteToHexStrX1(new byte[] { (byte)(tmpArr.Count / 2) })
                                           + "|" + ByteToHexStrX2(tmpArr.ToArray());
                        if (terMonitorData.ContainsKey(key)) continue;
                        terMonitorData.Add(key, scannerData.Temperature);
                        tmpArr = new List<byte>(pathByteArr);
                        tmpArr.Add((byte)(int)PhysicalType.voltage);
                        tmpArr.Add((byte)0);
                        key = ByteToHexStrX1(new byte[] { keyByte })
                                           + "|" + ByteToHexStrX1(new byte[] { (byte)(int)PhysicalType.voltage })
                                           + "|" + ByteToHexStrX1(new byte[] { (byte)(tmpArr.Count / 2) })
                                           + "|" + ByteToHexStrX2(tmpArr.ToArray());
                        if (terMonitorData.ContainsKey(key)) continue;
                        terMonitorData.Add(key, scannerData.Voltage);
                    }
                }
                #endregion
                #region function card
                keyByte = (byte)HWDeviceType.FunctionCard;//equip type
                foreach (var funCardData in sData.FunctionCardInfoCollection)
                {
                    pathByteArr.Clear();
                    for (int i = 0; i < funCardData.MappingList.Count; i++)
                    {
                        pathByteArr.Add((byte)(int)funCardData.MappingList[i].Device);
                        pathByteArr.Add((byte)funCardData.MappingList[i].DeviceIndex);
                    }
                    tmpArr = new List<byte>(pathByteArr);
                    tmpArr.Add((byte)(int)PhysicalType.workstatus);
                    tmpArr.Add((byte)0);
                    key = ByteToHexStrX1(new byte[] { keyByte })
                                       + "|" + ByteToHexStrX1(new byte[] { (byte)(int)PhysicalType.workstatus })
                                       + "|" + ByteToHexStrX1(new byte[] { (byte)(tmpArr.Count / 2) })
                                       + "|" + ByteToHexStrX2(tmpArr.ToArray());
                    if (terMonitorData.ContainsKey(key)) continue;
                    terMonitorData.Add(key, (int)funCardData.DeviceStatus);
                    if (funCardData.DeviceStatus == DeviceWorkStatus.OK)
                    {
                        List<byte> funCardPathByteArr = new List<byte>();
                        //functionCard PeripheralInfo
                        foreach (var index in funCardData.PeripheralInfoDict.Keys)
                        {
                            PeripheralMonitorBaseInfo perInfo = funCardData.PeripheralInfoDict[index];
                            if (perInfo is LightSensorMonitorInfo)
                            {
                                if (perInfo.DeviceStatus == DeviceWorkStatus.OK)
                                {
                                    tmpArr = new List<byte>(pathByteArr);
                                    tmpArr.Add((byte)(int)PhysicalType.brightness);
                                    tmpArr.Add((byte)(byte)index);
                                    LightSensorMonitorInfo lightSensorInfo = perInfo as LightSensorMonitorInfo;
                                    key = ByteToHexStrX1(new byte[] { keyByte })
                                          + "|" + ByteToHexStrX1(new byte[] { (byte)(int)PhysicalType.brightness })
                                          + "|" + ByteToHexStrX1(new byte[] { (byte)(tmpArr.Count / 2) })
                                          + "|" + ByteToHexStrX2(tmpArr.ToArray());
                                    if (terMonitorData.ContainsKey(key)) continue;
                                    terMonitorData.Add(key, lightSensorInfo.Lux);
                                }
                            }
                            else if (perInfo is TemperatureSensorMonitorInfo)
                            {
                                if (perInfo.DeviceStatus == DeviceWorkStatus.OK)
                                {
                                    tmpArr = new List<byte>(pathByteArr);
                                    tmpArr.Add((byte)(int)PhysicalType.temperature);
                                    tmpArr.Add((byte)(byte)index);
                                    TemperatureSensorMonitorInfo temSensorInfo = perInfo as TemperatureSensorMonitorInfo;
                                    key = ByteToHexStrX1(new byte[] { keyByte })
                                          + "|" + ByteToHexStrX1(new byte[] { (byte)(int)PhysicalType.temperature })
                                          + "|" + ByteToHexStrX1(new byte[] { (byte)(tmpArr.Count / 2) })
                                          + "|" + ByteToHexStrX2(tmpArr.ToArray());
                                    if (terMonitorData.ContainsKey(key)) continue;
                                    terMonitorData.Add(key, temSensorInfo.Tempearture);
                                }
                            }
                            else if (perInfo is HumiditySensorMonitorInfo)
                            {
                                if (perInfo.DeviceStatus == DeviceWorkStatus.OK)
                                {
                                    tmpArr = new List<byte>(pathByteArr);
                                    tmpArr.Add((byte)(int)PhysicalType.humidity);
                                    tmpArr.Add((byte)(byte)index);
                                    HumiditySensorMonitorInfo humiditySensorInfo = perInfo as HumiditySensorMonitorInfo;
                                    key = ByteToHexStrX1(new byte[] { keyByte })
                                          + "|" + ByteToHexStrX1(new byte[] { (byte)(int)PhysicalType.humidity })
                                          + "|" + ByteToHexStrX1(new byte[] { (byte)(tmpArr.Count / 2) })
                                          + "|" + ByteToHexStrX2(tmpArr.ToArray());
                                    if (terMonitorData.ContainsKey(key)) continue;
                                    terMonitorData.Add(key, humiditySensorInfo.Humidity);
                                }
                            }
                        }
                    }
                }
                #endregion
                #region monitor card
                keyByte = (byte)(HWDeviceType.MonitorCard);//equip type
                foreach (var monitorCardData in sData.MonitorCardInfoCollection)
                {
                    if (monitorCardData == null) continue;
                    pathByteArr.Clear();
                    for (int i = 0; i < monitorCardData.MappingList.Count; i++)
                    {
                        pathByteArr.Add((byte)(int)monitorCardData.MappingList[i].Device);
                        pathByteArr.Add((byte)monitorCardData.MappingList[i].DeviceIndex);
                    }
                    #region common data
                    tmpArr = new List<byte>(pathByteArr);
                    tmpArr.Add((byte)(int)PhysicalType.workstatus);
                    tmpArr.Add((byte)0);
                    key = ByteToHexStrX1(new byte[] { keyByte })
                                       + "|" + ByteToHexStrX1(new byte[] { (byte)(int)PhysicalType.workstatus })
                                       + "|" + ByteToHexStrX1(new byte[] { (byte)(tmpArr.Count / 2) })
                                       + "|" + ByteToHexStrX2(tmpArr.ToArray());
                    if (terMonitorData.ContainsKey(key)) continue;
                    terMonitorData.Add(key, (int)monitorCardData.DeviceStatus);

                    if (monitorCardData.DeviceStatus == DeviceWorkStatus.OK)
                    {
                        tmpArr = new List<byte>(pathByteArr);
                        tmpArr.Add((byte)(int)PhysicalType.humidity);
                        tmpArr.Add((byte)0);
                        if (monitorCardData.HumidityUInfo != null && monitorCardData.HumidityUInfo.IsUpdate)
                        {
                            key = ByteToHexStrX1(new byte[] { keyByte })
                                               + "|" + ByteToHexStrX1(new byte[] { (byte)(int)PhysicalType.humidity })
                                               + "|" + ByteToHexStrX1(new byte[] { (byte)(tmpArr.Count / 2) })
                                               + "|" + ByteToHexStrX2(tmpArr.ToArray());
                            if (terMonitorData.ContainsKey(key)) continue;
                            terMonitorData.Add(key, monitorCardData.HumidityUInfo.Humidity);
                        }
                        tmpArr = new List<byte>(pathByteArr);
                        tmpArr.Add((byte)(int)PhysicalType.doorOpenStatus);
                        tmpArr.Add((byte)0);
                        if (monitorCardData.CabinetDoorUInfo != null && monitorCardData.CabinetDoorUInfo.IsUpdate)
                        {
                            key = ByteToHexStrX1(new byte[] { keyByte })
                                               + "|" + ByteToHexStrX1(new byte[] { (byte)(int)PhysicalType.doorOpenStatus })
                                               + "|" + ByteToHexStrX1(new byte[] { (byte)(tmpArr.Count / 2) })
                                               + "|" + ByteToHexStrX2(tmpArr.ToArray());
                            if (terMonitorData.ContainsKey(key)) continue;
                            terMonitorData.Add(key, Convert.ToInt32(monitorCardData.CabinetDoorUInfo.IsDoorOpen));
                        }
                        tmpArr = new List<byte>(pathByteArr);
                        tmpArr.Add((byte)(int)PhysicalType.smoke);
                        tmpArr.Add((byte)0);
                        if (monitorCardData.SmokeUInfo != null && monitorCardData.SmokeUInfo.IsUpdate)
                        {
                            key = ByteToHexStrX1(new byte[] { keyByte })
                                               + "|" + ByteToHexStrX1(new byte[] { (byte)(int)PhysicalType.smoke })
                                               + "|" + ByteToHexStrX1(new byte[] { (byte)(tmpArr.Count / 2) })
                                               + "|" + ByteToHexStrX2(tmpArr.ToArray());
                            if (terMonitorData.ContainsKey(key)) continue;
                            terMonitorData.Add(key, Convert.ToInt32(monitorCardData.SmokeUInfo.IsSmokeAlarm));
                        }
                        tmpArr = new List<byte>(pathByteArr);
                        tmpArr.Add((byte)(int)PhysicalType.temperature);
                        tmpArr.Add((byte)0);
                        if (monitorCardData.TemperatureUInfo != null && monitorCardData.TemperatureUInfo.IsUpdate)
                        {
                            key = ByteToHexStrX1(new byte[] { keyByte })
                                               + "|" + ByteToHexStrX1(new byte[] { (byte)(int)PhysicalType.temperature })
                                               + "|" + ByteToHexStrX1(new byte[] { (byte)(tmpArr.Count / 2) })
                                               + "|" + ByteToHexStrX2(tmpArr.ToArray());
                            if (terMonitorData.ContainsKey(key)) continue;
                            terMonitorData.Add(key, monitorCardData.TemperatureUInfo.Temperature);
                        }
                        tmpArr = new List<byte>(pathByteArr);
                        tmpArr.Add((byte)(int)PhysicalType.SocketCableStatus);
                        tmpArr.Add((byte)0);
                        if (monitorCardData.SocketCableUInfo != null)
                        {
                            WorkStatusType socketCableStatus = IsSocketCableStatusOK(monitorCardData);
                            if (socketCableStatus != WorkStatusType.Unknown)
                            {
                                key = ByteToHexStrX1(new byte[] { keyByte })
                                                   + "|" + ByteToHexStrX1(new byte[] { (byte)(int)PhysicalType.SocketCableStatus })
                                                   + "|" + ByteToHexStrX1(new byte[] { (byte)(tmpArr.Count / 2) })
                                                   + "|" + ByteToHexStrX2(tmpArr.ToArray());
                                if (terMonitorData.ContainsKey(key)) continue;
                                terMonitorData.Add(key, (int)socketCableStatus);
                            }
                        }
                    #endregion
                        #region list data
                        //monitorCard voltage
                        if (monitorCardData.PowerUInfo != null && monitorCardData.PowerUInfo.IsUpdate)
                        {
                            foreach (var monitorPower in monitorCardData.PowerUInfo.PowerMonitorInfoCollection)
                            {
                                tmpArr = new List<byte>(pathByteArr);
                                tmpArr.Add((byte)(int)PhysicalType.voltage);
                                tmpArr.Add((byte)monitorPower.Key);
                                key = ByteToHexStrX1(new byte[] { keyByte })
                                                   + "|" + ByteToHexStrX1(new byte[] { (byte)(int)PhysicalType.voltage })
                                                   + "|" + ByteToHexStrX1(new byte[] { (byte)(tmpArr.Count / 2) })
                                                   + "|" + ByteToHexStrX2(tmpArr.ToArray());
                                if (terMonitorData.ContainsKey(key)) continue;
                                terMonitorData.Add(key, monitorPower.Value);
                            }
                        }
                        //monitorCard Fan
                        if (monitorCardData.FansUInfo != null && monitorCardData.FansUInfo.IsUpdate)
                        {
                            foreach (var monitorFan in monitorCardData.FansUInfo.FansMonitorInfoCollection)
                            {
                                tmpArr = new List<byte>(pathByteArr);
                                tmpArr.Add((byte)(int)PhysicalType.fanspeed);
                                tmpArr.Add((byte)monitorFan.Key);
                                key = ByteToHexStrX1(new byte[] { keyByte })
                                                   + "|" + ByteToHexStrX1(new byte[] { (byte)(int)PhysicalType.fanspeed })
                                                   + "|" + ByteToHexStrX1(new byte[] { (byte)(tmpArr.Count / 2) })
                                                   + "|" + ByteToHexStrX2(tmpArr.ToArray());
                                if (terMonitorData.ContainsKey(key)) continue;
                                terMonitorData.Add(key, monitorFan.Value);
                            }
                        }
                        //monitorCard SocketCable
                        //if (monitorCardData.SocketCableUInfo.IsUpdate)
                        //{
                        //    foreach (var socketcableInfo in monitorCardData.SocketCableUInfo.SocketCableInfoCollection)
                        //    {
                        //        if (socketcableInfo.DeviceStatus == DeviceWorkStatus.OK) continue;
                        //        socketcableInfo.SocketCableInfoDict
                        //    }
                        //}
                        #endregion
                    }
                }
                #endregion
                if (!allScreenMonitorData.ContainsKey(sData.ScreenUDID))
                    allScreenMonitorData.Add(sData.ScreenUDID, terMonitorData);
            }
            return true;
        }
        private void ReadMonitorData(IAsyncResult result)
        {
            lock (_objLock)
            {
                ReadMonitorDataErrType res = _moniDatareader.BeginReadData(new CompletedMonitorCallback(
                        (cmpParams, userToken) =>
                        {
                            if (cmpParams != null)
                            {
                                string cmpStr = CommandTextParser.GetJsonSerialization<CompletedMonitorCallbackParams>(cmpParams);
                                _cmpParams = CommandTextParser.GetDeJsonSerialization<CompletedMonitorCallbackParams>(cmpStr);
                            }
                            ReadDataCallback(_cmpParams, userToken);
                        }), DataType.all);

                if (res == ReadMonitorDataErrType.NoServerObj)
                {
                    //取消重新读取,直接提示用户
                    //_fLogService.Error("服务没有注册,需重新注册...");
                    //AsyncRestartDataReader(false);
                    //UpdateConfigMessage(TransferType.M3_UpdateLedScreenConfigInfo, string.Empty);
                    Interlocked.Exchange(ref _isReadingMonitorData, 0);
                    return;
                }
                else if (res != ReadMonitorDataErrType.OK)
                {
                    State = DataSourceState.Error;
                    SendData("M3_StateData", res.ToString());
                    MonitorException = new Exception(res.ToString()) { Source = "M3_MonitorData" };
                    if (res != ReadMonitorDataErrType.BusyWorking)
                    {
                        _fLogService.Debug("ReadMonitorData BusyWorking释放");
                        Interlocked.Exchange(ref _isReadingMonitorData, 0);
                    }
                }
            }
        }
        private CompletedMonitorCallbackParams GetCompletedMonitorCallbackParams()
        {
            CompletedMonitorCallbackParams param = new CompletedMonitorCallbackParams();

            AllMonitorData monitorData = new AllMonitorData();
            param.MonitorData = monitorData;

            int createScreenCount = 3;
            int senderCount = 2;
            int scannerCount = 2;
            int fansCount = 2;
            int powerCount = 2;
            int cableCount = 1;
            int functionCount = 2;
            int peripheralCount = 2;
            int comFunctionCount = 2;
            const int deconcentratorCount = 1;
            for (int scrIndex = 0; scrIndex < createScreenCount; scrIndex++)
            {
                string scrUDID = "1306280000015920-" + scrIndex.ToString("X2");
                ScreenModnitorData scrMonitorData = new ScreenModnitorData(scrUDID);

                for (int senderIndex = 0; senderIndex < senderCount; senderIndex++)
                {
            #region 添加发送卡数据
                    SendStatusMsg("StartReadDVIData" + senderIndex);
                    SenderMonitorInfo sendInfo = new SenderMonitorInfo();
                    sendInfo.DeviceStatus = DeviceWorkStatus.OK;
                    sendInfo.MappingList.Add(new DeviceSearchMapping(HWDeviceType.Sender, senderIndex));

                    sendInfo.IsDviConnected = true;
                    sendInfo.DviRate = 60;
                    sendInfo.ReduPortIndexCollection.Add(new PortOfSenderMonitorInfo());
                    sendInfo.ReduPortIndexCollection.Add(new PortOfSenderMonitorInfo());
                    scrMonitorData.SenderMonitorCollection.Add(sendInfo);
                    SendStatusMsg("FinishReadDVIData" + senderIndex);
            #endregion

            #region 分线器数据
                    scrMonitorData.DeconcentratorCollection = new List<DeconcentratorMonitorInfo>();
                    for (int deconcentratoIndex = 0; deconcentratoIndex < deconcentratorCount; deconcentratoIndex++)
                    {
                        SendStatusMsg("Start分线器数据Data" + deconcentratoIndex);
                        DeconcentratorMonitorInfo deconcentratorInfo = new DeconcentratorMonitorInfo();
                        deconcentratorInfo.DeviceStatus = DeviceWorkStatus.OK;
                        deconcentratorInfo.MappingList.Add(new DeviceSearchMapping(HWDeviceType.Sender, senderIndex));
                        if (deconcentratoIndex < 1)
                            deconcentratorInfo.MappingList.Add(new DeviceSearchMapping(HWDeviceType.PortOfSender, 0));
                        else
                            deconcentratorInfo.MappingList.Add(new DeviceSearchMapping(HWDeviceType.PortOfSender, 1));
                        scrMonitorData.DeconcentratorCollection.Add(deconcentratorInfo);
                        SendStatusMsg("End分线器数据Data" + deconcentratoIndex);
                    }
            #endregion
                    for (int scannerIndex = 0; scannerIndex < scannerCount; scannerIndex++)
                    {
            #region 添加接收卡数据
                        SendStatusMsg("Start接收卡数据Data" + scannerIndex);
                        ScannerMonitorInfo scannerInfo = new ScannerMonitorInfo();
                        scannerInfo.DeviceStatus = DeviceWorkStatus.OK;

                        scannerInfo.MappingList.Add(new DeviceSearchMapping(HWDeviceType.Sender, senderIndex));
                        if (scannerIndex < 50)
                        {
                            scannerInfo.MappingList.Add(new DeviceSearchMapping(HWDeviceType.PortOfSender, 0));
                        }
                        else
                        {
                            scannerInfo.MappingList.Add(new DeviceSearchMapping(HWDeviceType.PortOfSender, 1));
                        }
                        scannerInfo.MappingList.Add(new DeviceSearchMapping(HWDeviceType.Scanner, scannerIndex));

                        scannerInfo.Temperature = 25.5f;
                        scannerInfo.Voltage = 5.5f;
                        scrMonitorData.ScannerMonitorCollection.Add(scannerInfo);
                        SendStatusMsg("End接收卡数据Data" + scannerIndex);
            #endregion

            #region 添加监控卡数据
                        //MonitorCardMonitorInfo
                        SendStatusMsg("Start监控卡数据Data" + scannerIndex);
                        MonitorCardMonitorInfo monitorCardInfo = new MonitorCardMonitorInfo();
                        monitorCardInfo.DeviceStatus = DeviceWorkStatus.OK;

                        monitorCardInfo.MappingList.Add(new DeviceSearchMapping(HWDeviceType.Sender, senderIndex));
                        if (scannerIndex < 50)
                        {
                            monitorCardInfo.MappingList.Add(new DeviceSearchMapping(HWDeviceType.PortOfSender, 0));
                        }
                        else
                        {
                            monitorCardInfo.MappingList.Add(new DeviceSearchMapping(HWDeviceType.PortOfSender, 1));
                        }
                        monitorCardInfo.MappingList.Add(new DeviceSearchMapping(HWDeviceType.Scanner, scannerIndex));
                        monitorCardInfo.MappingList.Add(new DeviceSearchMapping(HWDeviceType.MonitorCard, 0));

                        monitorCardInfo.TemperatureUInfo = new MCTemperatureUpdateInfo() { IsUpdate = true, Temperature = 20.5f };
                        monitorCardInfo.HumidityUInfo = new MCHumidityUpdateInfo() { IsUpdate = true, Humidity = 80.5f };
                        monitorCardInfo.SmokeUInfo = new MCSmokeUpdateInfo() { IsUpdate = true, IsSmokeAlarm = false };
                        monitorCardInfo.CabinetDoorUInfo = new MCDoorUpdateInfo() { IsUpdate = true, IsDoorOpen = true };

                        SendStatusMsg("End监控卡数据Data" + scannerIndex);
            #region 风扇数据
                        SendStatusMsg("Start风扇数据Data" + scannerIndex);
                        MCFansUpdateInfo mcFansUpdateInfo = new MCFansUpdateInfo();
                        mcFansUpdateInfo.IsUpdate = true;
                        mcFansUpdateInfo.FansMonitorInfoCollection = new SerializableDictionary<int, int>();
                        for (int fansIndex = 0; fansIndex < fansCount; fansIndex++)
                        {
                            int speed = 3000;
                            if (scannerIndex < 50)
                            {
                                speed = 3500;
                            }
                            mcFansUpdateInfo.FansMonitorInfoCollection.Add(fansIndex, speed);
                        }
                        monitorCardInfo.FansUInfo = mcFansUpdateInfo;
                        SendStatusMsg("End风扇数据Data" + scannerIndex);
            #endregion

            #region 电源数据
                        SendStatusMsg("Start电源数据Data" + scannerIndex);
                        MCPowerUpdateInfo mcPowerUInfo = new MCPowerUpdateInfo();
                        mcPowerUInfo.IsUpdate = true;
                        mcPowerUInfo.PowerMonitorInfoCollection = new SerializableDictionary<int,float>();
                        for (int pwoerIndex = 0; pwoerIndex < powerCount; pwoerIndex++)
                        {
                            float power = 5.0f;
                            if (scannerIndex < 50)
                            {
                                power = 4.5f;
                            }

                            mcPowerUInfo.PowerMonitorInfoCollection.Add(pwoerIndex, power);
                        }
                        monitorCardInfo.PowerUInfo = mcPowerUInfo;
                        SendStatusMsg("End电源数据Data" + scannerIndex);
            #endregion

            #region 排线数据
                        SendStatusMsg("Start排线数据Data" + scannerIndex);
                        List<SocketCableMonitorInfo> socketCableInfoCollection = new List<SocketCableMonitorInfo>();
                        for (int cableIndex = 0; cableIndex < cableCount; cableIndex++)
                        {
                            SocketCableMonitorInfo cableInfo = new SocketCableMonitorInfo();
                            cableInfo.DeviceStatus = DeviceWorkStatus.OK;

                            cableInfo.MappingList.Add(new DeviceSearchMapping(HWDeviceType.Sender, senderIndex));
                            if (scannerIndex < 50)
                            {
                                cableInfo.MappingList.Add(new DeviceSearchMapping(HWDeviceType.PortOfSender, 0));
                            }
                            else
                            {
                                cableInfo.MappingList.Add(new DeviceSearchMapping(HWDeviceType.PortOfSender, 1));
                            }
                            cableInfo.MappingList.Add(new DeviceSearchMapping(HWDeviceType.Scanner, scannerIndex));
                            cableInfo.MappingList.Add(new DeviceSearchMapping(HWDeviceType.MonitorCard, 0));
                            cableInfo.MappingList.Add(new DeviceSearchMapping(HWDeviceType.SocketOfMonitorCard, cableIndex));
                            for (int groupIndex = 0; groupIndex < 8; groupIndex++)
                            {
                                List<SocketCableStatus> oneGroupStatusList = new List<SocketCableStatus>();
                                SocketCableStatus cableStatus = new SocketCableStatus();
                                cableStatus.CableType = SocketCableType.ABCD_Signal;
                                cableStatus.IsCableOK = true;
                                oneGroupStatusList.Add(cableStatus);

                                cableStatus = new SocketCableStatus();
                                cableStatus.CableType = SocketCableType.CTRL_Signal;
                                cableStatus.IsCableOK = true;
                                oneGroupStatusList.Add(cableStatus);

                                cableStatus = new SocketCableStatus();
                                cableStatus.CableType = SocketCableType.DCLK_Signal;
                                cableStatus.IsCableOK = true;
                                oneGroupStatusList.Add(cableStatus);

                                cableStatus = new SocketCableStatus();
                                cableStatus.CableType = SocketCableType.LAT_Signal;
                                cableStatus.IsCableOK = true;
                                oneGroupStatusList.Add(cableStatus);

                                cableStatus = new SocketCableStatus();
                                cableStatus.CableType = SocketCableType.OE_Signal;
                                cableStatus.IsCableOK = false;
                                oneGroupStatusList.Add(cableStatus);

                                cableStatus = new SocketCableStatus();
                                cableStatus.CableType = SocketCableType.Red_Signal;
                                cableStatus.IsCableOK = false;
                                oneGroupStatusList.Add(cableStatus);

                                cableStatus = new SocketCableStatus();
                                cableStatus.CableType = SocketCableType.Green_Signal;
                                cableStatus.IsCableOK = false;
                                oneGroupStatusList.Add(cableStatus);

                                cableStatus = new SocketCableStatus();
                                cableStatus.CableType = SocketCableType.Blue_Signal;
                                cableStatus.IsCableOK = false;
                                oneGroupStatusList.Add(cableStatus);

                                cableStatus = new SocketCableStatus();
                                cableStatus.CableType = SocketCableType.VRed_Signal;
                                cableStatus.IsCableOK = false;
                                oneGroupStatusList.Add(cableStatus);

                                cableInfo.SocketCableInfoDict.Add(groupIndex, oneGroupStatusList);

                            }
                            socketCableInfoCollection.Add(cableInfo);
                            monitorCardInfo.SocketCableUInfo = new MCSocketCableUpdateInfo() { IsUpdate = true, SocketCableInfoCollection = socketCableInfoCollection };
                        }
                        SendStatusMsg("End排线数据Data" + scannerIndex);
            #endregion

                        scrMonitorData.MonitorCardInfoCollection.Add(monitorCardInfo);
            #endregion
                    }

                    for (int functionIndex = 0; functionIndex < functionCount; functionIndex++)
                    {
                        SendStatusMsg("Start多功能卡数据Data" + functionIndex);
            #region 添加网口上的多功能卡
                        FunctionCardMonitorInfo functionInfo = new FunctionCardMonitorInfo();
                        functionInfo.PeripheralInfoDict = new SerializableDictionary<int, PeripheralMonitorBaseInfo>();
                        functionInfo.DeviceStatus = DeviceWorkStatus.OK;

                        functionInfo.MappingList.Add(new DeviceSearchMapping(HWDeviceType.Sender, senderIndex));
                        functionInfo.MappingList.Add(new DeviceSearchMapping(HWDeviceType.PortOfSender, 1));
                        functionInfo.MappingList.Add(new DeviceSearchMapping(HWDeviceType.FunctionCard, functionIndex));

                        for (int sensorIndex = 0; sensorIndex < peripheralCount; sensorIndex++)
                        {
                            PeripheralMonitorBaseInfo sensorInfo;
                            if (sensorIndex <= 2)
                            {
                                sensorInfo = new LightSensorMonitorInfo() { DeviceStatus = DeviceWorkStatus.OK, Lux = 280 };
                            }
                            else
                            {
                                sensorInfo = new TemperatureSensorMonitorInfo() { DeviceStatus = DeviceWorkStatus.OK, Tempearture = 18.5f };
                            }
                            functionInfo.PeripheralInfoDict.Add(sensorIndex, sensorInfo);
                        }
                        SendStatusMsg("End多功能卡数据Data" + functionIndex);
                        scrMonitorData.FunctionCardInfoCollection.Add(functionInfo);
            #endregion
                    }

                }
                monitorData.AllScreenMonitorCollection.Add(scrMonitorData);
            }

            //for (int comFuncIndex = 0; comFuncIndex < comFunctionCount; comFuncIndex++ )
            //{
            //    #region 添加串口上的多功能卡
            //    FunctionCardMonitorInfo functionInfo = new FunctionCardMonitorInfo();
            //    functionInfo.DeviceStatus = DeviceWorkStatus.OK;

            //    functionInfo.MappingList.Add(new DeviceSearchMapping(HWDeviceType.FunctionCard, comFuncIndex));

            //    for (int sensorIndex = 0; sensorIndex < sensorCount; sensorIndex++)
            //    {
            //        LightSensorMonitorInfo sensorInfo = new LightSensorMonitorInfo();
            //        sensorInfo.MappingList.Add(new DeviceSearchMapping(HWDeviceType.FunctionCard, comFuncIndex));
            //        sensorInfo.MappingList.Add(new DeviceSearchMapping(HWDeviceType.LightSensor, 0));

            //        sensorInfo.Birghtness = 2600;
            //        functionInfo.LightSensorInfoDict.Add(sensorIndex, sensorInfo);
            //    }
            //    #endregion
            //}

            return param;
        }
        //private SerializableDictionary<string, List<byte>> _senderRetryInfoDic;
        //private SerializableDictionary<string, List<ScanBoardRegionInfo>> _scanRetryInfoDic;
        private void ReadDataCallback(CompletedMonitorCallbackParams cmpParams, object userToken)
        {
            //if (userToken != null)
            //{
            //    SenderMonitorDataNeedRetry(cmpParams, _ledAlarmConfigDic, out _senderRetryInfoDic);
            //    if (_senderRetryInfoDic.Count != 0)
            //    {
            //        _isNeedRetry = true;
            //        _dataType = DataType.senderData;
            //        return;
            //    }
            //    else
            //    {
            //        ScannerMonitorDataNeedRetry(cmpParams, _ledAlarmConfigDic, out _scanRetryInfoDic);
            //        if (_scanRetryInfoDic.Count != 0)
            //        {
            //            _isNeedRetry = true;
            //            _dataType = DataType.scannerData;
            //            return;
            //        }
            //    }
            //}
            //_isNeedRetry = false;
            try
            {
                if (cmpParams != null && cmpParams.MonitorData != null
               && cmpParams.MonitorData.AllScreenMonitorCollection != null && cmpParams.MonitorData.AllScreenMonitorCollection.Count > 0)
                {
                    SendData("M3_MonitoringData",
                        CommandTextParser.GetJsonSerialization<AllMonitorData>(cmpParams.MonitorData));
                    SendData("M3_StateData", "ReadMonitoringSuccess");
                }
                else
                {
                    SendData("M3_MonitoringData",
                        CommandTextParser.GetJsonSerialization<AllMonitorData>(cmpParams.MonitorData));
                    SendData("M3_StateData", "ReadMonitoringFailed");
                }

                WriteLog("ReadDataCallback回调开始,首先获取计算机的相关参数...");
                #region pc hardware information
                string pcInfo = string.Empty;
                pcInfo += _sysInfo.CpuLoad;
                pcInfo += "+" + _sysInfo.PhysicalMemory;
                pcInfo += "+" + _sysInfo.MemoryAvailable;

                List<HDDInfo> hInfoList = _sysInfo.GetLogicalDrives();
                foreach (var hddInfo in hInfoList)
                {
                    pcInfo += "+" + hddInfo.DiskName + "-" + hddInfo.TotalSize + "-" + hddInfo.FreeSpace;
                }
                DataPoint pcDP = new DataPoint();
                pcDP.Key = ByteToHexStrX1(new byte[] { (byte)HWDeviceType.ComputerHWInfo })
                                           + "|" + ByteToHexStrX1(new byte[] { (byte)(int)PhysicalType.ComputerStatus })
                                           + "|" + ByteToHexStrX1(new byte[] { (byte)0 })
                                           + "|" + ByteToHexStrX2(new byte[] { (byte)1 });
                pcDP.Value = pcInfo;
                #endregion
                List<AutoReadResultData> brightList = _moniDatareader.AutoReadResultDatas();
                WriteLog("ReadDataCallback将数据对外发出...");
                Dictionary<string, object> allScreenMonitorData;
                List<DataPoint> dpList;
                if (MonitorDataConverter(cmpParams, out allScreenMonitorData))
                {
                    if (allScreenMonitorData.Count != 0)
                    {
                        dpList = new List<DataPoint>();
                        foreach (var item in allScreenMonitorData.Keys)
                        {
                            dpList = new List<DataPoint>();
                            foreach (var dataPoint in ((Dictionary<string, object>)allScreenMonitorData[item]).Keys)
                            {
                                DataPoint dp = new DataPoint();
                                dp.Key = dataPoint;
                                dp.Value = ((Dictionary<string, object>)allScreenMonitorData[item])[dataPoint].ToString();
                                dpList.Add(dp);
                            }

                            #region brightness
                            DataPoint pcDPBright = new DataPoint();
                            DataPoint pcDPSensorBright = new DataPoint();
                            if (brightList != null && brightList.Count != 0)
                            {
                                AutoReadResultData brightnessData = brightList.Find(a => a.SN == item);
                                if (brightnessData != null && brightnessData.AutoBrightInfo != null)
                                {
                                    if (brightnessData.AutoBrightInfo.IsSucess)
                                    {
                                        pcDPBright.Value = brightnessData.AutoBrightInfo.BrightValue.ToString();
                                    }
                                    else
                                    {
                                        pcDPBright.Value = "-1";
                                    }
                                }
                                if (brightnessData != null && brightnessData.AutoSensorInfo != null)
                                {
                                    if (brightnessData.AutoSensorInfo.IsSucess)
                                    {
                                        pcDPSensorBright.Value = brightnessData.AutoSensorInfo.SensorValue.ToString();
                                    }
                                    else
                                    {
                                        pcDPSensorBright.Value = "-1";
                                    }
                                }

                            }
                            else
                            {
                                pcDPBright.Value = "-1";
                                pcDPSensorBright.Value = "-1";
                            }
                            pcDPBright.Key = ByteToHexStrX1(new byte[] { (byte)HWDeviceType.Screen })
                                                       + "|" + ByteToHexStrX1(new byte[] { (byte)(int)PhysicalType.brightness })
                                                       + "|" + ByteToHexStrX1(new byte[] { (byte)0 })
                                                       + "|" + ByteToHexStrX2(new byte[] { (byte)1 });
                            pcDPSensorBright.Key = ByteToHexStrX1(new byte[] { (byte)HWDeviceType.Screen })
                                                       + "|" + ByteToHexStrX1(new byte[] { (byte)(int)PhysicalType.EnvironmentBrightness })
                                                       + "|" + ByteToHexStrX1(new byte[] { (byte)0 })
                                                       + "|" + ByteToHexStrX2(new byte[] { (byte)1 });
                            #endregion
                            dpList.Add(pcDP);
                            dpList.Add(pcDPBright);
                            dpList.Add(pcDPSensorBright);
                            SendData("MonitoringData", new DataPoint() { Key = item, Value = dpList });
                        }
                    }
                }
                WriteLog("ReadDataCallback将数据对外发出完成...");
            }
            catch (Exception ex)
            {
                WriteLog("ReadDataCallback将数据返回时出现异常:" + ex.ToString());
                _fLogService.Error("ExistCatch:ReadDataCallback将数据返回时出现异常:" + ex.ToString());
            }
            finally
            {
                _fLogService.Debug("ReadDataCallback BusyWorking释放");
                Interlocked.Exchange(ref _isReadingMonitorData, 0);
            }
        }
 private void NotifyCompleteAllMonitor()
 {
     _fLogService.Info("开始通知数据采集完成");
     if (_readHWParams != null && _readHWParams.CallBack != null)
     {
         _stopwatch.Stop();
         CompletedMonitorCallbackParams param = new CompletedMonitorCallbackParams()
         {
             MonitorData = _allMonitorData
         };
         Interlocked.Exchange(ref _isRunningMetux, 0);
         _readHWParams.CallBack.Invoke(param, _readHWParams.UserToken);
     }
     _fLogService.Info("完成通知数据采集完成,开始检查配置文件是否更新..." + _stopwatch.ElapsedMilliseconds);
     lock (_notifyLocker)
     {
         if (_isNeedNotifyScreenCfgChanged)
         {
             _fLogService.Info("通知外部显示屏配置更新");
             _isNeedNotifyScreenCfgChanged = false;
             OnNotifyScreenCfgChangedEvent(this, EventArgs.Empty);
             _fLogService.Info("完成通知外部显示屏配置更新");
         }
     }
     OnNotifyExecResEvent(TransferType.M3_RefreshDataFinish, string.Empty, UpdateCfgFileResType.OK);
 }