private NSEquipmentDetail HandlerQueue_NationalStandard(EquipmentSource datare) { byte[] data = datare.RawData; if (data.Length < 15) { return(null); } NSEquipmentDetail equipmentDetail = new NSEquipmentDetail(); try { log.Info("开始解析数据-" + data.Length); string outMsg; //返回的错误信息,正确解析则返回空 var detail = EquipmentHelper.HandleData_NS(data, out outMsg); if (detail != null && string.IsNullOrWhiteSpace(outMsg)) { #region 解析EquipmentDetail foreach (var key in detail.Keys) { var proInfo = typeof(NSEquipmentDetail).GetProperty(key.ToString()); if (null != proInfo) { var eqValue = EquipmentHelper.GetNSEquipmentValue(key, detail[key], equipmentDetail); proInfo.SetValue(equipmentDetail, eqValue, null); } } #endregion } else { equipmentDetail = null; } } catch (Exception ex) { log.Error("设备详细信息解析异常", ex); equipmentDetail = null; } return(equipmentDetail); }
/// <summary> /// 解析终端设备工作状态 /// </summary> /// <param name="data"></param> /// <returns>设备状态</returns> private EquipmentDetail HandlerQueue(EquipmentSource datare) { byte[] data = datare.RawData; if (data.Length < 13) { return(null); } EquipmentDetail equipmentDetail = new EquipmentDetail(); try { equipmentDetail.IPAddressTmpFormat = datare.RemoteIPTmp; equipmentDetail.RemotePortTmp = (ushort)datare.RemotePortTmp; log.Info("开始解析数据-" + data.Length); equipmentDetail.SrvTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); FeaturesCode fc; string outMsg; //返回的错误信息,正确解析则返回空 var detail = EquipmentHelper.HandleData(data, out fc, out outMsg); if (detail != null && string.IsNullOrWhiteSpace(outMsg) && detail.ContainsKey(Equipment.PhysicalAddress)) { var msgType = Convert.ToChar(data[0]); if (msgType == '&') { //帧头占12字节 equipmentDetail.HeaderData = data.Take(12).ToArray(); } else if (msgType == '%') { //帧头占18字节 equipmentDetail.HeaderData = data.Take(18).ToArray(); } byte[] address = detail[Equipment.PhysicalAddress];//每个包必须有物理码 string pp = ""; for (int i = 0; i < address.Length; i++) { pp += address[i].ToString("X2");// bytes[i].ToString("X2").PadLeft(2, '0'); } clientsConn.AddOrUpdate(pp, datare.ConnId, (key, value) => { return(value = datare.ConnId); }); clientsHeadData.AddOrUpdate(pp, equipmentDetail.HeaderData, (key, value) => { return(value = equipmentDetail.HeaderData); }); #region 解析EquipmentDetail foreach (var key in detail.Keys) { if (key.ToString() == "RemoteControlCenterIPAddress") { int ppr = 0; int ffp = 1; int fs = ppr + ffp; Console.Write(""); } var proInfo = typeof(EquipmentDetail).GetProperty(key.ToString()); if (null != proInfo) { var eqValue = EquipmentHelper.GetEquipmentValue(key, detail[key], equipmentDetail); proInfo.SetValue(equipmentDetail, eqValue, null); typeof(EquipmentDetail).GetProperty(key.ToString() + "Format").SetValue(equipmentDetail, EquipmentHelper.GetEquipmentValueString(key, eqValue), null); } } #endregion var dataHeader = EquipmentHelper.HandleHeader(EquipmentHelper.GetFrameHeader(data)); if (dataHeader != null) { equipmentDetail.FactoryName = dataHeader[FrameHeaderEnum.FactoryNumber]; } } else { equipmentDetail = null; } } catch (Exception ex) { log.Error("设备详细信息解析异常", ex); equipmentDetail = null; } return(equipmentDetail); }
public static object GetEquipmentValue(Equipment eq, byte[] eqData, EquipmentDetail ob) { try { switch (eq) { case Equipment.Open: case Equipment.Close: case Equipment.BitOperationOpen: case Equipment.BitOperationClose: case Equipment.BitOperationUn: case Equipment.ByteOpAddition: case Equipment.ByteOpSubtraction: case Equipment.UShortOpAddition: case Equipment.UShortOpSubtraction: case Equipment.SingleOpAddition: case Equipment.SingleOpSubtraction: break; case Equipment.FMFreList: //byte return(eqData); case Equipment.FMSignalStrength: //byte return(eqData); case Equipment.PlayType: //byte return(eqData[0]); case Equipment.Versions: //byte return(eqData); case Equipment.DigitalTVRadioFrequencyMode: //byte return(eqData[0]); case Equipment.DigitalTVRadioFrequencyFre: //Uint16 // string DTVRFre ="" ; //if (SingletonInfo.GetInstance().factorycode == "1" && SingletonInfo.GetInstance().TerminalType == true && SingletonInfo.GetInstance().Version == "2.0") //{ // DTVRFre = eqData[2].ToString() + eqData[1].ToString() + eqData[0].ToString(); //疑问 是否需要转16进制 20171128 //} //else //{ // DTVRFre = eqData.ToNumberArrayString("", 16); //} 测试注释 20171203 // var DTVRFre = eqData.ToNumberArrayString("", 16); var DTVRFre = (Convert.ToInt32(eqData[2].ToString("X2") + eqData[1].ToString("X2")) / 10).ToString(); return(uint.Parse(DTVRFre)); case Equipment.QAMType: //byte case Equipment.BroadcastVolume: //byte case Equipment.BroadcastTimeout: //byte case Equipment.CurrentModeSignalQuality: //byte case Equipment.CurrentModeSignalStrength: //byte return(eqData[0]); case Equipment.RemoteControlCenterIPAddress: //IP return(eqData); case Equipment.RemoteControlCenterPort: //Uint16 return(BitConverter.ToUInt16(eqData, 0)); case Equipment.AudioServerIPAddress: //IP return(eqData); case Equipment.AudioServerPort: //Uint16 return(BitConverter.ToUInt16(eqData, 0)); case Equipment.CallWay: //byte return(eqData[0]); case Equipment.FileName: //byte[] return(eqData); case Equipment.RecordingDuration: //Uint32 case Equipment.PacksTotalNumber: //Uint32 return(BitConverter.ToUInt32(eqData, 0)); case Equipment.RebackFileType: //byte return(eqData[0]); case Equipment.PackStartIndex: //Uint32 case Equipment.LastPacksNuber: //Uint32 return(BitConverter.ToUInt32(eqData, 0)); case Equipment.LogicalAddress: //byte case Equipment.PhysicalAddress: //byte // Task.Factory.StartNew(delegate //{ // string phycode = eqData.ToNumberArrayString("", 16); // if (SingletonInfo.GetInstance().MonitorPlatformMessageList.Any())//判断非空 // { // MonitorPlatformMessage monitorPlatformMessage = SingletonInfo.GetInstance().MonitorPlatformMessageList.Find((MonitorPlatformMessage tmp) => tmp.SRVPHYSICALCODE == phycode); // if (monitorPlatformMessage != null) // { // SendbackDetail sendbackDetail = new SendbackDetail(); // sendbackDetail.tag = Equipment.PhysicalAddress; // sendbackDetail.DataEntity = monitorPlatformMessage; // sendbackDetail.Rebackdata = ob; // EquipmentHelper.MyEvent(sendbackDetail); // } // } //}); return(eqData); case Equipment.BroadcastState: //byte case Equipment.TerminalType: //byte return(eqData[0]); case Equipment.Longitude: //Float case Equipment.Latitude: //Float return(BitConverter.ToSingle(eqData, 0)); case Equipment.RebackMode: //byte case Equipment.NetworkMode: //byte return(eqData[0]); case Equipment.Voltage220: //Float case Equipment.Voltage24: //Float case Equipment.Voltage12: //Float case Equipment.AmplifierElectricCurrent: //Float return(BitConverter.ToSingle(eqData, 0)); case Equipment.LocalHost: //IP case Equipment.SubnetMask: //IP case Equipment.DefaultGateway: //IP return(eqData); case Equipment.AudioReback: //byte[] return(eqData); case Equipment.AudioRebackProtocol: //byte case Equipment.RecordingCategory: //byte return(eqData[0]); case Equipment.StartPackageNumber: //uint return(BitConverter.ToUInt32(eqData, 0)); case Equipment.terminal2serverhandshake: //uint Task.Factory.StartNew(delegate { SendbackDetail sendbackDetail2 = new SendbackDetail(); sendbackDetail2.tag = Equipment.terminal2serverhandshake; sendbackDetail2.Rebackdata = ob; EquipmentHelper.MyEvent(sendbackDetail2); }); return(eqData[0]); } return(eqData); } catch { return(null); } }