/// <summary> /// 获取系统运行状态 /// </summary> /// <param name="state">状态字节</param> /// <param name="str">输出状态字符串</param> /// <param name="statusCode">状态代码</param> /// <returns>返回系统运行状态</returns> public DsSystemState GetSysRunState(byte state, out string str, out string statusCode) { str = ""; statusCode = ""; statusCode = ByteHelper.ByteToBit(state); byte[] bys = ByteHelper.GetBooleanArray(state); DsSystemState status = new DsSystemState(); status.StatusTime = DateTime.Now; for (int i = 0; i < bys.Length; i++) { string name = Enum.GetName(typeof(DSSysStatus), i); string ste = (int.Parse(bys[i].ToString()) == 0 ? "正常" : "故障"); str += (Environment.NewLine + "【" + (i + 1) + ":" + str + ":" + ste + "】"); DSSysStatus sys = (DSSysStatus)Enum.Parse(typeof(DSSysStatus), i.ToString()); switch (sys) { case DSSysStatus.交流电状态: status.ACStatus = ste; break; case DSSysStatus.备用电池状态: status.Backipbattery = ste; break; case DSSysStatus.报告发送状态: status.Reportsent = ste; break; case DSSysStatus.控制状态: status.Control = ste; break; case DSSysStatus.MPX总线状态: status.MPXStatus = ste; break; case DSSysStatus.无线接收状态: status.Wirelessreceiving = ste; break; case DSSysStatus.辅助电源状态: status.Auxiliarypower = ste; break; case DSSysStatus.Option设备状态: status.OptionStatus = ste; break; default: break; } } str += Environment.NewLine; return(status); }
private void MyEvent(object sender) { try { if (sender == null) { return; } byte[] date = sender as byte[]; string strMsg = Encoding.Default.GetString(date, 0, date.Length);// 将接受到的字节数据转化成字符串; strMsg = byteToHexStr(date, date.Length); strMsg = strMsg.Trim('\0'); int x = 0; string w = ""; foreach (char item in strMsg) { if (x == 1) { w += item + " "; x = 0; } else { w += item; x++; } } w = w.Substring(0, w.Length - " ".Length); string[] msg = w.Split(' '); if (msg.Length > 0) { if (msg[0] == "A0")//系统状态 { byte b = new byte(); b = (byte)int.Parse(msg[1]); string str = "", code = ""; DsSystemState state = new DsSystemState(); state = GetSysRunState(b, out str, out code); state.DeviceIp = deviceIp; DSSystemStatus?.Invoke(state, code); } else if (msg[0] == "85")//防区状态+操作状态 { for (int i = 0; i < msg.Length / 4; i++) { try { DSMessageType type = DSMessageType.AlarmStatus; switch (Enum.Parse(typeof(DSEventType), ConvertBase(msg[1 + i * 4], 16, 10))) { case DSEventType.火警报警: case DSEventType.键盘火警报警: case DSEventType.键盘紧急报警: case DSEventType.键盘求助报警: case DSEventType.挟持码操作: case DSEventType.未授权进入: case DSEventType.盗警防区报警: case DSEventType.MX设备1防区报警: case DSEventType.MX设备2防区报警: case DSEventType.MX设备3防区报警: type = DSMessageType.AlarmStatus; break; case DSEventType.MX设备1防区恢复: case DSEventType.MX设备2防区恢复: case DSEventType.MX设备3防区恢复: case DSEventType.防区故障恢复: case DSEventType.防区短路恢复: case DSEventType.防区报警恢复: type = DSMessageType.AlarmClearStatus; break; case DSEventType.消警: case DSEventType.强制旁路操作: case DSEventType.防区旁路操作: case DSEventType.防区操作失败: case DSEventType.布防操作失败: case DSEventType.撤防操作失败: case DSEventType.MX设备布防: case DSEventType.MX设备撤防: type = DSMessageType.ZoomOperationStatus; break; case DSEventType.撤防操作成功: case DSEventType.布防操作成功: case DSEventType.防区开路状态: case DSEventType.防区正常状态: case DSEventType.火警故障: case DSEventType.火警防区故障: case DSEventType.盗警防区故障: type = DSMessageType.ZoomStatus; break; case DSEventType.检测故障: case DSEventType.事件记录满: case DSEventType.测试信息: type = DSMessageType.SystemLogEvent; break; default: break; } DSZoomEvent?.Invoke(new DSEventData() { deviceIp = deviceIp, zoomId = (int.Parse(ConvertBase(msg[2 + i * 4], 16, 10)) + 1).ToString(), eventNo = ConvertBase(msg[1 + i * 4], 16, 10), eventType = (DSEventType)Enum.Parse(typeof(DSEventType), ConvertBase(msg[1 + i * 4], 16, 10)), msgType = type, time = DateTime.Now }); } catch (Exception) { } } } } } catch (Exception) { } checkTime = DateTime.Now; }