using HslCommunication.ModBus; using HslCommunication; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using NLog; using System.Windows; using Prism.Mvvm; using OrpaonEMS.App.Com; using OrpaonEMS.Core.EventHandMsg; namespace OrpaonEMS.App.Services { /// /// 消防的数据服务 /// public class FFService : BindableBase { public FFService(ILogService logger, ConfigDataService configDataService) { Logger = logger; ConfigDataService = configDataService; if (ConfigDataService.IsDemo) { ModbusRtuDrive?.Close(); ModbusRtuDrive = new ModbusRtu(); ModbusRtuDrive.AddressStartWithZero = true; ModbusRtuDrive.IsStringReverse = false; ModbusRtuDrive.DataFormat = HslCommunication.Core.DataFormat.ABCD; try { ModbusRtuDrive.SerialPortInni(sp => { sp.PortName = "COM2"; //sp.PortName = "COM10"; sp.BaudRate = 9600; sp.DataBits = 8; sp.StopBits = System.IO.Ports.StopBits.One; sp.Parity = System.IO.Ports.Parity.None; }); var result = ModbusRtuDrive.Open(); if (!result.IsSuccess) { Logger.Info("液冷连接失败"); } } catch (Exception ex) { MessageBox.Show("液冷连接失败" + ex.Message); } ScanDeviceStart(); } } /// /// ModbusRtu驱动 /// private ModbusRtu ModbusRtuDrive { get; set; } /// /// ModbusRtuStation 站号设置 /// private byte ModbusRtuStation { get; set; } = 1; /// /// ScanDevice扫描Task /// static Task ScanDeviceTask { get; set; } /// /// 扫描线程使能 /// public bool ThreadEnable { get; set; } = true; /// /// 报警状态数据 /// private OperateResult OperateResultBmsAlarm { get; set; } /// /// BMS只读数据-前125字节 /// private OperateResult OperateResult1 { get; set; } /// ///扫描 /// private void ScanDeviceStart() { Thread.Sleep(1000); ScanDeviceTask = Task.Run(async () => { await Task.Delay(5000); while (ThreadEnable) { Thread.Sleep(800); OperateResult1 = ModbusRtuDrive.Read("1", 20);//初始地址固定验证 if (OperateResult1.IsSuccess) { //喷射延时数据 FireInjectionDely = ModbusRtuDrive.ByteTransform.TransUInt16(OperateResult1.Content, 4); FireWorkModelVaue = ModbusRtuDrive.ByteTransform.TransUInt16(OperateResult1.Content, 5); FireGasPress = ModbusRtuDrive.ByteTransform.TransUInt16(OperateResult1.Content, 6); FireSmokeTrigVaue = ModbusRtuDrive.ByteTransform.TransUInt16(OperateResult1.Content, 7); FireTempTrigVaue = ModbusRtuDrive.ByteTransform.TransUInt16(OperateResult1.Content, 8); FireFlammableTrigMsgVaue = ModbusRtuDrive.ByteTransform.TransUInt16(OperateResult1.Content, 9); FireStateMsgVaue = ModbusRtuDrive.ByteTransform.TransUInt16(OperateResult1.Content, 10); //FireMainPowerStateVaue = ModbusRtuDrive.ByteTransform.TransUInt16(OperateResult1.Content, 466); //FireSubPowerStateVaue = ModbusRtuDrive.ByteTransform.TransUInt16(OperateResult1.Content, 468); //FireSolenoidValveStateVaue = ModbusRtuDrive.ByteTransform.TransUInt16(OperateResult1.Content, 470); //FireInjectionCountdown = ModbusRtuDrive.ByteTransform.TransUInt16(OperateResult1.Content, 472); //FirePressSensorStateVaue = ModbusRtuDrive.ByteTransform.TransUInt16(OperateResult1.Content, 474); //xxx = ModbusTcpNetDrive.ByteTransform.TransUInt16(OperateResultConfigData.Content, 460); LinkStateValue = true; } else { LinkStateValue = false; } } }); } private bool _LinkStateValue = false; /// /// 消防连接状态 /// public bool LinkStateValue { get { return _LinkStateValue; } set { if (_LinkStateValue != value) { if (value) { LinkStateMsg = "正常"; } else { LinkStateMsg = "失败"; } _LinkStateValue = value; } } } private string _LinkStateMsg = "失败"; /// /// 消防连接状态 /// public string LinkStateMsg { get { return _LinkStateMsg; } set { _LinkStateMsg = value; RaisePropertyChanged(); } } #region 消防数据 //private ushort firePress; ///// ///// 消防压力d ///// //public ushort FirePress //{ // get { return firePress; } // set { firePress = value; RaisePropertyChanged(); } //} private string _FireStateMsg="正常"; /// /// 火警状态 /// public string FireStateMsg { get { return _FireStateMsg; } set { _FireStateMsg = value; RaisePropertyChanged(); } } private ushort _FireStateMsgVaue = 100; /// /// 火警状态状态字 /// public ushort FireStateMsgVaue { get { return _FireStateMsgVaue; } set { if (value != _FireStateMsgVaue) { switch (value) { case 0: FireStateMsg = "工作正常"; break; case 1: FireStateMsg = "一级预警"; break; case 2: FireStateMsg = "二级报警"; break; case 3: FireStateMsg = "三级火警"; break; case 4: FireStateMsg = "紧急启动"; break; case 5: FireStateMsg = "紧急停止"; break; default: break; } _FireStateMsgVaue = value; } } } private string fireSmokeTrigMsg= "正常"; /// /// 消防烟感触发 /// public string FireSmokeTrigMsg { get { return fireSmokeTrigMsg; } set { fireSmokeTrigMsg = value; RaisePropertyChanged(); } } private ushort _FireSmokeTrigVaue = 100; /// /// 消防烟感触发状态字 /// public ushort FireSmokeTrigVaue { get { return _FireSmokeTrigVaue; } set { if (value != _FireSmokeTrigVaue) { switch (value) { case 0: FireSmokeTrigMsg = "未触发"; break; case 1: FireSmokeTrigMsg = "已触发"; break; default: break; } _FireSmokeTrigVaue = value; } } } private string fireTempTrigMsg = "已触发"; /// /// 消防温感触发 /// public string FireTempTrigMsg { get { return fireTempTrigMsg; } set { fireTempTrigMsg = value; RaisePropertyChanged(); } } private ushort _FireTempTrigVaue = 100; /// /// 消防温感触发状态字 /// public ushort FireTempTrigVaue { get { return _FireTempTrigVaue; } set { if (value != _FireTempTrigVaue) { switch (value) { case 0: FireTempTrigMsg = "未触发"; break; case 1: FireTempTrigMsg = "已触发"; break; default: break; } _FireTempTrigVaue = value; } } } private string _FireFlammableTrigMsg = "未触发"; /// /// 可燃状态触发 /// public string FireFlammableTrigMsg { get { return _FireFlammableTrigMsg; } set { _FireFlammableTrigMsg = value; RaisePropertyChanged(); } } private ushort _FireFlammableTrigMsgVaue = 100; /// /// 可燃状态状态字 /// public ushort FireFlammableTrigMsgVaue { get { return _FireFlammableTrigMsgVaue; } set { if (value != _FireFlammableTrigMsgVaue) { switch (value) { case 0: FireFlammableTrigMsg = "未触发"; break; case 1: FireFlammableTrigMsg = "已触发"; break; default: break; } _FireFlammableTrigMsgVaue = value; } } } private string fireWorkModelMsg = "自动"; /// /// 消防设备工作模式内容 /// public string FireWorkModelMsg { get { return fireWorkModelMsg; } set { fireWorkModelMsg = value; RaisePropertyChanged(); } } private ushort _FireWorkModelVaue = 100; /// /// 消防设备工作模式状态字 /// public ushort FireWorkModelVaue { get { return _FireWorkModelVaue; } set { if (value != _FireWorkModelVaue) { if (BitHelper.GetBitValue(value, 15)) { FireWorkModelMsg = "自动"; } else { FireWorkModelMsg = "手动"; } FireMainPowerStateVaue = BitHelper.GetBitValue(value, 14) ? (ushort)1 : (ushort)0; FireSubPowerStateVaue = BitHelper.GetBitValue(value, 13) ? (ushort)1 : (ushort)0; FireChargStateVaue = BitHelper.GetBitValue(value, 12) ? (ushort)1 : (ushort)0; FireDriveEleStateVaue = BitHelper.GetBitValue(value, 11) ? (ushort)1 : (ushort)0; FirePressSensorStateVaue = BitHelper.GetBitValue(value, 10) ? (ushort)1 : (ushort)0; FireSolenoidStateVaue = BitHelper.GetBitValue(value, 9) ? (ushort)1 : (ushort)0; FireSprayStateVaue = BitHelper.GetBitValue(value, 8) ? (ushort)1 : (ushort)0; _FireWorkModelVaue = value; } } } private string _FireSprayStateMsg = "未喷"; /// /// 喷洒标记状态 /// public string FireSprayStateMsg { get { return _FireSprayStateMsg; } set { _FireSprayStateMsg = value; RaisePropertyChanged(); } } private ushort _FireSprayStateVaue = 100; /// /// 喷洒标记状态字 /// public ushort FireSprayStateVaue { get { return _FireSprayStateVaue; } set { if (value != _FireSprayStateVaue) { switch (value) { case 0: FireSprayStateMsg = "未喷"; break; case 1: FireSprayStateMsg = "已喷"; break; default: break; } _FireSprayStateVaue = value; } } } private string fireMainPowerStateMsg = "正常"; /// /// 消防主电源状态 /// public string FireMainPowerStateMsg { get { return fireMainPowerStateMsg; } set { fireMainPowerStateMsg = value; RaisePropertyChanged(); } } private ushort _FireMainPowerStateVaue = 100; /// /// 消防主电源状态状态字 /// public ushort FireMainPowerStateVaue { get { return _FireMainPowerStateVaue; } set { if (value != _FireMainPowerStateVaue) { switch (value) { case 0: FireMainPowerStateMsg = "正常"; break; case 1: FireMainPowerStateMsg = "异常"; break; default: break; } _FireMainPowerStateVaue = value; } } } private string _FireSubPowerStateMsg = "正常"; /// /// 消防副电源状态 /// public string FireSubPowerStateMsg { get { return _FireSubPowerStateMsg; } set { _FireSubPowerStateMsg = value; RaisePropertyChanged(); } } private ushort _FireSubPowerStateVaue = 100; /// /// 消防副电源状态状态字 /// public ushort FireSubPowerStateVaue { get { return _FireSubPowerStateVaue; } set { if (value != _FireSubPowerStateVaue) { switch (value) { case 0: FireSubPowerStateMsg = "正常"; break; case 1: FireSubPowerStateMsg = "异常"; break; default: break; } _FireSubPowerStateVaue = value; } } } private string _FireChargStateMsg = "正常"; /// /// 充电状态 /// public string FireChargStateMsg { get { return _FireChargStateMsg; } set { _FireChargStateMsg = value; RaisePropertyChanged(); } } private ushort _FireChargStateVaue = 100; /// /// 充电状态状态字 /// public ushort FireChargStateVaue { get { return _FireChargStateVaue; } set { if (value != _FireChargStateVaue) { switch (value) { case 0: FireChargStateMsg = "不充"; break; case 1: FireChargStateMsg = "充电"; break; default: break; } _FireChargStateVaue = value; } } } private string _FireDriveEleStateMsg = "正常"; /// /// 驱动电路状态 /// public string FireDriveEleStateMsg { get { return _FireDriveEleStateMsg; } set { _FireDriveEleStateMsg = value; RaisePropertyChanged(); } } private ushort _FireDriveEleStateVaue = 100; /// /// 驱动电路状态状态字 /// public ushort FireDriveEleStateVaue { get { return _FireDriveEleStateVaue; } set { if (value != _FireDriveEleStateVaue) { switch (value) { case 0: FireDriveEleStateMsg = "正常"; break; case 1: FireDriveEleStateMsg = "故障"; break; default: break; } _FireDriveEleStateVaue = value; } } } private string _FireSolenoidStateMsg = "正常"; /// /// 消防电磁阀状态 /// public string FireSolenoidStateMsg { get { return _FireSolenoidStateMsg; } set { _FireSolenoidStateMsg = value; RaisePropertyChanged(); } } private ushort _FireSolenoidStateVaue = 100; /// ///消防电磁阀状态状态字 /// public ushort FireSolenoidStateVaue { get { return _FireSolenoidStateVaue; } set { if (value != _FireSolenoidStateVaue) { switch (value) { case 0: FireSolenoidStateMsg = "关闭"; break; case 1: FireSolenoidStateMsg = "开启"; break; default: break; } _FireSolenoidStateVaue = value; } } } private ushort fireInjectionCountdown; /// /// 消防喷射倒计时 /// public ushort FireInjectionCountdown { get { return fireInjectionCountdown; } set { fireInjectionCountdown = value; RaisePropertyChanged(); } } private ushort _FireInjectionDely; /// /// 喷洒延时 /// public ushort FireInjectionDely { get { return _FireInjectionDely; } set { _FireInjectionDely = value; RaisePropertyChanged(); } } private ushort _FireGasPress; /// /// 钢瓶气压 单位KPa /// public ushort FireGasPress { get { return _FireGasPress; } set { _FireGasPress = value; RaisePropertyChanged(); } } private string firePressSensorStateMsg = "无异常"; /// /// 消防压力传感器状态检测 /// public string FirePressSensorStateMsg { get { return firePressSensorStateMsg; } set { firePressSensorStateMsg = value; RaisePropertyChanged(); } } private ushort _FirePressSensorStateVaue = 100; /// /// 消防压力传感器状态检测状态字 /// public ushort FirePressSensorStateVaue { get { return _FirePressSensorStateVaue; } set { if (value != _FirePressSensorStateVaue) { switch (value) { case 0: FirePressSensorStateMsg = "无异常"; break; case 1: FirePressSensorStateMsg = "有异常"; break; default: break; } _FirePressSensorStateVaue = value; } } } public ILogService Logger { get; } public ConfigDataService ConfigDataService { get; } #endregion } }