using JiangsuEarthquake.Base; using JiangsuEarthquake.Common; using JiangsuEarthquake.DataAccess; using JiangsuEarthquake.Models; using LiveCharts.Defaults; using LiveCharts.Wpf; using LiveCharts; using MySql.Data.MySqlClient; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Reflection; using System.Runtime.Intrinsics.X86; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Media; using System.Windows.Threading; using System.IO.Ports; using JiangsuEarthquake.Views.UserControls; using HandyControl.Tools.Extension; using K4os.Compression.LZ4.Streams.Frames; using Org.BouncyCastle.Crypto.Paddings; namespace JiangsuEarthquake.ViewModels { public class MainViewModel : NotifyBase { #region ViewModel Define //页面 public static RealTimeDataViewModel realTimeDataViewModel1 = new RealTimeDataViewModel(1); public static RealTimeDataViewModel realTimeDataViewModel2 = new RealTimeDataViewModel(2); public static AlarmRecordViewModel alarmRecordViewModel1 = new AlarmRecordViewModel(1); public static AlarmRecordViewModel alarmRecordViewModel2 = new AlarmRecordViewModel(2); public static BoosterStationStateDataViewModel boosterStationStateDataViewModel1 = new BoosterStationStateDataViewModel(1); public static BoosterStationStateDataViewModel boosterStationStateDataViewModel2 = new BoosterStationStateDataViewModel(2); public static LogRecordViewModel logRecordViewModel1 = new LogRecordViewModel(1); public static LogRecordViewModel logRecordViewModel2 = new LogRecordViewModel(2); public static SystemControlViewModel systemControlViewModel1 = new SystemControlViewModel(); public static SystemControlViewModel systemControlViewModel2 = new SystemControlViewModel(); public static SystemStateDataViewModel systemStateDataViewModel1 = new SystemStateDataViewModel(1); public static SystemStateDataViewModel systemStateDataViewModel2 = new SystemStateDataViewModel(2); public static BaseStationModelViewModel baseStationModelViewModel1 = new BaseStationModelViewModel(); public static BaseStationModelViewModel baseStationModelViewModel2 = new BaseStationModelViewModel(); //控制 public static SwitchStateModel switchStateModel1 = new SwitchStateModel(); public static SwitchStateModel switchStateModel2 = new SwitchStateModel(); public static StateFeedBackModel stateFeedBackModel1 = new StateFeedBackModel(); public static StateFeedBackModel stateFeedBackModel2 = new StateFeedBackModel(); public static SwitchInfoModel switchInfoModel1 = new SwitchInfoModel(); public static SwitchInfoModel switchInfoModel2 = new SwitchInfoModel(); public static EarthQuakeParaSetModel earthQuakeParaSetModel1 = new EarthQuakeParaSetModel(); public static EarthQuakeParaSetModel earthQuakeParaSetModel2 = new EarthQuakeParaSetModel(); public static EarthquakeSensorModel earthquakeSensorModel1 = new EarthquakeSensorModel(); public static EarthquakeSensorModel earthquakeSensorModel2 = new EarthquakeSensorModel(); private SwitchStateModel ss; public SwitchStateModel SS { get { return ss; } set { ss = value; this.DoNotify(); } } private EarthQuakeParaSetModel eqps; public EarthQuakeParaSetModel EQPS { get { return eqps; } set { eqps = value; } } private EarthquakeSensorModel eqsm; public EarthquakeSensorModel EQSM { get { return eqsm; } set { eqsm = value; } } #endregion #region Something Define /// /// 刷新下控制域的DataContext /// public void FlashControlPageDataContext() { if (station_id == 1) { SS = switchStateModel1; EQPS = earthQuakeParaSetModel1; EQSM = earthquakeSensorModel1; } else if (station_id == 2) { SS = switchStateModel2; EQPS = earthQuakeParaSetModel2; EQSM = earthquakeSensorModel2; } } private FrameworkElement _pageContent; public FrameworkElement PageContent { get { return _pageContent; } set { _pageContent = value; this.DoNotify(); } } public int station_id { get; set; } = 1; int ChartPointNum = 15; string Title_Name = ""; //设置当前显示的标题 1 浮标 2 接驳盒 3 系统控制 4 日志记录 private string bDCountDown = ""; public string BDCountDown { get { return bDCountDown; } set { bDCountDown = value; this.DoNotify(); } } private bool gridIsEnabled = true; public bool GridIsEnabled { get { return gridIsEnabled; } set { gridIsEnabled = value; this.DoNotify(); } } private Visibility vis = Visibility.Hidden; /// /// 按钮是否可见 /// public Visibility DetailButtonVisibility { get { return vis; } set { vis = value; this.DoNotify(); } } public static ErrorMessageModel EM { get; set; } = new ErrorMessageModel(); #endregion #region CommandBase Define public CommandBase NavChangedCommand { get; set; } public CommandBase CommunicationChangedCommand { get; set; }//切换控制器的通信路径 public CommandBase Switch { set; get; } public CommandBase ParaSetSwitch { set; get; } //系统参数设置按钮 #endregion #region Timer Define public DispatcherTimer timerOpenSetMsgHidden = new DispatcherTimer(); public DispatcherTimer timerCloseSetMsgHidden = new DispatcherTimer(); public DispatcherTimer timerSeisZeroSetStart = new DispatcherTimer(); public DispatcherTimer timerSeisZeroSetStop = new DispatcherTimer(); public DispatcherTimer timerSeisLevelSetStart = new DispatcherTimer(); public DispatcherTimer timerSeisLevelSetStop = new DispatcherTimer(); public DispatcherTimer timerSeisParaMsgHidden = new DispatcherTimer(); public DispatcherTimer timerEarthQuakeParaSet = new DispatcherTimer(); public DispatcherTimer timerEarthQuakeParaRead = new DispatcherTimer(); #endregion #region Communication //下位机 public CommandBase Socket1DoOpenCommand { get; set; } public CommandBase Socket2DoOpenCommand { get; set; } public ServerModel serverModel1 { get; set; } = new ServerModel(); public ServerModel serverModel2 { get; set; } = new ServerModel(); public static SocketInfo SocketServerInfo1 { get; set; } = new SocketInfo() //PLC1连接信息 { IP = Tools.GetAppSetting("XWJ_Service_IP1"), Port = Convert.ToInt32(Tools.GetAppSetting("XWJ_Service_Port1")) }; public static SocketInfo SocketServerInfo2 { get; set; } = new SocketInfo() //PLC2连接信息 { IP = Tools.GetAppSetting("XWJ_Service_IP2"), Port = Convert.ToInt32(Tools.GetAppSetting("XWJ_Service_Port2")) }; //升压站 public CommandBase Socket1DoConnectCommand { get; set; } //客户端连接/断开操作 public CommandBase Socket2DoConnectCommand { get; set; } //客户端连接/断开操作 public ClientModel clientModel1 { get; set; } = new ClientModel(); public ClientModel clientModel2 { get; set; } = new ClientModel(); public static SocketInfo SocketInfo1 { get; set; } = new SocketInfo() //PLC1连接信息 { IP = Tools.GetAppSetting("SYZ_Client_IP1"), Port = Convert.ToInt32(Tools.GetAppSetting("SYZ_Client_Port1")) }; public static SocketInfo SocketInfo2 { get; set; } = new SocketInfo() //PLC2连接信息 { IP = Tools.GetAppSetting("SYZ_Client_IP2"), Port = Convert.ToInt32(Tools.GetAppSetting("SYZ_Client_Port2")) }; //地震仪 public CommandBase SocketDZY1DoConnectCommand { get; set; } //客户端连接/断开操作 public CommandBase SocketDZY2DoConnectCommand { get; set; } //客户端连接/断开操作 public ClientModel clientModelDZY1 { get; set; } = new ClientModel(); public ClientModel clientModelDZY2 { get; set; } = new ClientModel(); public static SocketInfo SocketInfoDZY1 { get; set; } = new SocketInfo() //PLC1连接信息 { IP = Tools.GetAppSetting("DZY_Client_IP1"), Port = Convert.ToInt32(Tools.GetAppSetting("DZY_Client_Port1")) }; public static SocketInfo SocketInfoDZY2 { get; set; } = new SocketInfo() //PLC2连接信息 { IP = Tools.GetAppSetting("DZY_Client_IP2"), Port = Convert.ToInt32(Tools.GetAppSetting("DZY_Client_Port2")) }; #region Useless //public CommandBase Com1DoConnectCommand { get; set; } //串口连接/断开操作 //public CommandBase Com2DoConnectCommand { get; set; } //串口连接/断开操作 //public ComModel comModel1 { get; set; } = new ComModel(); //public ComModel2 comModel2 { get; set; } = new ComModel2(); //public static SerialInfo SerialInfo1 { get; set; } = new SerialInfo() //初始化串口连接信息 //{ // PortName = Tools.GetAppSetting("PortName1"), // BaudRate = Convert.ToInt32(Tools.GetAppSetting("BaudRate1")), // DataBit = 8, // Parity = Parity.None, // StopBits = StopBits.One //}; //public static SerialInfo SerialInfo2 { get; set; } = new SerialInfo() //初始化串口连接信息 //{ // PortName = Tools.GetAppSetting("PortName2"), // BaudRate = Convert.ToInt32(Tools.GetAppSetting("BaudRate2")), // DataBit = 8, // Parity = Parity.None, // StopBits = StopBits.One //}; #endregion #endregion public static DialogViewModel vm; public MainViewModel() { vm = new DialogViewModel { Content = "" }; #region Command Define this.NavChangedCommand = new CommandBase(); this.NavChangedCommand.DoExcute = new Action(DoNavChanged); this.NavChangedCommand.DoCanExcute = new Func((o) => true); this.Switch = new CommandBase(); this.Switch.DoExcute = new Action(Btn_Switch); this.Switch.DoCanExcute = new Func((o) => true); this.ParaSetSwitch = new CommandBase(); this.ParaSetSwitch.DoExcute = new Action(Btn_ParaSet); this.ParaSetSwitch.DoCanExcute = new Func((o) => true); this.Socket1DoOpenCommand = new CommandBase(); this.Socket1DoOpenCommand.DoExcute = new Action(Socket1DoOpen); this.Socket1DoOpenCommand.DoCanExcute = new Func((o) => true); this.Socket2DoOpenCommand = new CommandBase(); this.Socket2DoOpenCommand.DoExcute = new Action(Socket2DoOpen); this.Socket2DoOpenCommand.DoCanExcute = new Func((o) => true); this.Socket1DoConnectCommand = new CommandBase(); this.Socket1DoConnectCommand.DoExcute = new Action(DoSocket1Connect); this.Socket1DoConnectCommand.DoCanExcute = new Func((o) => true); this.Socket2DoConnectCommand = new CommandBase(); this.Socket2DoConnectCommand.DoExcute = new Action(DoSocket2Connect); this.Socket2DoConnectCommand.DoCanExcute = new Func((o) => true); this.SocketDZY1DoConnectCommand = new CommandBase(); this.SocketDZY1DoConnectCommand.DoExcute = new Action(DoSocketDZY1Connect); this.SocketDZY1DoConnectCommand.DoCanExcute = new Func((o) => true); this.SocketDZY2DoConnectCommand = new CommandBase(); this.SocketDZY2DoConnectCommand.DoExcute = new Action(DoSocketDZY2Connect); this.SocketDZY2DoConnectCommand.DoCanExcute = new Func((o) => true); #endregion #region Timer Set timerOpenSetMsgHidden.Interval = TimeSpan.FromSeconds(2); timerOpenSetMsgHidden.Tick += TimerOpenSetMsgHidden_Tick; timerCloseSetMsgHidden.Interval = TimeSpan.FromSeconds(2); timerCloseSetMsgHidden.Tick += TimerCloseSetMsgHidden_Tick; timerSeisZeroSetStart.Interval = TimeSpan.FromSeconds(20); timerSeisZeroSetStart.Tick += TimerSeisZeroSetStart_Tick; timerSeisZeroSetStop.Interval = TimeSpan.FromSeconds(20); timerSeisZeroSetStop.Tick += TimerSeisZeroSetStop_Tick; timerSeisLevelSetStart.Interval = TimeSpan.FromSeconds(20); timerSeisLevelSetStart.Tick += TimerSeisLevelSetStart_Tick; timerSeisLevelSetStop.Interval = TimeSpan.FromSeconds(20); timerSeisLevelSetStop.Tick += TimerSeisLevelSetStop_Tick; timerSeisParaMsgHidden.Interval = TimeSpan.FromSeconds(2); timerSeisParaMsgHidden.Tick += TimerSeisParaMsgHidden_Tick; timerEarthQuakeParaSet.Interval = TimeSpan.FromSeconds(20); timerEarthQuakeParaSet.Tick += TimerEarthQuakeParaSet_Tick; timerEarthQuakeParaRead.Interval = TimeSpan.FromSeconds(20); timerEarthQuakeParaRead.Tick += TimerEarthQuakeParaRead_Tick; #endregion #region 日志页面初始化 string sql = String.Format("select * from logrecordhis where StationID = {0} ORDER by id desc limit 100", 1); MySqlDataReader dataReader = DBHelper.ExecuteReader(sql, 1); int index = 1; while (dataReader.Read()) { LogRecordModel logRecord = new LogRecordModel(); logRecord.Index = index++; logRecord.DataTime = Convert.ToDateTime(dataReader["DataTime"]); logRecord.Remark = dataReader["Record"].ToString(); logRecordViewModel1.TotalLogRecordList.Add(logRecord); } dataReader.Dispose(); logRecordViewModel1.RecordCount = index - 1; logRecordViewModel1.TotalPage = index <= 10 ? 1 : (int)Math.Ceiling((double)index / 10); for (int i = 0; i < (logRecordViewModel1.RecordCount < 10 ? logRecordViewModel1.RecordCount : 10); i++) { logRecordViewModel1.LogRecordList.Add(logRecordViewModel1.TotalLogRecordList[i]); } logRecordViewModel1.LogMsg = string.Format("共计{0}页,当前第{1}页", logRecordViewModel1.TotalPage, 1); sql = String.Format("select * from logrecordhis where StationID = {0} ORDER by id desc limit 100", 2); dataReader = DBHelper.ExecuteReader(sql, 1); index = 1; while (dataReader.Read()) { LogRecordModel logRecord = new LogRecordModel(); logRecord.Index = index++; logRecord.DataTime = Convert.ToDateTime(dataReader["DataTime"]); logRecord.Remark = dataReader["Record"].ToString(); logRecordViewModel2.TotalLogRecordList.Add(logRecord); } dataReader.Dispose(); logRecordViewModel2.RecordCount = index - 1; logRecordViewModel2.TotalPage = index <= 10 ? 1 : (int)Math.Ceiling((double)index / 10); for (int i = 0; i < (logRecordViewModel2.RecordCount < 10 ? logRecordViewModel2.RecordCount : 10); i++) { logRecordViewModel2.LogRecordList.Add(logRecordViewModel2.TotalLogRecordList[i]); } logRecordViewModel2.LogMsg = string.Format("共计{0}页,当前第{1}页", logRecordViewModel2.TotalPage, 1); #endregion #region 告警页面初始化 sql = String.Format("select * from alarminfohis where StationID = {0} ORDER by id desc limit 100", 1); dataReader = DBHelper.ExecuteReader(sql, 1); index = 1; while (dataReader.Read()) { AlarmRecordModel alarmRecordModel = new AlarmRecordModel(); alarmRecordModel.Index = index++; alarmRecordModel.DataTime = Convert.ToDateTime(dataReader["DataTime"]); alarmRecordModel.ParaName = dataReader["ParaName"].ToString(); alarmRecordModel.ParaState = dataReader["ParaState"].ToString(); alarmRecordModel.ProcessingMethod = dataReader["ProcessingMethod"].ToString(); if (Convert.ToInt32(dataReader["UrgencyLevel"]) == 1) { alarmRecordModel.UrgencyLevel = (ImageSource)Application.Current.FindResource("CycleRed"); } else if (Convert.ToInt32(dataReader["UrgencyLevel"]) == 2) { alarmRecordModel.UrgencyLevel = (ImageSource)Application.Current.FindResource("CycleOrange"); } else { alarmRecordModel.UrgencyLevel = (ImageSource)Application.Current.FindResource("CycleYellow"); } alarmRecordViewModel1.TotalAlarmRecordList.Add(alarmRecordModel); } dataReader.Dispose(); alarmRecordViewModel1.RecordCount = index - 1; alarmRecordViewModel1.TotalPage = (index - 1) <= 10 ? 1 : (int)Math.Ceiling((double)(index - 1) / 10); for (int i = 0; i < (alarmRecordViewModel1.RecordCount < 10 ? alarmRecordViewModel1.RecordCount : 10); i++) { alarmRecordViewModel1.AlarmRecordList.Add(alarmRecordViewModel1.TotalAlarmRecordList[i]); } alarmRecordViewModel1.AlarmMsg = string.Format("共计{0}页,当前第{1}页", alarmRecordViewModel1.TotalPage, 1); sql = String.Format("select * from alarminfohis where StationID = {0} ORDER by id desc limit 100", 2); dataReader = DBHelper.ExecuteReader(sql, 1); index = 1; while (dataReader.Read()) { AlarmRecordModel alarmRecordModel = new AlarmRecordModel(); alarmRecordModel.Index = index++; alarmRecordModel.DataTime = Convert.ToDateTime(dataReader["DataTime"]); alarmRecordModel.ParaName = dataReader["ParaName"].ToString(); alarmRecordModel.ParaState = dataReader["ParaState"].ToString(); alarmRecordModel.ProcessingMethod = dataReader["ProcessingMethod"].ToString(); if (Convert.ToInt32(dataReader["UrgencyLevel"]) == 1) { alarmRecordModel.UrgencyLevel = (ImageSource)Application.Current.FindResource("CycleRed"); } else if (Convert.ToInt32(dataReader["UrgencyLevel"]) == 2) { alarmRecordModel.UrgencyLevel = (ImageSource)Application.Current.FindResource("CycleOrange"); } else { alarmRecordModel.UrgencyLevel = (ImageSource)Application.Current.FindResource("CycleYellow"); } alarmRecordViewModel2.TotalAlarmRecordList.Add(alarmRecordModel); } dataReader.Dispose(); alarmRecordViewModel2.RecordCount = index - 1; alarmRecordViewModel2.TotalPage = (index - 1) <= 10 ? 1 : (int)Math.Ceiling((double)(index - 1) / 10); for (int i = 0; i < (alarmRecordViewModel2.RecordCount < 10 ? alarmRecordViewModel2.RecordCount : 10); i++) { alarmRecordViewModel2.AlarmRecordList.Add(alarmRecordViewModel2.TotalAlarmRecordList[i]); } alarmRecordViewModel2.AlarmMsg = string.Format("共计{0}页,当前第{1}页", alarmRecordViewModel2.TotalPage, 1); #endregion #region 系统状态页面初始化 sql = String.Format("select * from conboxenvpara where StationID = {0} ORDER by id desc limit 100", 1); dataReader = DBHelper.ExecuteReader(sql, 1); index = 1; while (dataReader.Read()) { BaseStationStatusModel baseStationStatusModel = new BaseStationStatusModel(); baseStationStatusModel.Index = index++; baseStationStatusModel.DataTime = Convert.ToDateTime(dataReader["DataTime"]); baseStationStatusModel.In_Vol = Convert.ToSingle(string.IsNullOrEmpty(dataReader["In_Vol"].ToString()) ? "0" : dataReader["In_Vol"]); baseStationStatusModel.In_Cur = Convert.ToSingle(string.IsNullOrEmpty(dataReader["In_Cur"].ToString()) ? "0" : dataReader["In_Cur"]); baseStationStatusModel.JBH_Tem = Convert.ToSingle(string.IsNullOrEmpty(dataReader["JBH_Tem"].ToString()) ? "0" : dataReader["JBH_Tem"]); baseStationStatusModel.JBH_Hum = Convert.ToSingle(string.IsNullOrEmpty(dataReader["JBH_Hum"].ToString()) ? "0" : dataReader["JBH_Hum"]); int leakState = Convert.ToInt32(string.IsNullOrEmpty(dataReader["JBH_Leak"].ToString()) ? "1" : dataReader["JBH_Leak"]); if (leakState == 1) { baseStationStatusModel.JBH_Leak = (ImageSource)Application.Current.FindResource("CycleRed"); } else { baseStationStatusModel.JBH_Leak = (ImageSource)Application.Current.FindResource("CycleGreen"); } baseStationStatusModel.JBH_Attitude_x = Convert.ToSingle(string.IsNullOrEmpty(dataReader["JBH_Attitude_x"].ToString()) ? "0" : dataReader["JBH_Attitude_x"]); baseStationStatusModel.JBH_Attitude_y = Convert.ToSingle(string.IsNullOrEmpty(dataReader["JBH_Attitude_y"].ToString()) ? "0" : dataReader["JBH_Attitude_y"]); baseStationStatusModel.JBH_Attitude_z = Convert.ToSingle(string.IsNullOrEmpty(dataReader["JBH_Attitude_z"].ToString()) ? "0" : dataReader["JBH_Attitude_z"]); systemStateDataViewModel1.TotalSystemStateDataList.Add(baseStationStatusModel); } dataReader.Dispose(); systemStateDataViewModel1.RecordCount = index - 1; systemStateDataViewModel1.TotalPage = (index - 1) <= 10 ? 1 : (int)Math.Ceiling((double)(index - 1) / 10); for (int i = 0; i < (systemStateDataViewModel1.RecordCount < 10 ? systemStateDataViewModel1.RecordCount : 10); i++) { systemStateDataViewModel1.SystemStateDataList.Add(systemStateDataViewModel1.TotalSystemStateDataList[i]); } systemStateDataViewModel1.SystemStateMsg = string.Format("共计{0}页,当前第{1}页", systemStateDataViewModel1.TotalPage, 1); sql = String.Format("select * from conboxenvpara where StationID = {0} ORDER by id desc limit 100", 2); dataReader = DBHelper.ExecuteReader(sql, 1); index = 1; while (dataReader.Read()) { BaseStationStatusModel baseStationStatusModel = new BaseStationStatusModel(); baseStationStatusModel.Index = index++; baseStationStatusModel.DataTime = Convert.ToDateTime(dataReader["DataTime"]); baseStationStatusModel.In_Vol = Convert.ToSingle(string.IsNullOrEmpty(dataReader["In_Vol"].ToString()) ? "0" : dataReader["In_Vol"]); baseStationStatusModel.In_Cur = Convert.ToSingle(string.IsNullOrEmpty(dataReader["In_Cur"].ToString()) ? "0" : dataReader["In_Cur"]); baseStationStatusModel.JBH_Tem = Convert.ToSingle(string.IsNullOrEmpty(dataReader["JBH_Tem"].ToString()) ? "0" : dataReader["JBH_Tem"]); baseStationStatusModel.JBH_Hum = Convert.ToSingle(string.IsNullOrEmpty(dataReader["JBH_Hum"].ToString()) ? "0" : dataReader["JBH_Hum"]); int leakState = Convert.ToInt32(string.IsNullOrEmpty(dataReader["JBH_Leak"].ToString()) ? "1" : dataReader["JBH_Leak"]); if (leakState == 1) { baseStationStatusModel.JBH_Leak = (ImageSource)Application.Current.FindResource("CycleRed"); } else { baseStationStatusModel.JBH_Leak = (ImageSource)Application.Current.FindResource("CycleGreen"); } baseStationStatusModel.JBH_Attitude_x = Convert.ToSingle(string.IsNullOrEmpty(dataReader["JBH_Attitude_x"].ToString()) ? "0" : dataReader["JBH_Attitude_x"]); baseStationStatusModel.JBH_Attitude_y = Convert.ToSingle(string.IsNullOrEmpty(dataReader["JBH_Attitude_y"].ToString()) ? "0" : dataReader["JBH_Attitude_y"]); baseStationStatusModel.JBH_Attitude_z = Convert.ToSingle(string.IsNullOrEmpty(dataReader["JBH_Attitude_z"].ToString()) ? "0" : dataReader["JBH_Attitude_z"]); systemStateDataViewModel2.TotalSystemStateDataList.Add(baseStationStatusModel); } dataReader.Dispose(); systemStateDataViewModel2.RecordCount = index - 1; systemStateDataViewModel2.TotalPage = (index - 1) <= 10 ? 1 : (int)Math.Ceiling((double)(index - 1) / 10); for (int i = 0; i < (systemStateDataViewModel2.RecordCount < 10 ? systemStateDataViewModel2.RecordCount : 10); i++) { systemStateDataViewModel2.SystemStateDataList.Add(systemStateDataViewModel2.TotalSystemStateDataList[i]); } systemStateDataViewModel2.SystemStateMsg = string.Format("共计{0}页,当前第{1}页", systemStateDataViewModel2.TotalPage, 1); #endregion #region 升压站状态数据界面初始化 sql = String.Format("select RecordTime,In_Vol,In_Cur from boosterstationstate where StationID = {0} ORDER by id desc limit 100", 1); dataReader = DBHelper.ExecuteReader(sql, 1); index = 1; while (dataReader.Read()) { BoosterStationStateDataModel boosterStationStateDataModel = new BoosterStationStateDataModel(); boosterStationStateDataModel.Index = index++; boosterStationStateDataModel.DataTime = Convert.ToDateTime(dataReader["RecordTime"]); boosterStationStateDataModel.In_Vol = Convert.ToSingle(string.IsNullOrEmpty(dataReader["In_Vol"].ToString()) ? "0" : dataReader["In_Vol"]); boosterStationStateDataModel.In_Cur = Convert.ToSingle(string.IsNullOrEmpty(dataReader["In_Cur"].ToString()) ? "0" : dataReader["In_Cur"]); boosterStationStateDataViewModel1.TotalBoosterStationStateDataList.Add(boosterStationStateDataModel); } dataReader.Dispose(); boosterStationStateDataViewModel1.RecordCount = index - 1; boosterStationStateDataViewModel1.TotalPage = (index - 1) <= 10 ? 1 : (int)Math.Ceiling((double)(index - 1) / 10); for (int i = 0; i < (boosterStationStateDataViewModel1.RecordCount < 10 ? boosterStationStateDataViewModel1.RecordCount : 10); i++) { boosterStationStateDataViewModel1.BoosterStationStateDataList.Add(boosterStationStateDataViewModel1.TotalBoosterStationStateDataList[i]); } boosterStationStateDataViewModel1.BoosterStationStateMsg = string.Format("共计{0}页,当前第{1}页", boosterStationStateDataViewModel1.TotalPage, 1); sql = String.Format("select RecordTime,In_Vol,In_Cur from boosterstationstate where StationID = {0} ORDER by id desc limit 100", 2); dataReader = DBHelper.ExecuteReader(sql, 1); index = 1; while (dataReader.Read()) { BoosterStationStateDataModel boosterStationStateDataModel = new BoosterStationStateDataModel(); boosterStationStateDataModel.Index = index++; boosterStationStateDataModel.DataTime = Convert.ToDateTime(dataReader["RecordTime"]); boosterStationStateDataModel.In_Vol = Convert.ToSingle(string.IsNullOrEmpty(dataReader["In_Vol"].ToString()) ? "0" : dataReader["In_Vol"]); boosterStationStateDataModel.In_Cur = Convert.ToSingle(string.IsNullOrEmpty(dataReader["In_Cur"].ToString()) ? "0" : dataReader["In_Cur"]); boosterStationStateDataViewModel2.TotalBoosterStationStateDataList.Add(boosterStationStateDataModel); } dataReader.Dispose(); boosterStationStateDataViewModel2.RecordCount = index - 1; boosterStationStateDataViewModel2.TotalPage = (index - 1) <= 10 ? 1 : (int)Math.Ceiling((double)(index - 1) / 10); for (int i = 0; i < (boosterStationStateDataViewModel2.RecordCount < 10 ? boosterStationStateDataViewModel2.RecordCount : 10); i++) { boosterStationStateDataViewModel2.BoosterStationStateDataList.Add(boosterStationStateDataViewModel2.TotalBoosterStationStateDataList[i]); } boosterStationStateDataViewModel2.BoosterStationStateMsg = string.Format("共计{0}页,当前第{1}页", boosterStationStateDataViewModel2.TotalPage, 1); #endregion #region 升压站状态页面折线图初始化 var chartValuesTeam1 = new ChartValues(); var chartValuesTeam2 = new ChartValues(); sql = String.Format("select RecordTime,In_Vol,In_Cur from boosterstationstate where StationID = {0} ORDER by id desc limit {1}", 1, ChartPointNum); dataReader = DBHelper.ExecuteReader(sql, 1); while (dataReader.Read()) { if (!Convert.IsDBNull(dataReader["In_Vol"]) && !Convert.IsDBNull(dataReader["In_Cur"])) { chartValuesTeam1.Add(new DateTimePoint { Value = Convert.ToSingle(dataReader["In_Vol"]), DateTime = Convert.ToDateTime(dataReader["RecordTime"]), }); chartValuesTeam2.Add(new DateTimePoint { Value = Convert.ToSingle(dataReader["In_Cur"]), DateTime = Convert.ToDateTime(dataReader["RecordTime"]), }); } } dataReader.Dispose(); boosterStationStateDataViewModel1.SeriesCollection = new SeriesCollection { new LineSeries { Title = "输入电压", Values =chartValuesTeam1, LineSmoothness = 0, ScalesYAt = 0, Stroke = new SolidColorBrush(Color.FromArgb(255, 43, 237, 241)), Fill = new SolidColorBrush(Colors.Transparent) }, new LineSeries { Title = "输入电流", Values = chartValuesTeam2, LineSmoothness = 0, ScalesYAt = 1, Stroke = new SolidColorBrush(Color.FromArgb(255, 255, 165, 0)), Fill = new SolidColorBrush(Colors.Transparent) }, }; boosterStationStateDataViewModel1.XFormatter = val => new DateTime((long)val).ToString("MM/dd HH:mm"); boosterStationStateDataViewModel1.YFormatter1 = val => val.ToString("F2") + " V"; boosterStationStateDataViewModel1.YFormatter2 = val => val.ToString("F2") + " A"; var chartValuesTeam3 = new ChartValues(); var chartValuesTeam4 = new ChartValues(); sql = String.Format("select RecordTime,In_Vol,In_Cur from boosterstationstate where StationID = {0} ORDER by id desc limit {1}", 2, ChartPointNum); dataReader = DBHelper.ExecuteReader(sql, 1); while (dataReader.Read()) { if (!Convert.IsDBNull(dataReader["In_Vol"]) && !Convert.IsDBNull(dataReader["In_Cur"])) { chartValuesTeam3.Add(new DateTimePoint { Value = Convert.ToSingle(dataReader["In_Vol"]), DateTime = Convert.ToDateTime(dataReader["RecordTime"]), }); chartValuesTeam4.Add(new DateTimePoint { Value = Convert.ToSingle(dataReader["In_Cur"]), DateTime = Convert.ToDateTime(dataReader["RecordTime"]), }); } } dataReader.Dispose(); boosterStationStateDataViewModel2.SeriesCollection = new SeriesCollection { new LineSeries { Title = "输入电压", Values = chartValuesTeam3, LineSmoothness = 0, ScalesYAt = 0, Stroke = new SolidColorBrush(Color.FromArgb(255, 43, 237, 241)), Fill = new SolidColorBrush(Colors.Transparent) }, new LineSeries { Title = "输入电流", Values = chartValuesTeam4, LineSmoothness = 0, ScalesYAt = 1, Stroke = new SolidColorBrush(Color.FromArgb(255, 255, 165, 0)), Fill = new SolidColorBrush(Colors.Transparent) }, }; boosterStationStateDataViewModel2.XFormatter = val => new DateTime((long)val).ToString("MM/dd HH:mm"); boosterStationStateDataViewModel2.YFormatter1 = val => val.ToString("F2") + " V"; boosterStationStateDataViewModel2.YFormatter2 = val => val.ToString("F2") + " A"; #endregion #region 实时数据显示页面折线图初始化 var chartValuesConboxTem = new ChartValues(); var chartValuesConboxHum = new ChartValues(); var chartValuesConboxVol = new ChartValues(); var chartValuesConboxCur = new ChartValues(); sql = String.Format("select * from conboxenvpara where StationID = {0} ORDER by id desc limit {1}", 1, ChartPointNum); dataReader = DBHelper.ExecuteReader(sql, 1); while (dataReader.Read()) { if (!Convert.IsDBNull(dataReader["In_Vol"]) && !Convert.IsDBNull(dataReader["In_Cur"])) { chartValuesConboxVol.Add(new DateTimePoint { Value = Convert.ToSingle(dataReader["In_Vol"]), DateTime = Convert.ToDateTime(dataReader["DataTime"]), }); chartValuesConboxCur.Add(new DateTimePoint { Value = Convert.ToSingle(dataReader["In_Cur"]), DateTime = Convert.ToDateTime(dataReader["DataTime"]), }); } if (!Convert.IsDBNull(dataReader["JBH_Tem"]) && !Convert.IsDBNull(dataReader["JBH_Hum"])) { chartValuesConboxTem.Add(new DateTimePoint { Value = Convert.ToSingle(dataReader["JBH_Tem"]), DateTime = Convert.ToDateTime(dataReader["DataTime"]), }); chartValuesConboxHum.Add(new DateTimePoint { Value = Convert.ToSingle(dataReader["JBH_Hum"]), DateTime = Convert.ToDateTime(dataReader["DataTime"]), }); } } dataReader.Dispose(); realTimeDataViewModel1.SeriesCollectionConboxVol = new SeriesCollection { new LineSeries { Title = "输入电压", Values = chartValuesConboxVol, LineSmoothness = 0, ScalesYAt = 0, Stroke = new SolidColorBrush(Color.FromArgb(255, 43, 237, 241)), Fill = new SolidColorBrush(Colors.Transparent) }, }; realTimeDataViewModel1.SeriesCollectionConboxCur = new SeriesCollection { new LineSeries { Title = "输入电流", Values = chartValuesConboxCur, LineSmoothness = 0, ScalesYAt = 0, Stroke = new SolidColorBrush(Color.FromArgb(255, 43, 237, 241)), Fill = new SolidColorBrush(Colors.Transparent) }, }; realTimeDataViewModel1.SeriesCollectionConboxTem = new SeriesCollection { new LineSeries { Title = "温度", Values = chartValuesConboxTem, LineSmoothness = 0, ScalesYAt = 0, Stroke = new SolidColorBrush(Color.FromArgb(255, 43, 237, 241)), Fill = new SolidColorBrush(Colors.Transparent) }, }; realTimeDataViewModel1.SeriesCollectionConboxHum = new SeriesCollection { new LineSeries { Title = "湿度", Values = chartValuesConboxHum, LineSmoothness = 0, ScalesYAt = 0, Stroke = new SolidColorBrush(Color.FromArgb(255, 43, 237, 241)), Fill = new SolidColorBrush(Colors.Transparent) }, }; var chartValuesBoosterStationVol = new ChartValues(); var chartValuesBoosterStationCur = new ChartValues(); sql = String.Format("select RecordTime,In_Vol,In_Cur from boosterstationstate where StationID = {0} ORDER by id desc limit {1}", 1, ChartPointNum); dataReader = DBHelper.ExecuteReader(sql, 1); while (dataReader.Read()) { if (!Convert.IsDBNull(dataReader["In_Vol"]) && !Convert.IsDBNull(dataReader["In_Cur"])) { chartValuesBoosterStationVol.Add(new DateTimePoint { Value = Convert.ToSingle(dataReader["In_Vol"]), DateTime = Convert.ToDateTime(dataReader["RecordTime"]), }); chartValuesBoosterStationCur.Add(new DateTimePoint { Value = Convert.ToSingle(dataReader["In_Cur"]), DateTime = Convert.ToDateTime(dataReader["RecordTime"]), }); } } dataReader.Dispose(); realTimeDataViewModel1.SeriesCollectionBoosterStationVol = new SeriesCollection { new LineSeries { Title = "输入电压", Values = chartValuesBoosterStationVol, LineSmoothness = 0, ScalesYAt = 0, Stroke = new SolidColorBrush(Color.FromArgb(255, 43, 237, 241)), Fill = new SolidColorBrush(Colors.Transparent) }, }; realTimeDataViewModel1.SeriesCollectionBoosterStationCur = new SeriesCollection { new LineSeries { Title = "输入电流", Values = chartValuesBoosterStationCur, LineSmoothness = 0, ScalesYAt = 0, Stroke = new SolidColorBrush(Color.FromArgb(255, 43, 237, 241)), Fill = new SolidColorBrush(Colors.Transparent) }, }; realTimeDataViewModel1.XFormatter = val => new DateTime((long)val).ToString("MM/dd HH:mm"); realTimeDataViewModel1.YFormatterVol = val => val.ToString("F2") + " V"; realTimeDataViewModel1.YFormatterCur = val => val.ToString("F2") + " A"; realTimeDataViewModel1.YFormatterTem = val => val.ToString("F2") + " ℃"; realTimeDataViewModel1.YFormatterHum = val => val.ToString("F2") + " %"; chartValuesConboxTem = new ChartValues(); chartValuesConboxHum = new ChartValues(); chartValuesConboxVol = new ChartValues(); chartValuesConboxCur = new ChartValues(); sql = String.Format("select * from conboxenvpara where StationID = {0} ORDER by id desc limit {1}", 2, ChartPointNum); dataReader = DBHelper.ExecuteReader(sql, 1); while (dataReader.Read()) { if (!Convert.IsDBNull(dataReader["In_Vol"]) && !Convert.IsDBNull(dataReader["In_Cur"])) { chartValuesConboxVol.Add(new DateTimePoint { Value = Convert.ToSingle(dataReader["In_Vol"]), DateTime = Convert.ToDateTime(dataReader["DataTime"]), }); chartValuesConboxCur.Add(new DateTimePoint { Value = Convert.ToSingle(dataReader["In_Cur"]), DateTime = Convert.ToDateTime(dataReader["DataTime"]), }); } if (!Convert.IsDBNull(dataReader["JBH_Tem"]) && !Convert.IsDBNull(dataReader["JBH_Hum"])) { chartValuesConboxTem.Add(new DateTimePoint { Value = Convert.ToSingle(dataReader["JBH_Tem"]), DateTime = Convert.ToDateTime(dataReader["DataTime"]), }); chartValuesConboxHum.Add(new DateTimePoint { Value = Convert.ToSingle(dataReader["JBH_Hum"]), DateTime = Convert.ToDateTime(dataReader["DataTime"]), }); } } dataReader.Dispose(); realTimeDataViewModel2.SeriesCollectionConboxVol = new SeriesCollection { new LineSeries { Title = "输入电压", Values = chartValuesConboxVol, LineSmoothness = 0, ScalesYAt = 0, Stroke = new SolidColorBrush(Color.FromArgb(255, 43, 237, 241)), Fill = new SolidColorBrush(Colors.Transparent) }, }; realTimeDataViewModel2.SeriesCollectionConboxCur = new SeriesCollection { new LineSeries { Title = "输入电流", Values = chartValuesConboxCur, LineSmoothness = 0, ScalesYAt = 0, Stroke = new SolidColorBrush(Color.FromArgb(255, 43, 237, 241)), Fill = new SolidColorBrush(Colors.Transparent) }, }; realTimeDataViewModel2.SeriesCollectionConboxTem = new SeriesCollection { new LineSeries { Title = "温度", Values = chartValuesConboxTem, LineSmoothness = 0, ScalesYAt = 0, Stroke = new SolidColorBrush(Color.FromArgb(255, 43, 237, 241)), Fill = new SolidColorBrush(Colors.Transparent) }, }; realTimeDataViewModel2.SeriesCollectionConboxHum = new SeriesCollection { new LineSeries { Title = "湿度", Values = chartValuesConboxHum, LineSmoothness = 0, ScalesYAt = 0, Stroke = new SolidColorBrush(Color.FromArgb(255, 43, 237, 241)), Fill = new SolidColorBrush(Colors.Transparent) }, }; chartValuesBoosterStationVol = new ChartValues(); chartValuesBoosterStationCur = new ChartValues(); sql = String.Format("select RecordTime,In_Vol,In_Cur from boosterstationstate where StationID = {0} ORDER by id desc limit {1}", 2, ChartPointNum); dataReader = DBHelper.ExecuteReader(sql, 1); while (dataReader.Read()) { if (!Convert.IsDBNull(dataReader["In_Vol"]) && !Convert.IsDBNull(dataReader["In_Cur"])) { chartValuesBoosterStationVol.Add(new DateTimePoint { Value = Convert.ToSingle(dataReader["In_Vol"]), DateTime = Convert.ToDateTime(dataReader["RecordTime"]), }); chartValuesBoosterStationCur.Add(new DateTimePoint { Value = Convert.ToSingle(dataReader["In_Cur"]), DateTime = Convert.ToDateTime(dataReader["RecordTime"]), }); } } dataReader.Dispose(); realTimeDataViewModel2.SeriesCollectionBoosterStationVol = new SeriesCollection { new LineSeries { Title = "输入电压", Values = chartValuesBoosterStationVol, LineSmoothness = 0, ScalesYAt = 0, Stroke = new SolidColorBrush(Color.FromArgb(255, 43, 237, 241)), Fill = new SolidColorBrush(Colors.Transparent) }, }; realTimeDataViewModel2.SeriesCollectionBoosterStationCur = new SeriesCollection { new LineSeries { Title = "输入电流", Values = chartValuesBoosterStationCur, LineSmoothness = 0, ScalesYAt = 0, Stroke = new SolidColorBrush(Color.FromArgb(255, 43, 237, 241)), Fill = new SolidColorBrush(Colors.Transparent) }, }; realTimeDataViewModel2.XFormatter = val => new DateTime((long)val).ToString("MM/dd HH:mm"); realTimeDataViewModel2.YFormatterVol = val => val.ToString("F2") + " V"; realTimeDataViewModel2.YFormatterCur = val => val.ToString("F2") + " A"; realTimeDataViewModel2.YFormatterTem = val => val.ToString("F2") + " ℃"; realTimeDataViewModel2.YFormatterHum = val => val.ToString("F2") + " %"; #endregion #region 实时数据显示页面数据初始化 sql = String.Format("select * from conboxenvpara where StationID = {0} ORDER by id desc limit 1", 1); dataReader = DBHelper.ExecuteReader(sql, 1); while (dataReader.Read()) { realTimeDataViewModel1.BaseStationStatus[0].Value = string.IsNullOrEmpty(dataReader["In_Vol"].ToString()) ? "0.00" : dataReader["In_Vol"].ToString(); realTimeDataViewModel1.BaseStationStatus[3].Value = string.IsNullOrEmpty(dataReader["In_Cur"].ToString()) ? "0.00" : dataReader["In_Cur"].ToString(); realTimeDataViewModel1.BaseStationStatus[1].Value = string.IsNullOrEmpty(dataReader["JBH_Tem"].ToString()) ? "0.00" : dataReader["JBH_Tem"].ToString(); realTimeDataViewModel1.BaseStationStatus[4].Value = string.IsNullOrEmpty(dataReader["JBH_Hum"].ToString()) ? "0.00" : dataReader["JBH_Hum"].ToString(); //realTimeDataViewModel1.BaseStationStatus[4].Value = string.IsNullOrEmpty(dataReader["JBH_Attitude_x"].ToString()) ? "0.00" : dataReader["JBH_Attitude_x"].ToString(); //realTimeDataViewModel1.BaseStationStatus[5].Value = string.IsNullOrEmpty(dataReader["JBH_Attitude_y"].ToString()) ? "0.00" : dataReader["JBH_Attitude_y"].ToString(); //realTimeDataViewModel1.BaseStationStatus[6].Value = string.IsNullOrEmpty(dataReader["JBH_Attitude_z"].ToString()) ? "0.00" : dataReader["JBH_Attitude_z"].ToString(); int leakState = Convert.ToInt32(string.IsNullOrEmpty(dataReader["JBH_Leak"].ToString()) ? "1" : dataReader["JBH_Leak"]); if (leakState == 1) { realTimeDataViewModel1.LeakageImage = (ImageSource)Application.Current.FindResource("CycleRed"); } else { realTimeDataViewModel1.LeakageImage = (ImageSource)Application.Current.FindResource("CycleGreen"); } realTimeDataViewModel1.DataTimeConboxTem = Convert.ToDateTime(dataReader["DataTime"]); realTimeDataViewModel1.DataTimeConboxHum = Convert.ToDateTime(dataReader["DataTime"]); realTimeDataViewModel1.DataTimeConboxVol = Convert.ToDateTime(dataReader["DataTime"]); realTimeDataViewModel1.DataTimeConboxCur = Convert.ToDateTime(dataReader["DataTime"]); } dataReader.Dispose(); sql = String.Format("select * from boosterstationstate where StationID = {0} ORDER by id desc limit 1", 1); dataReader = DBHelper.ExecuteReader(sql, 1); while (dataReader.Read()) { realTimeDataViewModel1.BaseStationStatus[2].Value = string.IsNullOrEmpty(dataReader["In_Vol"].ToString()) ? "0.00" : dataReader["In_Vol"].ToString(); realTimeDataViewModel1.BaseStationStatus[5].Value = string.IsNullOrEmpty(dataReader["In_Cur"].ToString()) ? "0.00" : dataReader["In_Cur"].ToString(); realTimeDataViewModel1.DataTimeBoosterStationVol = Convert.ToDateTime(dataReader["RecordTime"]); realTimeDataViewModel1.DataTimeBoosterStationCur = Convert.ToDateTime(dataReader["RecordTime"]); } dataReader.Dispose(); sql = String.Format("select * from conboxenvpara where StationID = {0} ORDER by id desc limit 1", 2); dataReader = DBHelper.ExecuteReader(sql, 1); while (dataReader.Read()) { realTimeDataViewModel2.BaseStationStatus[0].Value = string.IsNullOrEmpty(dataReader["In_Vol"].ToString()) ? "0.00" : dataReader["In_Vol"].ToString(); realTimeDataViewModel2.BaseStationStatus[3].Value = string.IsNullOrEmpty(dataReader["In_Cur"].ToString()) ? "0.00" : dataReader["In_Cur"].ToString(); realTimeDataViewModel2.BaseStationStatus[1].Value = string.IsNullOrEmpty(dataReader["JBH_Tem"].ToString()) ? "0.00" : dataReader["JBH_Tem"].ToString(); realTimeDataViewModel2.BaseStationStatus[4].Value = string.IsNullOrEmpty(dataReader["JBH_Hum"].ToString()) ? "0.00" : dataReader["JBH_Hum"].ToString(); //realTimeDataViewModel2.BaseStationStatus[4].Value = string.IsNullOrEmpty(dataReader["JBH_Attitude_x"].ToString()) ? "0.00" : dataReader["JBH_Attitude_x"].ToString(); //realTimeDataViewModel2.BaseStationStatus[5].Value = string.IsNullOrEmpty(dataReader["JBH_Attitude_y"].ToString()) ? "0.00" : dataReader["JBH_Attitude_y"].ToString(); //realTimeDataViewModel2.BaseStationStatus[6].Value = string.IsNullOrEmpty(dataReader["JBH_Attitude_z"].ToString()) ? "0.00" : dataReader["JBH_Attitude_z"].ToString(); int leakState = Convert.ToInt32(string.IsNullOrEmpty(dataReader["JBH_Leak"].ToString()) ? "1" : dataReader["JBH_Leak"]); if (leakState == 1) { realTimeDataViewModel2.LeakageImage = (ImageSource)Application.Current.FindResource("CycleRed"); } else { realTimeDataViewModel2.LeakageImage = (ImageSource)Application.Current.FindResource("CycleGreen"); } realTimeDataViewModel2.DataTimeConboxTem = Convert.ToDateTime(dataReader["DataTime"]); realTimeDataViewModel2.DataTimeConboxHum = Convert.ToDateTime(dataReader["DataTime"]); realTimeDataViewModel2.DataTimeConboxVol = Convert.ToDateTime(dataReader["DataTime"]); realTimeDataViewModel2.DataTimeConboxCur = Convert.ToDateTime(dataReader["DataTime"]); } dataReader.Dispose(); sql = String.Format("select * from boosterstationstate where StationID = {0} ORDER by id desc limit 1", 2); dataReader = DBHelper.ExecuteReader(sql, 1); while (dataReader.Read()) { realTimeDataViewModel2.BaseStationStatus[2].Value = string.IsNullOrEmpty(dataReader["In_Vol"].ToString()) ? "0.00" : dataReader["In_Vol"].ToString(); realTimeDataViewModel2.BaseStationStatus[5].Value = string.IsNullOrEmpty(dataReader["In_Cur"].ToString()) ? "0.00" : dataReader["In_Cur"].ToString(); realTimeDataViewModel2.DataTimeBoosterStationVol = Convert.ToDateTime(dataReader["RecordTime"]); realTimeDataViewModel2.DataTimeBoosterStationCur = Convert.ToDateTime(dataReader["RecordTime"]); } dataReader.Dispose(); #endregion #region 实时数据显示页面告警数据初始化 sql = String.Format("select * from alarminfohis where StationID = {0} ORDER by id desc limit 7", 1); dataReader = DBHelper.ExecuteReader(sql, 1); index = 1; while (dataReader.Read()) { AlarmRecordModel alarmRecordModel = new AlarmRecordModel(); alarmRecordModel.Index = index++; alarmRecordModel.DataTime = Convert.ToDateTime(dataReader["DataTime"]); alarmRecordModel.ParaName = dataReader["ParaName"].ToString(); alarmRecordModel.ParaState = dataReader["ParaState"].ToString(); alarmRecordModel.ProcessingMethod = dataReader["ProcessingMethod"].ToString(); if (Convert.ToInt32(dataReader["UrgencyLevel"]) == 1) { alarmRecordModel.UrgencyLevel = (ImageSource)Application.Current.FindResource("CycleYellow"); } else if (Convert.ToInt32(dataReader["UrgencyLevel"]) == 2) { alarmRecordModel.UrgencyLevel = (ImageSource)Application.Current.FindResource("CycleOrange"); } else { alarmRecordModel.UrgencyLevel = (ImageSource)Application.Current.FindResource("CycleRed"); } realTimeDataViewModel1.AlarmList.Add(alarmRecordModel); } dataReader.Dispose(); sql = String.Format("select * from alarminfohis where StationID = {0} ORDER by id desc limit 7", 2); dataReader = DBHelper.ExecuteReader(sql, 1); index = 1; while (dataReader.Read()) { AlarmRecordModel alarmRecordModel = new AlarmRecordModel(); alarmRecordModel.Index = index++; alarmRecordModel.DataTime = Convert.ToDateTime(dataReader["DataTime"]); alarmRecordModel.ParaName = dataReader["ParaName"].ToString(); alarmRecordModel.ParaState = dataReader["ParaState"].ToString(); alarmRecordModel.ProcessingMethod = dataReader["ProcessingMethod"].ToString(); if (Convert.ToInt32(dataReader["UrgencyLevel"]) == 1) { alarmRecordModel.UrgencyLevel = (ImageSource)Application.Current.FindResource("CycleYellow"); } else if (Convert.ToInt32(dataReader["UrgencyLevel"]) == 2) { alarmRecordModel.UrgencyLevel = (ImageSource)Application.Current.FindResource("CycleOrange"); } else { alarmRecordModel.UrgencyLevel = (ImageSource)Application.Current.FindResource("CycleRed"); } realTimeDataViewModel2.AlarmList.Add(alarmRecordModel); } dataReader.Dispose(); #endregion #region 实时数据显示页面三维模型姿态数据初始化 sql = String.Format("select * from conboxenvpara where StationID = {0} ORDER by id desc limit 1", 1); dataReader = DBHelper.ExecuteReader(sql, 1); while (dataReader.Read()) { realTimeDataViewModel1.BaseStationGesture.RollAngle = Convert.ToSingle(string.IsNullOrEmpty(dataReader["JBH_Attitude_x"].ToString()) ? "0.00" : dataReader["JBH_Attitude_x"].ToString()); realTimeDataViewModel1.BaseStationGesture.PitchAngle = Convert.ToSingle(string.IsNullOrEmpty(dataReader["JBH_Attitude_y"].ToString()) ? "0.00" : dataReader["JBH_Attitude_y"].ToString()); realTimeDataViewModel1.BaseStationGesture.HeadingAngle = Convert.ToSingle(string.IsNullOrEmpty(dataReader["JBH_Attitude_z"].ToString()) ? "0.00" : dataReader["JBH_Attitude_z"].ToString()); } dataReader.Dispose(); baseStationModelViewModel1.BaseStationGesture.RollAngle = realTimeDataViewModel1.BaseStationGesture.RollAngle; baseStationModelViewModel1.BaseStationGesture.PitchAngle = realTimeDataViewModel1.BaseStationGesture.PitchAngle; baseStationModelViewModel1.BaseStationGesture.HeadingAngle = realTimeDataViewModel1.BaseStationGesture.HeadingAngle; float CalibrationHG = Convert.ToSingle(Tools.GetAppSetting("CalibrationHG")); float CalibrationFY = Convert.ToSingle(Tools.GetAppSetting("CalibrationFY")); float CalibrationPH = Convert.ToSingle(Tools.GetAppSetting("CalibrationPH")); realTimeDataViewModel1.BaseStationGesture.PY_HG = realTimeDataViewModel1.BaseStationGesture.RollAngle - CalibrationHG; realTimeDataViewModel1.BaseStationGesture.PY_FY = realTimeDataViewModel1.BaseStationGesture.PitchAngle - CalibrationFY; realTimeDataViewModel1.BaseStationGesture.PY_PH = realTimeDataViewModel1.BaseStationGesture.HeadingAngle - CalibrationPH; if (Math.Abs(realTimeDataViewModel1.BaseStationGesture.PY_HG) <= 0.75) realTimeDataViewModel1.AngleBackgroundX = new SolidColorBrush(Colors.Green); else if (Math.Abs(realTimeDataViewModel1.BaseStationGesture.PY_HG) > 0.75 && Math.Abs(realTimeDataViewModel1.BaseStationGesture.PY_HG) <= 1) realTimeDataViewModel1.AngleBackgroundX = new SolidColorBrush(Colors.Yellow); else realTimeDataViewModel1.AngleBackgroundX = new SolidColorBrush(Colors.Red); if (Math.Abs(realTimeDataViewModel1.BaseStationGesture.PY_FY) <= 0.75) realTimeDataViewModel1.AngleBackgroundY = new SolidColorBrush(Colors.Green); else if (Math.Abs(realTimeDataViewModel1.BaseStationGesture.PY_FY) > 0.75 && Math.Abs(realTimeDataViewModel1.BaseStationGesture.PY_FY) <= 1) realTimeDataViewModel1.AngleBackgroundY = new SolidColorBrush(Colors.Yellow); else realTimeDataViewModel1.AngleBackgroundY = new SolidColorBrush(Colors.Red); if (Math.Abs(realTimeDataViewModel1.BaseStationGesture.PY_PH) <= 0.75) realTimeDataViewModel1.AngleBackgroundZ = new SolidColorBrush(Colors.Green); else if (Math.Abs(realTimeDataViewModel1.BaseStationGesture.PY_PH) > 0.75 && Math.Abs(realTimeDataViewModel1.BaseStationGesture.PY_PH) <= 1) realTimeDataViewModel1.AngleBackgroundZ = new SolidColorBrush(Colors.Yellow); else realTimeDataViewModel1.AngleBackgroundZ = new SolidColorBrush(Colors.Red); sql = String.Format("select * from conboxenvpara where StationID = {0} ORDER by id desc limit 1", 2); dataReader = DBHelper.ExecuteReader(sql, 1); while (dataReader.Read()) { realTimeDataViewModel2.BaseStationGesture.RollAngle = Convert.ToSingle(string.IsNullOrEmpty(dataReader["JBH_Attitude_x"].ToString()) ? "0.00" : dataReader["JBH_Attitude_x"].ToString()); realTimeDataViewModel2.BaseStationGesture.PitchAngle = Convert.ToSingle(string.IsNullOrEmpty(dataReader["JBH_Attitude_y"].ToString()) ? "0.00" : dataReader["JBH_Attitude_y"].ToString()); realTimeDataViewModel2.BaseStationGesture.HeadingAngle = Convert.ToSingle(string.IsNullOrEmpty(dataReader["JBH_Attitude_z"].ToString()) ? "0.00" : dataReader["JBH_Attitude_z"].ToString()); } dataReader.Dispose(); baseStationModelViewModel2.BaseStationGesture.RollAngle = realTimeDataViewModel2.BaseStationGesture.RollAngle; baseStationModelViewModel2.BaseStationGesture.PitchAngle = realTimeDataViewModel2.BaseStationGesture.PitchAngle; baseStationModelViewModel2.BaseStationGesture.HeadingAngle = realTimeDataViewModel2.BaseStationGesture.HeadingAngle; realTimeDataViewModel2.BaseStationGesture.PY_HG = realTimeDataViewModel2.BaseStationGesture.RollAngle - CalibrationHG; realTimeDataViewModel2.BaseStationGesture.PY_FY = realTimeDataViewModel2.BaseStationGesture.PitchAngle - CalibrationFY; realTimeDataViewModel2.BaseStationGesture.PY_PH = realTimeDataViewModel2.BaseStationGesture.HeadingAngle - CalibrationPH; if (Math.Abs(realTimeDataViewModel2.BaseStationGesture.PY_HG) <= 0.75) realTimeDataViewModel2.AngleBackgroundX = new SolidColorBrush(Colors.Green); else if (Math.Abs(realTimeDataViewModel2.BaseStationGesture.PY_HG) > 0.75 && Math.Abs(realTimeDataViewModel2.BaseStationGesture.PY_HG) <= 1) realTimeDataViewModel2.AngleBackgroundX = new SolidColorBrush(Colors.Yellow); else realTimeDataViewModel2.AngleBackgroundX = new SolidColorBrush(Colors.Red); if (Math.Abs(realTimeDataViewModel2.BaseStationGesture.PY_FY) <= 0.75) realTimeDataViewModel2.AngleBackgroundY = new SolidColorBrush(Colors.Green); else if (Math.Abs(realTimeDataViewModel2.BaseStationGesture.PY_FY) > 0.75 && Math.Abs(realTimeDataViewModel2.BaseStationGesture.PY_FY) <= 1) realTimeDataViewModel2.AngleBackgroundY = new SolidColorBrush(Colors.Yellow); else realTimeDataViewModel2.AngleBackgroundY = new SolidColorBrush(Colors.Red); if (Math.Abs(realTimeDataViewModel2.BaseStationGesture.PY_PH) <= 0.75) realTimeDataViewModel2.AngleBackgroundZ = new SolidColorBrush(Colors.Green); else if (Math.Abs(realTimeDataViewModel2.BaseStationGesture.PY_PH) > 0.75 && Math.Abs(realTimeDataViewModel2.BaseStationGesture.PY_PH) <= 1) realTimeDataViewModel2.AngleBackgroundZ = new SolidColorBrush(Colors.Yellow); else realTimeDataViewModel2.AngleBackgroundZ = new SolidColorBrush(Colors.Red); #endregion //默认打开第一个界面 DoNavChanged("RealTimeDataView"); } #region Communication Command /// /// SocketServer1连接 /// /// public void Socket1DoOpen(object o) { if(serverModel1.IsOpened) //服务器已开启 { Task.Run(new Action(async () => { await Task.Delay(100); serverModel1.DoStop(); })); } else { Task.Run(new Action(async () => { await Task.Delay(150); if (serverModel1.DoStart(SocketServerInfo1)) { //EM.Socket1ConMessage = string.Format("IP:{0} \r\n端口号:{1}", SocketInfo1.IP, SocketInfo1.Port.ToString()); //更新下App.config中的配置信息 Tools.UpdateAppSettings("XWJ_Service_IP1", SocketServerInfo1.IP); Tools.UpdateAppSettings("XWJ_Service_Port1", SocketServerInfo1.Port.ToString()); } })); } } /// /// SocketServer2连接 /// /// public void Socket2DoOpen(object o) { if (serverModel2.IsOpened) //服务器已开启 { Task.Run(new Action(async () => { await Task.Delay(100); serverModel2.DoStop(); })); } else { Task.Run(new Action(async () => { await Task.Delay(150); if (serverModel2.DoStart(SocketServerInfo2)) { //EM.Socket1ConMessage = string.Format("IP:{0} \r\n端口号:{1}", SocketInfo1.IP, SocketInfo1.Port.ToString()); //更新下App.config中的配置信息 Tools.UpdateAppSettings("XWJ_Service_IP2", SocketServerInfo2.IP); Tools.UpdateAppSettings("XWJ_Service_Port2", SocketServerInfo2.Port.ToString()); } })); } } /// /// SocketClient1连接 /// /// public void DoSocket1Connect(object o) { if (clientModel1.IsConnected) { Task.Run(new Action(async () => { await Task.Delay(100); clientModel1.DisConnect(); })); } else { Task.Run(new Action(async () => { await Task.Delay(150); if (clientModel1.DoConnect(SocketInfo1)) { //EM.Socket1ConMessage = string.Format("IP:{0} \r\n端口号:{1}", SocketInfo1.IP, SocketInfo1.Port.ToString()); //更新下App.config中的配置信息 Tools.UpdateAppSettings("SYZ_Client_IP1", SocketInfo1.IP); Tools.UpdateAppSettings("SYZ_Client_Port1", SocketInfo1.Port.ToString()); } })); } } /// /// SocketClient2连接 /// /// public void DoSocket2Connect(object o) { if (clientModel2.IsConnected) { Task.Run(new Action(async () => { await Task.Delay(100); clientModel2.DisConnect(); })); } else { Task.Run(new Action(async () => { await Task.Delay(200); if (clientModel2.DoConnect(SocketInfo2)) { // EM.Socket2ConMessage = string.Format("IP:{0} \r\n端口号:{1}", SocketInfo2.IP, SocketInfo2.Port.ToString()); //更新下App.config中的配置信息 Tools.UpdateAppSettings("SYZ_Client_IP2", SocketInfo2.IP); Tools.UpdateAppSettings("SYZ_Client_Port2", SocketInfo2.Port.ToString()); } })); } } /// /// DoSocketDZY1Connect连接 /// /// public void DoSocketDZY1Connect(object o) { if (clientModelDZY1.IsConnected) { Task.Run(new Action(async () => { await Task.Delay(100); clientModelDZY1.DisConnect(); })); } else { Task.Run(new Action(async () => { await Task.Delay(150); if (clientModelDZY1.DoConnect(SocketInfoDZY1)) { //EM.Socket1ConMessage = string.Format("IP:{0} \r\n端口号:{1}", SocketInfo1.IP, SocketInfo1.Port.ToString()); //更新下App.config中的配置信息 Tools.UpdateAppSettings("DZY_Client_IP1", SocketInfoDZY1.IP); Tools.UpdateAppSettings("DZY_Client_Port1", SocketInfoDZY1.Port.ToString()); } })); } } /// /// DoSocketDZY2Connect连接 /// /// public void DoSocketDZY2Connect(object o) { if (clientModelDZY2.IsConnected) { Task.Run(new Action(async () => { await Task.Delay(100); clientModelDZY2.DisConnect(); })); } else { Task.Run(new Action(async () => { await Task.Delay(200); if (clientModelDZY2.DoConnect(SocketInfoDZY1)) { // EM.Socket2ConMessage = string.Format("IP:{0} \r\n端口号:{1}", SocketInfo2.IP, SocketInfo2.Port.ToString()); //更新下App.config中的配置信息 Tools.UpdateAppSettings("DZY_Client_IP2", SocketInfoDZY1.IP); Tools.UpdateAppSettings("DZY_Client_Port2", SocketInfoDZY1.Port.ToString()); } })); } } #region Useless //public void Com1DoConnect(object o) //{ // if (comModel1.IsConnected) // { // Task.Run(new Action(async () => // { // await Task.Delay(100); // comModel1.DisConnect(); // })); // } // else // { // Task.Run(new Action(async () => // { // await Task.Delay(100); // if (comModel1.DoConnect(SerialInfo1)) // { // //EM.ComConMessage = string.Format("串口号:{0} \r\n波特率:{1}", SerialInfo.PortName, SerialInfo.BaudRate.ToString()); // //更新下App.config中的配置信息 // //Tools.UpdateAppSettings("PortName", SerialInfo1.PortName); // //Tools.UpdateAppSettings("BaudRate", SerialInfo1.BaudRate.ToString()); // } // else // { // App.Current.Dispatcher.Invoke(() => // { // // 更新UI的代码 // HandyControl.Controls.Dialog.Show(new TextDialog("串口连接初始化失败!\n请检查设备连接状态!")); // }); // } // })); // } //} //public void Com2DoConnect(object o) //{ // if (comModel2.IsConnected) // { // Task.Run(new Action(async () => // { // await Task.Delay(100); // comModel2.DisConnect(); // })); // } // else // { // Task.Run(new Action(async () => // { // await Task.Delay(100); // if (comModel2.DoConnect(SerialInfo2)) // { // //EM.ComConMessage = string.Format("串口号:{0} \r\n波特率:{1}", SerialInfo.PortName, SerialInfo.BaudRate.ToString()); // //更新下App.config中的配置信息 // //Tools.UpdateAppSettings("PortName", SerialInfo2.PortName); // //Tools.UpdateAppSettings("BaudRate", SerialInfo2.BaudRate.ToString()); // } // else // { // App.Current.Dispatcher.Invoke(() => // { // // 更新UI的代码 // HandyControl.Controls.Dialog.Show(new TextDialog("串口连接初始化失败!\n请检查设备连接状态!")); // }); // } // })); // } //} #endregion #endregion List sendDataSeis = new List(); private byte[] checkCode { get; set; } = new byte[2]; //从CMD到DATA结束的CRC16校验和 private List checkByte { get; set; } = new List(); //校验码Byte #region Remote Control (Seis Set) private void TimerOpenSetMsgHidden_Tick(object sender, EventArgs e) { OpenSetMsgVisibility = Visibility.Hidden; // 停止定时器 (sender as DispatcherTimer).Stop(); } private void TimerCloseSetMsgHidden_Tick(object sender, EventArgs e) { CloseSetMsgVisibility = Visibility.Hidden; // 停止定时器 (sender as DispatcherTimer).Stop(); } private void TimerSeisZeroSetStart_Tick(object sender, EventArgs e) { if (!SeisZeroSetStartIsReceived) { OpenSetMsgVisibility = Visibility.Visible; OpenSetMsg = "请求凋零开启发送成功,但未接收到数据!"; timerOpenSetMsgHidden.Start(); OpenSetMsgForeground = new SolidColorBrush(Colors.Red); SeisZeroSetStartButtonIsEnabled = true; SeisZeroSetStopButtonIsEnabled = true; } // 停止定时器 (sender as DispatcherTimer).Stop(); } private void TimerSeisZeroSetStop_Tick(object sender, EventArgs e) { if (!SeisZeroSetStopIsReceived) { CloseSetMsgVisibility = Visibility.Visible; CloseSetMsg = "请求调零停止发送成功,但未接收到数据!"; timerCloseSetMsgHidden.Start(); CloseSetMsgForeground = new SolidColorBrush(Colors.Red); SeisZeroSetStartButtonIsEnabled = true; SeisZeroSetStopButtonIsEnabled = true; } // 停止定时器 (sender as DispatcherTimer).Stop(); } private void TimerSeisLevelSetStart_Tick(object sender, EventArgs e) { if (!SeisLevelSetStartIsReceived) { OpenSetMsgVisibility = Visibility.Visible; OpenSetMsg = "请求调平开始发送成功,但未接收到数据!"; timerOpenSetMsgHidden.Start(); OpenSetMsgForeground = new SolidColorBrush(Colors.Red); SeisLevelSetStopButtonIsEnabled = true; SeisLevelSetStartButtonIsEnabled = true; } // 停止定时器 (sender as DispatcherTimer).Stop(); } private void TimerSeisLevelSetStop_Tick(object sender, EventArgs e) { if (!SeisLevelSetStopIsReceived) { CloseSetMsgVisibility = Visibility.Visible; CloseSetMsg = "请求调平停止发送成功,但未接收到数据!"; timerCloseSetMsgHidden.Start(); CloseSetMsgForeground = new SolidColorBrush(Colors.Red); SeisLevelSetStopButtonIsEnabled = true; SeisLevelSetStartButtonIsEnabled = true; } // 停止定时器 (sender as DispatcherTimer).Stop(); } private string openSetMsg; public string OpenSetMsg { get { return openSetMsg; } set { openSetMsg = value; this.DoNotify(); } } private Brush openSetMsgForeground; public Brush OpenSetMsgForeground { get { return openSetMsgForeground; } set { openSetMsgForeground = value; this.DoNotify(); } } private Visibility openSetMsgVisibility = Visibility.Visible; public Visibility OpenSetMsgVisibility { get { return openSetMsgVisibility; } set { openSetMsgVisibility = value; this.DoNotify(); } } private string closeSetMsg; public string CloseSetMsg { get { return closeSetMsg; } set { closeSetMsg = value; this.DoNotify(); } } private Brush closeSetMsgForeground; public Brush CloseSetMsgForeground { get { return closeSetMsgForeground; } set { closeSetMsgForeground = value; this.DoNotify(); } } private Visibility closeSetMsgVisibility = Visibility.Visible; public Visibility CloseSetMsgVisibility { get { return closeSetMsgVisibility; } set { closeSetMsgVisibility = value; this.DoNotify(); } } private bool seisZeroSetStartButtonIsEnabled = true; public bool SeisZeroSetStartButtonIsEnabled { get { return seisZeroSetStartButtonIsEnabled; } set { seisZeroSetStartButtonIsEnabled = value; this.DoNotify(); } } private bool seisZeroSetStopButtonIsEnabled = true; public bool SeisZeroSetStopButtonIsEnabled { get { return seisZeroSetStopButtonIsEnabled; } set { seisZeroSetStopButtonIsEnabled = value; this.DoNotify(); } } private bool seisLevelSetStartButtonIsEnabled = true; public bool SeisLevelSetStartButtonIsEnabled { get { return seisLevelSetStartButtonIsEnabled; } set { seisLevelSetStartButtonIsEnabled = value; this.DoNotify(); } } private bool seisLevelSetStopButtonIsEnabled = true; public bool SeisLevelSetStopButtonIsEnabled { get { return seisLevelSetStopButtonIsEnabled; } set { seisLevelSetStopButtonIsEnabled = value; this.DoNotify(); } } private bool seisZeroSetStartIsReceived = false; public bool SeisZeroSetStartIsReceived { get { return seisZeroSetStartIsReceived; } set { seisZeroSetStartIsReceived = value; this.DoNotify(); } } private bool seisZeroSetStopIsReceived = false; public bool SeisZeroSetStopIsReceived { get { return seisZeroSetStopIsReceived; } set { seisZeroSetStopIsReceived = value; this.DoNotify(); } } private bool seisLevelSetStartIsReceived = false; public bool SeisLevelSetStartIsReceived { get { return seisLevelSetStartIsReceived; } set { seisLevelSetStartIsReceived = value; this.DoNotify(); } } private bool seisLevelSetStopIsReceived = false; public bool SeisLevelSetStopIsReceived { get { return seisLevelSetStopIsReceived; } set { seisLevelSetStopIsReceived = value; this.DoNotify(); } } //各个开关 public async void Btn_Switch(object o) { string[] msg = o.ToString().Split(','); int switchNum = msg[1].Equals("True") ? 1 : 0; string MessageContent = ""; switch (msg[0]) { //case "SatcomPowerPicker": // MessageContent = "卫通电源" + (msg[1].Equals("True") ? "打开" : "关闭"); // break; //case "JBHPowerPicker": // MessageContent = "接驳盒电源" + (msg[1].Equals("True") ? "打开" : "关闭"); // break; //case "MainSeismograph": // MessageContent = "主地震仪电源" + (msg[1].Equals("True") ? "打开" : "关闭"); // break; //case "StandbySeismograph": // MessageContent = "备用地震仪电源" + (msg[1].Equals("True") ? "打开" : "关闭"); // break; case "SeisZeroSetStart": //凋零 if(msg[1].Equals("True")) //打开 { SeisZeroSetStartButtonIsEnabled = false; SeisZeroSetStopButtonIsEnabled = false; SeisZeroSetStartIsReceived = false; sendDataSeis.Clear(); sendDataSeis.AddRange(new byte[] { 0xBF, 0x13, 0x97, 0x74 }); //SYNC sendDataSeis.AddRange(new byte[] { 0xA0, 0x50 }); //CMD sendDataSeis.AddRange(new byte[] { 0x00, 0x04 }); //LENGTH sendDataSeis.AddRange(new byte[] { 0x00, 0x00 }); //DATA checkByte.Clear(); checkByte.AddRange(new byte[] { 0xA0, 0x50 }); //CMD checkByte.AddRange(new byte[] { 0x00, 0x04 }); //LENGTH checkByte.AddRange(new byte[] { 0x00, 0x00 }); //DATA checkCode = Tools.CRCCalc(checkByte.ToArray()); //CHK_SUM sendDataSeis.AddRange(checkCode); bool result = false; if (station_id == 1) { if(clientModelDZY1.IsConnected) { result = clientModelDZY1.SendMessage(sendDataSeis.ToArray()); } else { OpenSetMsgVisibility = Visibility.Visible; OpenSetMsg = "通信未连接!"; timerOpenSetMsgHidden.Start(); OpenSetMsgForeground = new SolidColorBrush(Colors.Red); SeisZeroSetStartButtonIsEnabled = true; SeisZeroSetStopButtonIsEnabled = true; break; } } else { if (clientModelDZY2.IsConnected) { result = clientModelDZY2.SendMessage(sendDataSeis.ToArray()); } else { OpenSetMsgVisibility = Visibility.Visible; OpenSetMsg = "通信未连接!"; timerOpenSetMsgHidden.Start(); OpenSetMsgForeground = new SolidColorBrush(Colors.Red); SeisZeroSetStartButtonIsEnabled = true; SeisZeroSetStopButtonIsEnabled = true; break; } } if(result) { OpenSetMsgVisibility = Visibility.Visible; OpenSetMsg = "请求调零开启发送成功!"; timerOpenSetMsgHidden.Start(); OpenSetMsgForeground = new SolidColorBrush(Colors.Green); timerSeisZeroSetStart.Start(); } else { OpenSetMsgVisibility = Visibility.Visible; OpenSetMsg = "请求调零开启发送失败!"; timerOpenSetMsgHidden.Start(); OpenSetMsgForeground = new SolidColorBrush(Colors.Red); SeisZeroSetStartButtonIsEnabled = true; SeisZeroSetStopButtonIsEnabled = true; } } break; case "SeisZeroSetStop": //凋零 if(!msg[1].Equals("True")) //关闭 { SeisZeroSetStopButtonIsEnabled = false; SeisZeroSetStartButtonIsEnabled = false; SeisZeroSetStopIsReceived = false; sendDataSeis.Clear(); sendDataSeis.AddRange(new byte[] { 0xBF, 0x13, 0x97, 0x74 }); //SYNC sendDataSeis.AddRange(new byte[] { 0xA0, 0x51 }); //CMD sendDataSeis.AddRange(new byte[] { 0x00, 0x04 }); //LENGTH sendDataSeis.AddRange(new byte[] { 0x00, 0x00 }); //DATA checkByte.Clear(); checkByte.AddRange(new byte[] { 0xA0, 0x51 }); //CMD checkByte.AddRange(new byte[] { 0x00, 0x04 }); //LENGTH checkByte.AddRange(new byte[] { 0x00, 0x00 }); //DATA checkCode = Tools.CRCCalc(checkByte.ToArray()); //CHK_SUM sendDataSeis.AddRange(checkCode); bool result = false; if (station_id == 1) { if (clientModelDZY1.IsConnected) { result = clientModelDZY1.SendMessage(sendDataSeis.ToArray()); } else { CloseSetMsgVisibility = Visibility.Visible; CloseSetMsg = "通信未连接!"; timerCloseSetMsgHidden.Start(); CloseSetMsgForeground = new SolidColorBrush(Colors.Red); SeisZeroSetStopButtonIsEnabled = true; SeisZeroSetStartButtonIsEnabled = true; break; } } else { if (clientModelDZY2.IsConnected) { result = clientModelDZY2.SendMessage(sendDataSeis.ToArray()); } else { CloseSetMsgVisibility = Visibility.Visible; CloseSetMsg = "通信未连接!"; timerCloseSetMsgHidden.Start(); CloseSetMsgForeground = new SolidColorBrush(Colors.Red); SeisZeroSetStopButtonIsEnabled = true; SeisZeroSetStartButtonIsEnabled = true; break; } } if (result) { CloseSetMsgVisibility = Visibility.Visible; CloseSetMsg = "请求调零停止发送成功!"; timerCloseSetMsgHidden.Start(); CloseSetMsgForeground = new SolidColorBrush(Colors.Green); timerSeisZeroSetStop.Start(); } else { CloseSetMsgVisibility = Visibility.Visible; CloseSetMsg = "请求调零停止发送失败!"; timerCloseSetMsgHidden.Start(); CloseSetMsgForeground = new SolidColorBrush(Colors.Red); SeisZeroSetStopButtonIsEnabled = true; SeisZeroSetStartButtonIsEnabled = true; } } break; case "SeisLevelSetStart": //调平 if(msg[1].Equals("True")) //开启 { SeisLevelSetStartButtonIsEnabled = false; SeisLevelSetStopButtonIsEnabled = false; SeisLevelSetStartIsReceived = false; sendDataSeis.Clear(); sendDataSeis.AddRange(new byte[] { 0xBF, 0x13, 0x97, 0x74 }); //SYNC sendDataSeis.AddRange(new byte[] { 0xA0, 0x90 }); //CMD sendDataSeis.AddRange(new byte[] { 0x00, 0x04 }); //LENGTH sendDataSeis.AddRange(new byte[] { 0x00, 0x00 }); //DATA checkByte.Clear(); checkByte.AddRange(new byte[] { 0xA0, 0x90 }); //CMD checkByte.AddRange(new byte[] { 0x00, 0x04 }); //LENGTH checkByte.AddRange(new byte[] { 0x00, 0x00 }); //DATA checkCode = Tools.CRCCalc(checkByte.ToArray()); //CHK_SUM sendDataSeis.AddRange(checkCode); bool result = false; if (station_id == 1) { if (clientModelDZY1.IsConnected) { result = clientModelDZY1.SendMessage(sendDataSeis.ToArray()); } else { OpenSetMsgVisibility = Visibility.Visible; OpenSetMsg = "通信未连接!"; timerOpenSetMsgHidden.Start(); OpenSetMsgForeground = new SolidColorBrush(Colors.Red); SeisLevelSetStartButtonIsEnabled = true; SeisLevelSetStopButtonIsEnabled = true; break; } } else { if (clientModelDZY2.IsConnected) { result = clientModelDZY2.SendMessage(sendDataSeis.ToArray()); } else { OpenSetMsgVisibility = Visibility.Visible; OpenSetMsg = "通信未连接!"; timerOpenSetMsgHidden.Start(); OpenSetMsgForeground = new SolidColorBrush(Colors.Red); SeisLevelSetStartButtonIsEnabled = true; SeisLevelSetStopButtonIsEnabled = true; break; } } if (result) { OpenSetMsgVisibility = Visibility.Visible; OpenSetMsg = "请求调平开启发送成功!"; timerOpenSetMsgHidden.Start(); OpenSetMsgForeground = new SolidColorBrush(Colors.Green); timerSeisLevelSetStart.Start(); } else { OpenSetMsgVisibility = Visibility.Visible; OpenSetMsg = "请求调平开启发送失败!"; timerOpenSetMsgHidden.Start(); OpenSetMsgForeground = new SolidColorBrush(Colors.Red); SeisLevelSetStartButtonIsEnabled = true; SeisLevelSetStopButtonIsEnabled = true; } } break; case "SeisLevelSetStop": //调平 if(!msg[1].Equals("True")) //关闭 { SeisLevelSetStopButtonIsEnabled = false; SeisLevelSetStartButtonIsEnabled = false; SeisLevelSetStopIsReceived = false; sendDataSeis.Clear(); sendDataSeis.AddRange(new byte[] { 0xBF, 0x13, 0x97, 0x74 }); //SYNC sendDataSeis.AddRange(new byte[] { 0xA0, 0x91 }); //CMD sendDataSeis.AddRange(new byte[] { 0x00, 0x04 }); //LENGTH sendDataSeis.AddRange(new byte[] { 0x00, 0x00 }); //DATA checkByte.Clear(); checkByte.AddRange(new byte[] { 0xA0, 0x91 }); //CMD checkByte.AddRange(new byte[] { 0x00, 0x04 }); //LENGTH checkByte.AddRange(new byte[] { 0x00, 0x00 }); //DATA checkCode = Tools.CRCCalc(checkByte.ToArray()); //CHK_SUM sendDataSeis.AddRange(checkCode); bool result = false; if (station_id == 1) { if (clientModelDZY1.IsConnected) { result = clientModelDZY1.SendMessage(sendDataSeis.ToArray()); } else { CloseSetMsgVisibility = Visibility.Visible; CloseSetMsg = "通信未连接!"; timerCloseSetMsgHidden.Start(); CloseSetMsgForeground = new SolidColorBrush(Colors.Red); SeisLevelSetStopButtonIsEnabled = true; SeisLevelSetStartButtonIsEnabled = true; break; } } else { if (clientModelDZY2.IsConnected) { result = clientModelDZY2.SendMessage(sendDataSeis.ToArray()); } else { CloseSetMsgVisibility = Visibility.Visible; CloseSetMsg = "通信未连接!"; timerCloseSetMsgHidden.Start(); CloseSetMsgForeground = new SolidColorBrush(Colors.Red); SeisLevelSetStopButtonIsEnabled = true; SeisLevelSetStartButtonIsEnabled = true; break; } } if (result) { CloseSetMsgVisibility = Visibility.Visible; CloseSetMsg = "请求调平停止发送成功!"; timerCloseSetMsgHidden.Start(); CloseSetMsgForeground = new SolidColorBrush(Colors.Green); timerSeisLevelSetStop.Start(); } else { CloseSetMsgVisibility = Visibility.Visible; CloseSetMsg = "请求调平停止发送失败!"; timerCloseSetMsgHidden.Start(); CloseSetMsgForeground = new SolidColorBrush(Colors.Red); SeisLevelSetStopButtonIsEnabled = true; SeisLevelSetStartButtonIsEnabled = true; } } break; default: break; } } #endregion #region Seis Para private void TimerSeisParaMsgHidden_Tick(object sender, EventArgs e) { SeisParaMsgVisibility = Visibility.Hidden; // 停止定时器 (sender as DispatcherTimer).Stop(); } private void TimerEarthQuakeParaSet_Tick(object sender, EventArgs e) { if (!EarthQuakeParaSetIsReceived) { SeisParaMsgVisibility = Visibility.Visible; SeisParaMsg = "参数设置发送成功,但未接收到数据!"; timerSeisParaMsgHidden.Start(); SeisParaMsgForeground = new SolidColorBrush(Colors.Red); EarthQuakeParaSetBtnIsEnabled = true; EarthQuakeParaReadBtnIsEnabled = true; } // 停止定时器 (sender as DispatcherTimer).Stop(); } private void TimerEarthQuakeParaRead_Tick(object sender, EventArgs e) { if (!EarthQuakeParaReadIsReceived) { SeisParaMsgVisibility = Visibility.Visible; SeisParaMsg = "参数读取发送成功,但未接收到数据!"; timerSeisParaMsgHidden.Start(); SeisParaMsgForeground = new SolidColorBrush(Colors.Red); EarthQuakeParaReadBtnIsEnabled = true; EarthQuakeParaSetBtnIsEnabled = true; } // 停止定时器 (sender as DispatcherTimer).Stop(); } private string seisParaMsg; public string SeisParaMsg { get { return seisParaMsg; } set { seisParaMsg = value; this.DoNotify(); } } private Brush seisParaMsgForeground; public Brush SeisParaMsgForeground { get { return seisParaMsgForeground; } set { seisParaMsgForeground = value; this.DoNotify(); } } private Visibility seisParaMsgVisibility = Visibility.Visible; public Visibility SeisParaMsgVisibility { get { return seisParaMsgVisibility; } set { seisParaMsgVisibility = value; this.DoNotify(); } } private bool earthQuakeParaSetBtnIsEnabled = true; public bool EarthQuakeParaSetBtnIsEnabled { get { return earthQuakeParaSetBtnIsEnabled; } set { earthQuakeParaSetBtnIsEnabled = value; this.DoNotify(); } } private bool earthQuakeParaReadBtnIsEnabled = true; public bool EarthQuakeParaReadBtnIsEnabled { get { return earthQuakeParaReadBtnIsEnabled; } set { earthQuakeParaReadBtnIsEnabled = value; this.DoNotify(); } } private bool earthQuakeParaSetIsReceived = false; public bool EarthQuakeParaSetIsReceived { get { return earthQuakeParaSetIsReceived; } set { earthQuakeParaSetIsReceived = value; this.DoNotify(); } } private bool earthQuakeParaReadIsReceived = false; public bool EarthQuakeParaReadIsReceived { get { return earthQuakeParaReadIsReceived; } set { earthQuakeParaReadIsReceived = value; this.DoNotify(); } } public async void Btn_ParaSet(object o) { string[] msg = o.ToString().Split(','); for (int i = 0; i < msg.Length; i++) { if (string.IsNullOrEmpty(msg[i])) { EM.ControlMessage = "失败! 请输入完整信息!"; return; } } switch (msg[0]) { //case "ParaSet": // break; //case "ReadParaSet": // break; case "EarthQuakeParaSetBtn": EarthQuakeParaSetBtnIsEnabled = false; EarthQuakeParaReadBtnIsEnabled = false; earthQuakeParaSetIsReceived = false; byte[] sationNo = Tools.IntToBytes(int.Parse(msg[1])); //台号 byte[] stationName = Encoding.UTF8.GetBytes(msg[2]); //台站名称 stationName = Tools.PadArrayWithZeros(stationName, 32); byte[] stationShortName = Encoding.UTF8.GetBytes(msg[3]); //台站缩写 stationShortName = Tools.PadArrayWithZeros(stationShortName, 8); byte[] earthQuakeCount = BitConverter.GetBytes(short.Parse(msg[4])); //地震计总数 earthQuakeCount = Tools.PadArrayWithZeros(earthQuakeCount, 2); byte[] channelsNo = BitConverter.GetBytes(short.Parse(msg[5])); //总通道数 channelsNo = Tools.PadArrayWithZeros(channelsNo, 2); byte[] wd = Tools.IntToBytes(int.Parse(msg[6])); //纬度 byte[] jd = Tools.IntToBytes(int.Parse(msg[7])); //经度 byte[] gaoCheng = Tools.IntToBytes(int.Parse(msg[8])); //高程 byte[] startTime = BitConverter.GetBytes(short.Parse(msg[9])); //起用日期 startTime = Tools.PadArrayWithZeros(startTime, 32); byte[] stationid = BitConverter.GetBytes(short.Parse(msg[10])); //台网标志 stationid = Tools.PadArrayWithZeros(stationid, 4); byte[] software_version = BitConverter.GetBytes(short.Parse(msg[11])); //软件版本 software_version = Tools.PadArrayWithZeros(software_version, 32); sendDataSeis.Clear(); sendDataSeis.AddRange(new byte[] { 0xBF, 0x13, 0x97, 0x74 }); //SYNC sendDataSeis.AddRange(new byte[] { 0xA0, 0x00 }); //CMD sendDataSeis.AddRange(new byte[] { 0x00, 0x82 }); //LENGTH sendDataSeis.AddRange(sationNo); sendDataSeis.AddRange(stationName); sendDataSeis.AddRange(stationShortName); sendDataSeis.AddRange(earthQuakeCount); sendDataSeis.AddRange(channelsNo); sendDataSeis.AddRange(wd); sendDataSeis.AddRange(jd); sendDataSeis.AddRange(gaoCheng); sendDataSeis.AddRange(startTime); sendDataSeis.AddRange(stationid); sendDataSeis.AddRange(software_version); checkByte.Clear(); checkByte.AddRange(new byte[] { 0xA0, 0x00 }); //CMD checkByte.AddRange(new byte[] { 0x00, 0x82 }); //LENGTH checkByte.AddRange(sationNo); checkByte.AddRange(stationName); checkByte.AddRange(stationShortName); checkByte.AddRange(earthQuakeCount); checkByte.AddRange(channelsNo); checkByte.AddRange(wd); checkByte.AddRange(jd); checkByte.AddRange(gaoCheng); checkByte.AddRange(startTime); checkByte.AddRange(stationid); checkByte.AddRange(software_version); checkCode = Tools.CRCCalc(checkByte.ToArray()); //CHK_SUM sendDataSeis.AddRange(checkCode); bool result = false; if (station_id == 1) { if (clientModelDZY1.IsConnected) { result = clientModelDZY1.SendMessage(sendDataSeis.ToArray()); } else { SeisParaMsgVisibility = Visibility.Visible; SeisParaMsg = "通信未连接!"; timerSeisParaMsgHidden.Start(); SeisParaMsgForeground = new SolidColorBrush(Colors.Red); EarthQuakeParaSetBtnIsEnabled = true; EarthQuakeParaReadBtnIsEnabled = true; break; } } else { if (clientModelDZY2.IsConnected) { result = clientModelDZY2.SendMessage(sendDataSeis.ToArray()); } else { SeisParaMsgVisibility = Visibility.Visible; SeisParaMsg = "通信未连接!"; timerSeisParaMsgHidden.Start(); SeisParaMsgForeground = new SolidColorBrush(Colors.Red); EarthQuakeParaSetBtnIsEnabled = true; EarthQuakeParaReadBtnIsEnabled = true; break; } } if (result) { SeisParaMsgVisibility = Visibility.Visible; SeisParaMsg = "设置参数发送成功!"; timerSeisParaMsgHidden.Start(); SeisParaMsgForeground = new SolidColorBrush(Colors.Green); timerEarthQuakeParaSet.Start(); } else { SeisParaMsgVisibility = Visibility.Visible; SeisParaMsg = "设置参数发送失败!"; timerSeisParaMsgHidden.Start(); SeisParaMsgForeground = new SolidColorBrush(Colors.Red); EarthQuakeParaSetBtnIsEnabled = true; EarthQuakeParaReadBtnIsEnabled = true; } break; case "EarthQuakeParaReadBtn": EarthQuakeParaSetBtnIsEnabled = false; EarthQuakeParaReadBtnIsEnabled = false; earthQuakeParaReadIsReceived = false; sendDataSeis.Clear(); sendDataSeis.AddRange(new byte[] { 0xBF, 0x13, 0x97, 0x74 }); //SYNC sendDataSeis.AddRange(new byte[] { 0xB0, 0x00 }); //CMD sendDataSeis.AddRange(new byte[] { 0x00, 0x02 }); //LENGTH sendDataSeis.AddRange(new byte[] { 0x00, 0x00 }); //地震计号 checkByte.Clear(); checkByte.AddRange(new byte[] { 0xB0, 0x00 }); //CMD checkByte.AddRange(new byte[] { 0x00, 0x02 }); //LENGTH checkByte.AddRange(new byte[] { 0x00, 0x00 }); //地震计号 checkCode = Tools.CRCCalc(checkByte.ToArray()); //CHK_SUM sendDataSeis.AddRange(checkCode); result = false; if (station_id == 1) { if (clientModelDZY1.IsConnected) { result = clientModelDZY1.SendMessage(sendDataSeis.ToArray()); } else { SeisParaMsgVisibility = Visibility.Visible; SeisParaMsg = "通信未连接!"; timerSeisParaMsgHidden.Start(); SeisParaMsgForeground = new SolidColorBrush(Colors.Red); EarthQuakeParaSetBtnIsEnabled = true; EarthQuakeParaReadBtnIsEnabled = true; break; } } else { if (clientModelDZY2.IsConnected) { result = clientModelDZY2.SendMessage(sendDataSeis.ToArray()); } else { SeisParaMsgVisibility = Visibility.Visible; SeisParaMsg = "通信未连接!"; timerSeisParaMsgHidden.Start(); SeisParaMsgForeground = new SolidColorBrush(Colors.Red); EarthQuakeParaSetBtnIsEnabled = true; EarthQuakeParaReadBtnIsEnabled = true; break; } } if (result) { SeisParaMsgVisibility = Visibility.Visible; SeisParaMsg = "设置参数发送成功!"; timerSeisParaMsgHidden.Start(); SeisParaMsgForeground = new SolidColorBrush(Colors.Green); timerEarthQuakeParaSet.Start(); } else { SeisParaMsgVisibility = Visibility.Visible; SeisParaMsg = "设置参数发送失败!"; timerSeisParaMsgHidden.Start(); SeisParaMsgForeground = new SolidColorBrush(Colors.Red); EarthQuakeParaSetBtnIsEnabled = true; EarthQuakeParaReadBtnIsEnabled = true; } break; default: return; } } #endregion #region Page Switching public void DoNavChanged(object obj) { if (obj.ToString() == "1" || obj.ToString() == "2") //说明是站点切换按钮 { if (station_id == Convert.ToInt32(obj)) //如果切换的界面和之前一样 那就不切换 return; station_id = Convert.ToInt32(obj); } else if (obj.ToString() == "") { } else { if (Title_Name == obj.ToString()) return; Title_Name = obj.ToString(); } //切换页面之前清理一下内存 Tools.ClearMemory(this); Type type = Type.GetType("JiangsuEarthquake.Views." + Title_Name); ConstructorInfo cti = type.GetConstructor(System.Type.EmptyTypes); FrameworkElement page = (FrameworkElement)cti.Invoke(null); if (station_id == 1) { switch (Title_Name) { case "RealTimeDataView": page.DataContext = realTimeDataViewModel1; break; case "SystemStateDataView": page.DataContext = systemStateDataViewModel1; break; case "BoosterStationStateDataView": page.DataContext = boosterStationStateDataViewModel1; break; case "SystemControlView": SS = switchStateModel1; EQPS = earthQuakeParaSetModel1; EQSM = earthquakeSensorModel1; break; case "LogRecordView": page.DataContext = logRecordViewModel1; break; case "AlarmRecordView": page.DataContext = alarmRecordViewModel1; break; default: break; } } else if (station_id == 2) { switch (Title_Name) { case "RealTimeDataView": page.DataContext = realTimeDataViewModel2; break; case "SystemStateDataView": page.DataContext = systemStateDataViewModel2; break; case "BoosterStationStateDataView": page.DataContext = boosterStationStateDataViewModel2; break; case "SystemControlView": SS = switchStateModel2; EQPS = earthQuakeParaSetModel2; EQSM = earthquakeSensorModel2; break; case "LogRecordView": page.DataContext = logRecordViewModel2; break; case "AlarmRecordView": page.DataContext = alarmRecordViewModel2; break; default: break; } } this.PageContent = page; } #endregion } }