using JiangsuEarthquake.Common; using JiangsuEarthquake.DataAccess; using JiangsuEarthquake.Models; using JiangsuEarthquake.Views.UserControls; using MySql.Data.MySqlClient; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Media; using System.Windows; using System.Windows.Threading; using Brush = System.Windows.Media.Brush; namespace JiangsuEarthquake.ViewModels { public class SeismometerParameterViewModel : NotifyBase { #region Search Data private DateTime _startDateTime; public DateTime StartDateTime { get { return _startDateTime; } set { Set(ref _startDateTime, value); } } private DateTime _endDateTime; public DateTime EndDateTime { get { return _endDateTime; } set { Set(ref _endDateTime, value); } } int PageIndex = 0; private int recordCount; public int RecordCount { get { return recordCount; } set { recordCount = value; this.DoNotify(); } } private int totalPage; public int TotalPage { get { return totalPage; } set { totalPage = value; this.DoNotify(); } } private string seismometerParameterMsg; public string SeismometerParameterMsg { get { return seismometerParameterMsg; } set { seismometerParameterMsg = value; this.DoNotify(); } } private ObservableCollection seismometerParameterList = new ObservableCollection(); public ObservableCollection SeismometerParameterList { get { return seismometerParameterList; } set { seismometerParameterList = value; this.DoNotify(); } } private ObservableCollection totalSeismometerParameterList = new ObservableCollection(); public ObservableCollection TotalSeismometerParameterList { get { return totalSeismometerParameterList; } set { totalSeismometerParameterList = value; this.DoNotify(); } } private EarthQuakeParaSetModel earthQuakeParaSet = new EarthQuakeParaSetModel(); public EarthQuakeParaSetModel EarthQuakeParaSet { get { return earthQuakeParaSet; } set { earthQuakeParaSet = value; } } #endregion #region Command Define public CommandBase ForwordSystemStateCommand { get; set; } public CommandBase NextSystemStateCommand { get; set; } public CommandBase RefreshDataCommand { get; set; } public CommandBase DownloadDataCommand { get; set; } public CommandBase ParaSetSwitch { set; get; } //系统参数设置按钮 #endregion #region Timer Define public DispatcherTimer timerDownloadDataMsgHidden = new DispatcherTimer(); public DispatcherTimer timerSeisParaMsgHidden = new DispatcherTimer(); public DispatcherTimer timerEarthQuakeParaSet = new DispatcherTimer(); public DispatcherTimer timerEarthQuakeParaRead = new DispatcherTimer(); #endregion int station_id = 1; #region Data Filtering string timeSearch = ""; public static DialogViewModel vm; private bool _isChecked; public bool IsChecked { get { return _isChecked; } set { _isChecked = value; this.DoNotify(); if (IsChecked) { if (string.IsNullOrEmpty(EndDateTime.ToString()) || string.IsNullOrEmpty(StartDateTime.ToString())) { IsChecked = false; return; } if (EndDateTime < StartDateTime) { HandyControl.Controls.Dialog.Show(new TextDialog("起始时间大于结束时间,\n请重新输入!")); IsChecked = false; return; } timeSearch = " and DataTime BETWEEN '" + StartDateTime + "' and '" + EndDateTime + "' "; } else { timeSearch = ""; } //设置当前页为1 PageIndex = 1; TotalSeismometerParameterList.Clear(); SeismometerParameterList.Clear(); string sql = String.Format("select * from seismograph_para where StationID = {0} {1} ORDER by id desc limit 70", station_id, timeSearch); MySqlDataReader dataReader = DBHelper.ExecuteReader(sql, 1); int index = 1; while (dataReader.Read()) { EarthQuakeParaSetModel earthQuakeParaSetModel = new EarthQuakeParaSetModel(); earthQuakeParaSetModel.Index = index++; earthQuakeParaSetModel.RecordTime = Convert.ToDateTime(dataReader["RecordTime"]); earthQuakeParaSetModel.SeisID = Convert.ToInt32(string.IsNullOrEmpty(dataReader["SeisID"].ToString()) ? 0 : dataReader["SeisID"]); earthQuakeParaSetModel.StationNo = Convert.ToInt32(string.IsNullOrEmpty(dataReader["StationNo"].ToString()) ? 0 : dataReader["StationNo"]); earthQuakeParaSetModel.StationName = dataReader["StationName"].ToString(); earthQuakeParaSetModel.StationShortName = dataReader["StationShortName"].ToString(); earthQuakeParaSetModel.EarthQuakeCount = Convert.ToInt32(string.IsNullOrEmpty(dataReader["EarthQuakeCount"].ToString()) ? "0" : dataReader["EarthQuakeCount"]); earthQuakeParaSetModel.ChannelsNo = Convert.ToInt32(string.IsNullOrEmpty(dataReader["ChannelsNo"].ToString()) ? "0" : dataReader["ChannelsNo"]); earthQuakeParaSetModel.WD = Convert.ToSingle(string.IsNullOrEmpty(dataReader["WD"].ToString()) ? "0" : dataReader["WD"]); earthQuakeParaSetModel.JD = Convert.ToSingle(string.IsNullOrEmpty(dataReader["JD"].ToString()) ? "0" : dataReader["JD"]); earthQuakeParaSetModel.GaoCheng = Convert.ToInt32(string.IsNullOrEmpty(dataReader["GaoCheng"].ToString()) ? "0" : dataReader["GaoCheng"]); earthQuakeParaSetModel.StartTime = dataReader["StartTime"].ToString(); earthQuakeParaSetModel.Station_Id = dataReader["Station_Id"].ToString(); earthQuakeParaSetModel.Software_Version = dataReader["Software_Version"].ToString(); TotalSeismometerParameterList.Add(earthQuakeParaSetModel); } dataReader.Dispose(); RecordCount = index - 1; if (RecordCount <= 7) { TotalPage = 1; SeismometerParameterList = TotalSeismometerParameterList; } else { TotalPage = (int)Math.Ceiling((double)RecordCount / 7); for (int i = 0; i < 7; i++) { SeismometerParameterList.Add(TotalSeismometerParameterList[i]); } } SeismometerParameterMsg = string.Format("共计{0}页,当前第{1}页", TotalPage, PageIndex); string record = "查询地震仪参数历史数据,查询时间范围为:" + StartDateTime + "至" + EndDateTime + ",共查询到" + RecordCount + "条历史数据"; sql = $"insert into log_record(StationID,RecordTime,Device_Name,Operation_Type,Record) values('{station_id}','{DateTime.Now}','海底地震监测基站-地震仪','数据查询','{record}');"; DBHelper.ExecuteNonQuery(sql, 1); } } #endregion public SeismometerParameterViewModel(int id) { // 默认查询1天内的日志 this.EndDateTime = DateTime.Now; this.StartDateTime = DateTime.Now.AddDays(-1); PageIndex = 1; station_id = id; vm = new DialogViewModel { Content = "" }; #region Command Set this.ForwordSystemStateCommand = new CommandBase(); this.ForwordSystemStateCommand.DoExcute = new Action(ForwordSystemState); this.ForwordSystemStateCommand.DoCanExcute = new Func((o) => true); this.NextSystemStateCommand = new CommandBase(); this.NextSystemStateCommand.DoExcute = new Action(NextSystemState); this.NextSystemStateCommand.DoCanExcute = new Func((o) => true); this.RefreshDataCommand = new CommandBase(); this.RefreshDataCommand.DoExcute = new Action(RefreshData); this.RefreshDataCommand.DoCanExcute = new Func((o) => true); this.DownloadDataCommand = new CommandBase(); this.DownloadDataCommand.DoExcute = new Action(DownloadData); this.DownloadDataCommand.DoCanExcute = new Func((o) => true); this.ParaSetSwitch = new CommandBase(); this.ParaSetSwitch.DoExcute = new Action(Btn_ParaSet); this.ParaSetSwitch.DoCanExcute = new Func((o) => true); #endregion #region Timer Set timerDownloadDataMsgHidden.Interval = TimeSpan.FromSeconds(2); timerDownloadDataMsgHidden.Tick += TimerDownloadDataMsgHidden_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 Page Switching public void ForwordSystemState(object o) { if (PageIndex == 1) return; PageIndex -= 1; SeismometerParameterList.Clear(); for (int i = 0; i < 10; i++) { SeismometerParameterList.Add(TotalSeismometerParameterList[i + (PageIndex - 1) * 10]); } SeismometerParameterMsg = string.Format("共计{0}页,当前第{1}页", TotalPage, PageIndex); } public void NextSystemState(object o) { if (PageIndex == TotalPage) return; PageIndex += 1; SeismometerParameterList.Clear(); for (int i = 0; i < (PageIndex == TotalPage ? (RecordCount - (PageIndex - 1) * 10) : 10); i++) { SeismometerParameterList.Add(TotalSeismometerParameterList[i + (PageIndex - 1) * 10]); } SeismometerParameterMsg = string.Format("共计{0}页,当前第{1}页", TotalPage, PageIndex); } #endregion #region RefreshData public void RefreshData(object o) { if (IsChecked) { timeSearch = " and DataTime BETWEEN '" + StartDateTime + "' and '" + EndDateTime + "' "; } else { timeSearch = ""; } //设置当前页为1 PageIndex = 1; TotalSeismometerParameterList.Clear(); SeismometerParameterList.Clear(); string sql = String.Format("select * from seismograph_para where StationID = {0} {1} ORDER by id desc limit 70", station_id, timeSearch); MySqlDataReader dataReader = DBHelper.ExecuteReader(sql, 1); int index = 1; while (dataReader.Read()) { EarthQuakeParaSetModel earthQuakeParaSetModel = new EarthQuakeParaSetModel(); earthQuakeParaSetModel.Index = index++; earthQuakeParaSetModel.RecordTime = Convert.ToDateTime(dataReader["RecordTime"]); earthQuakeParaSetModel.SeisID = Convert.ToInt32(string.IsNullOrEmpty(dataReader["SeisID"].ToString()) ? 0 : dataReader["SeisID"]); earthQuakeParaSetModel.StationNo = Convert.ToInt32(string.IsNullOrEmpty(dataReader["StationNo"].ToString()) ? 0 : dataReader["StationNo"]); earthQuakeParaSetModel.StationName = dataReader["StationName"].ToString(); earthQuakeParaSetModel.StationShortName = dataReader["StationShortName"].ToString(); earthQuakeParaSetModel.EarthQuakeCount = Convert.ToInt32(string.IsNullOrEmpty(dataReader["EarthQuakeCount"].ToString()) ? "0" : dataReader["EarthQuakeCount"]); earthQuakeParaSetModel.ChannelsNo = Convert.ToInt32(string.IsNullOrEmpty(dataReader["ChannelsNo"].ToString()) ? "0" : dataReader["ChannelsNo"]); earthQuakeParaSetModel.WD = Convert.ToSingle(string.IsNullOrEmpty(dataReader["WD"].ToString()) ? "0" : dataReader["WD"]); earthQuakeParaSetModel.JD = Convert.ToSingle(string.IsNullOrEmpty(dataReader["JD"].ToString()) ? "0" : dataReader["JD"]); earthQuakeParaSetModel.GaoCheng = Convert.ToInt32(string.IsNullOrEmpty(dataReader["GaoCheng"].ToString()) ? "0" : dataReader["GaoCheng"]); earthQuakeParaSetModel.StartTime = dataReader["StartTime"].ToString(); earthQuakeParaSetModel.Station_Id = dataReader["Station_Id"].ToString(); earthQuakeParaSetModel.Software_Version = dataReader["Software_Version"].ToString(); TotalSeismometerParameterList.Add(earthQuakeParaSetModel); } dataReader.Dispose(); RecordCount = index - 1; if (RecordCount <= 7) { TotalPage = 1; SeismometerParameterList = TotalSeismometerParameterList; } else { TotalPage = (int)Math.Ceiling((double)RecordCount / 7); for (int i = 0; i < 7; i++) { SeismometerParameterList.Add(TotalSeismometerParameterList[i]); } } SeismometerParameterMsg = string.Format("共计{0}页,当前第{1}页", TotalPage, PageIndex); sql = $"insert into log_record(StationID,RecordTime,Device_Name,Operation_Type,Record) values('{station_id}','{DateTime.Now}','海底地震监测基站-地震仪','数据刷新','刷新地震仪参数');"; DBHelper.ExecuteNonQuery(sql, 1); } #endregion #region DownloadData private void TimerDownloadDataMsgHidden_Tick(object sender, EventArgs e) { DownloadDataMsgVisibility = Visibility.Hidden; // 停止定时器 (sender as DispatcherTimer).Stop(); } private string downloadDataMsg; public string DownloadDataMsg { get { return downloadDataMsg; } set { downloadDataMsg = value; this.DoNotify(); } } private Brush downloadDataMsgForeground; public Brush DownloadDataMsgForeground { get { return downloadDataMsgForeground; } set { downloadDataMsgForeground = value; this.DoNotify(); } } private bool downloadDataBtnIsEnabled = true; public bool DownloadDataBtnIsEnabled { get { return downloadDataBtnIsEnabled; } set { downloadDataBtnIsEnabled = value; this.DoNotify(); } } private Visibility downloadDataMsgVisibility = Visibility.Visible; public Visibility DownloadDataMsgVisibility { get { return downloadDataMsgVisibility; } set { downloadDataMsgVisibility = value; this.DoNotify(); } } public void DownloadData(object o) { DownloadDataBtnIsEnabled = false; string seismometerStateFolder = Tools.GetAppSetting("SeismometerParameterFolder"); string savePath = CSVDownload.CreateFile(seismometerStateFolder, "SeismometerParameter_" + DateTime.Now.ToString("yyyyMMddhhMMss"), "csv"); bool result = CSVDownload.SaveSeismometerParameterToCSVFile(TotalSeismometerParameterList, savePath); if (result) { DownloadDataMsg = "下载数据成功!"; DownloadDataMsgVisibility = Visibility.Visible; DownloadDataMsgForeground = new SolidColorBrush(Colors.Green); } else { DownloadDataMsg = "下载数据失败!"; DownloadDataMsgVisibility = Visibility.Visible; DownloadDataMsgForeground = new SolidColorBrush(Colors.Red); } timerDownloadDataMsgHidden.Start(); DownloadDataBtnIsEnabled = true; string record = "下载地震仪参数," + DownloadDataMsg; string sql = $"insert into log_record(StationID,RecordTime,Device_Name,Operation_Type,Record) values('{station_id}','{DateTime.Now}','海底地震监测基站-地震仪','数据下载','{record}');"; DBHelper.ExecuteNonQuery(sql, 1); } #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 bool backupSeisIsChecked = false; public bool BackupSeisIsChecked { get { return backupSeisIsChecked; } set { backupSeisIsChecked = value; this.DoNotify(); string MainSeisName1 = Tools.GetAppSetting("MainSeisName1"); string MainSeisName2 = Tools.GetAppSetting("MainSeisName2"); string BackupSeisName1 = Tools.GetAppSetting("BackupSeisName1"); string BackupSeisName2 = Tools.GetAppSetting("BackupSeisName2"); string sql; if (BackupSeisIsChecked) //备地震仪 { if (station_id == 1) { sql = String.Format("select * from seismograph_para where StationID = {0} and StationName LIKE '{1}' ORDER by id desc limit 1", 1, "%" + BackupSeisName1 + "%"); } else { sql = String.Format("select * from seismograph_para where StationID = {0} and StationName LIKE '{1}' ORDER by id desc limit 1", 2, "%" + BackupSeisName2 + "%"); } } else { if (station_id == 1) { sql = String.Format("select * from seismograph_para where StationID = {0} and StationName LIKE '{1}' ORDER by id desc limit 1", 1, "%" + MainSeisName1 + "%"); } else { sql = String.Format("select * from seismograph_para where StationID = {0} and StationName LIKE '{1}' ORDER by id desc limit 1", 2, "%" + MainSeisName2 + "%"); } } MySqlDataReader dataReader = DBHelper.ExecuteReader(sql, 1); while (dataReader.Read()) { EarthQuakeParaSet.RecordTime = Convert.ToDateTime(dataReader["RecordTime"]); EarthQuakeParaSet.StationNo = Convert.IsDBNull(dataReader["StationNo"]) ? 0 : Convert.ToInt32(dataReader["StationNo"]); EarthQuakeParaSet.StationName = Convert.IsDBNull(dataReader["StationName"]) ? "" : dataReader["StationName"].ToString(); EarthQuakeParaSet.StationShortName = Convert.IsDBNull(dataReader["StationShortName"]) ? "" : dataReader["StationShortName"].ToString(); EarthQuakeParaSet.EarthQuakeCount = Convert.IsDBNull(dataReader["EarthQuakeCount"]) ? (short)0 : Convert.ToInt16(dataReader["EarthQuakeCount"]); EarthQuakeParaSet.ChannelsNo = Convert.IsDBNull(dataReader["ChannelsNo"]) ? (short)0 : Convert.ToInt16(dataReader["ChannelsNo"]); EarthQuakeParaSet.WD = Convert.IsDBNull(dataReader["WD"]) ? 0 : Convert.ToInt32(dataReader["WD"]); EarthQuakeParaSet.JD = Convert.IsDBNull(dataReader["JD"]) ? 0 : Convert.ToInt32(dataReader["JD"]); EarthQuakeParaSet.GaoCheng = Convert.IsDBNull(dataReader["GaoCheng"]) ? 0 : Convert.ToInt32(dataReader["GaoCheng"]); EarthQuakeParaSet.StartTime = Convert.IsDBNull(dataReader["StartTime"]) ? "" : dataReader["StartTime"].ToString(); EarthQuakeParaSet.Station_Id = Convert.IsDBNull(dataReader["Station_Id"]) ? "" : dataReader["Station_Id"].ToString(); EarthQuakeParaSet.Software_Version = Convert.IsDBNull(dataReader["Software_Version"]) ? "" : dataReader["Software_Version"].ToString(); } dataReader.Dispose(); } } 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(); } } private bool earthQuakeParaSetIsSend = false; public bool EarthQuakeParaSetIsSend { get { return earthQuakeParaSetIsSend; } set { earthQuakeParaSetIsSend = value; this.DoNotify(); } } private bool earthQuakeParaReadIsSend = false; public bool EarthQuakeParaReadIsSend { get { return earthQuakeParaReadIsSend; } set { earthQuakeParaReadIsSend = 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 "EarthQuakeParaSetBtn": EarthQuakeParaSetBtnIsEnabled = false; EarthQuakeParaReadBtnIsEnabled = false; EarthQuakeParaSetIsReceived = false; EarthQuakeParaSetIsSend = false; EarthQuakeParaReadIsSend = false; List sendDataSeisPara = new List(); byte[] checkCodeSeisPara = new byte[2]; List checkByteSeisPara = new List(); byte[] sationNo = Tools.IntToBytes(int.Parse(msg[1])); //台号 byte[] stationName = Encoding.UTF8.GetBytes(msg[2]); //台站名称 Array.Reverse(stationName); stationName = Tools.PadArrayWithZeros(stationName, 32); byte[] stationShortName = Encoding.UTF8.GetBytes(msg[3]); //台站缩写 Array.Reverse(stationShortName); stationShortName = Tools.PadArrayWithZeros(stationShortName, 8); byte[] earthQuakeCount = BitConverter.GetBytes(int.Parse(msg[4])); //地震计总数\ Array.Reverse(earthQuakeCount); earthQuakeCount = Tools.PadArrayWithZeros(earthQuakeCount, 2); byte[] channelsNo = BitConverter.GetBytes(int.Parse(msg[5])); //总通道数 Array.Reverse(channelsNo); 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(int.Parse(msg[9].Replace("/", ""))); //起用日期 Array.Reverse(startTime); startTime = Tools.PadArrayWithZeros(startTime, 32); byte[] stationid = Encoding.UTF8.GetBytes(msg[10]); //台网标志 Array.Reverse(stationid); stationid = Tools.PadArrayWithZeros(stationid, 4); byte[] software_version = Encoding.UTF8.GetBytes(msg[11]); //软件版本 Array.Reverse(software_version); software_version = Tools.PadArrayWithZeros(software_version, 32); sendDataSeisPara.Clear(); sendDataSeisPara.AddRange(new byte[] { 0xBF, 0x13, 0x97, 0x74 }); //SYNC sendDataSeisPara.AddRange(new byte[] { 0xA0, 0x00 }); //CMD sendDataSeisPara.AddRange(new byte[] { 0x00, 0x82 }); //LENGTH sendDataSeisPara.AddRange(sationNo); sendDataSeisPara.AddRange(stationName); sendDataSeisPara.AddRange(stationShortName); sendDataSeisPara.AddRange(earthQuakeCount); sendDataSeisPara.AddRange(channelsNo); sendDataSeisPara.AddRange(wd); sendDataSeisPara.AddRange(jd); sendDataSeisPara.AddRange(gaoCheng); sendDataSeisPara.AddRange(startTime); sendDataSeisPara.AddRange(stationid); sendDataSeisPara.AddRange(software_version); checkByteSeisPara.Clear(); checkByteSeisPara.AddRange(new byte[] { 0xA0, 0x00 }); //CMD checkByteSeisPara.AddRange(new byte[] { 0x00, 0x82 }); //LENGTH checkByteSeisPara.AddRange(sationNo); checkByteSeisPara.AddRange(stationName); checkByteSeisPara.AddRange(stationShortName); checkByteSeisPara.AddRange(earthQuakeCount); checkByteSeisPara.AddRange(channelsNo); checkByteSeisPara.AddRange(wd); checkByteSeisPara.AddRange(jd); checkByteSeisPara.AddRange(gaoCheng); checkByteSeisPara.AddRange(startTime); checkByteSeisPara.AddRange(stationid); checkByteSeisPara.AddRange(software_version); checkCodeSeisPara = Tools.ComputeChecksum(checkByteSeisPara.ToArray()); //CHK_SUM sendDataSeisPara.AddRange(checkCodeSeisPara); bool result = false; if (station_id == 1) { if (!BackupSeisIsChecked) { if (MainWindow.mainViewModel.clientModelMainSeis1.IsConnected && MainWindow.mainViewModel.IsMainSeis1CertSucs) { result = MainWindow.mainViewModel.clientModelMainSeis1.SendMessage(sendDataSeisPara.ToArray()); } else { SeisParaMsgVisibility = Visibility.Visible; SeisParaMsg = "通信未连接!"; timerSeisParaMsgHidden.Start(); SeisParaMsgForeground = new SolidColorBrush(Colors.Red); EarthQuakeParaSetBtnIsEnabled = true; EarthQuakeParaReadBtnIsEnabled = true; break; } } else { if (MainWindow.mainViewModel.clientModelBackupSeis1.IsConnected && MainWindow.mainViewModel.IsBackupSeis1CertSucs) { result = MainWindow.mainViewModel.clientModelBackupSeis1.SendMessage(sendDataSeisPara.ToArray()); } else { SeisParaMsgVisibility = Visibility.Visible; SeisParaMsg = "通信未连接!"; timerSeisParaMsgHidden.Start(); SeisParaMsgForeground = new SolidColorBrush(Colors.Red); EarthQuakeParaSetBtnIsEnabled = true; EarthQuakeParaReadBtnIsEnabled = true; break; } } } else { if (!BackupSeisIsChecked) { if (MainWindow.mainViewModel.clientModelMainSeis2.IsConnected && MainWindow.mainViewModel.IsMainSeis2CertSucs) { result = MainWindow.mainViewModel.clientModelMainSeis2.SendMessage(sendDataSeisPara.ToArray()); } else { SeisParaMsgVisibility = Visibility.Visible; SeisParaMsg = "通信未连接!"; timerSeisParaMsgHidden.Start(); SeisParaMsgForeground = new SolidColorBrush(Colors.Red); EarthQuakeParaSetBtnIsEnabled = true; EarthQuakeParaReadBtnIsEnabled = true; break; } } else { if (MainWindow.mainViewModel.clientModelBackupSeis2.IsConnected && MainWindow.mainViewModel.IsBackupSeis2CertSucs) { result = MainWindow.mainViewModel.clientModelBackupSeis2.SendMessage(sendDataSeisPara.ToArray()); } else { SeisParaMsgVisibility = Visibility.Visible; SeisParaMsg = "通信未连接!"; timerSeisParaMsgHidden.Start(); SeisParaMsgForeground = new SolidColorBrush(Colors.Red); EarthQuakeParaSetBtnIsEnabled = true; EarthQuakeParaReadBtnIsEnabled = true; break; } } } if (result) { SeisParaMsgVisibility = Visibility.Visible; SeisParaMsg = "设置地震仪参数发送成功!"; EarthQuakeParaSetIsSend = true; EarthQuakeParaReadIsSend = false; 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; } string seisDevice = !BackupSeisIsChecked == true ? "海底地震监测基站-主地震仪" : "海底地震监测基站-备地震仪"; string sql = $"insert into log_record(StationID,RecordTime,Device_Name,Operation_Type,Record) values('{station_id}','{DateTime.Now}','{seisDevice}','参数设置','{SeisParaMsg}');"; DBHelper.ExecuteNonQuery(sql, 1); break; case "EarthQuakeParaReadBtn": EarthQuakeParaSetBtnIsEnabled = false; EarthQuakeParaReadBtnIsEnabled = false; EarthQuakeParaReadIsReceived = false; EarthQuakeParaSetIsSend = false; EarthQuakeParaReadIsSend = false; List sendDataSeisParaRead = new List(); byte[] checkCodeSeisParaRead = new byte[2]; List checkByteSeisParaRead = new List(); sendDataSeisParaRead.Clear(); sendDataSeisParaRead.AddRange(new byte[] { 0xBF, 0x13, 0x97, 0x74 }); //SYNC sendDataSeisParaRead.AddRange(new byte[] { 0xB0, 0x00 }); //CMD sendDataSeisParaRead.AddRange(new byte[] { 0x00, 0x02 }); //LENGTH //地震计号 byte[] numDZJ = new byte[2]; if (station_id == 1) { if (!BackupSeisIsChecked) numDZJ = BitConverter.GetBytes(short.Parse(Tools.GetAppSetting("MainSeisNum1"))); else numDZJ = BitConverter.GetBytes(short.Parse(Tools.GetAppSetting("BackupSeisNum1"))); } else { if (!BackupSeisIsChecked) numDZJ = BitConverter.GetBytes(short.Parse(Tools.GetAppSetting("MainSeisNum2"))); else numDZJ = BitConverter.GetBytes(short.Parse(Tools.GetAppSetting("BackupSeisNum2"))); } numDZJ = Tools.PadArrayWithZeros(numDZJ, 2); sendDataSeisParaRead.AddRange(numDZJ); //地震计号 checkByteSeisParaRead.Clear(); checkByteSeisParaRead.AddRange(new byte[] { 0xB0, 0x00 }); //CMD checkByteSeisParaRead.AddRange(new byte[] { 0x00, 0x02 }); //LENGTH checkByteSeisParaRead.AddRange(numDZJ); //地震计号 checkCodeSeisParaRead = Tools.ComputeChecksum(checkByteSeisParaRead.ToArray()); //CHK_SUM sendDataSeisParaRead.AddRange(checkCodeSeisParaRead); result = false; if (station_id == 1) { if (!BackupSeisIsChecked) { if (MainWindow.mainViewModel.clientModelMainSeis1.IsConnected && MainWindow.mainViewModel.IsMainSeis1CertSucs) { result = MainWindow.mainViewModel.clientModelMainSeis1.SendMessage(sendDataSeisParaRead.ToArray()); } else { SeisParaMsgVisibility = Visibility.Visible; SeisParaMsg = "通信未连接!"; timerSeisParaMsgHidden.Start(); SeisParaMsgForeground = new SolidColorBrush(Colors.Red); EarthQuakeParaSetBtnIsEnabled = true; EarthQuakeParaReadBtnIsEnabled = true; break; } } else { if (MainWindow.mainViewModel.clientModelBackupSeis1.IsConnected && MainWindow.mainViewModel.IsBackupSeis1CertSucs) { result = MainWindow.mainViewModel.clientModelBackupSeis1.SendMessage(sendDataSeisParaRead.ToArray()); } else { SeisParaMsgVisibility = Visibility.Visible; SeisParaMsg = "通信未连接!"; timerSeisParaMsgHidden.Start(); SeisParaMsgForeground = new SolidColorBrush(Colors.Red); EarthQuakeParaSetBtnIsEnabled = true; EarthQuakeParaReadBtnIsEnabled = true; break; } } } else { if (!BackupSeisIsChecked) { if (MainWindow.mainViewModel.clientModelMainSeis2.IsConnected && MainWindow.mainViewModel.IsMainSeis2CertSucs) { result = MainWindow.mainViewModel.clientModelMainSeis2.SendMessage(sendDataSeisParaRead.ToArray()); } else { SeisParaMsgVisibility = Visibility.Visible; SeisParaMsg = "通信未连接!"; timerSeisParaMsgHidden.Start(); SeisParaMsgForeground = new SolidColorBrush(Colors.Red); EarthQuakeParaSetBtnIsEnabled = true; EarthQuakeParaReadBtnIsEnabled = true; break; } } else { if (MainWindow.mainViewModel.clientModelBackupSeis2.IsConnected && MainWindow.mainViewModel.IsBackupSeis2CertSucs) { result = MainWindow.mainViewModel.clientModelBackupSeis2.SendMessage(sendDataSeisParaRead.ToArray()); } else { SeisParaMsgVisibility = Visibility.Visible; SeisParaMsg = "通信未连接!"; timerSeisParaMsgHidden.Start(); SeisParaMsgForeground = new SolidColorBrush(Colors.Red); EarthQuakeParaSetBtnIsEnabled = true; EarthQuakeParaReadBtnIsEnabled = true; break; } } } if (result) { SeisParaMsgVisibility = Visibility.Visible; SeisParaMsg = "读取地震仪参数发送成功!"; EarthQuakeParaSetIsSend = false; EarthQuakeParaReadIsSend = true; 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; } seisDevice = !BackupSeisIsChecked == true ? "海底地震监测基站-主地震仪" : "海底地震监测基站-备地震仪"; sql = $"insert into log_record(StationID,RecordTime,Device_Name,Operation_Type,Record) values('{station_id}','{DateTime.Now}','{seisDevice}','参数读取','{SeisParaMsg}');"; DBHelper.ExecuteNonQuery(sql, 1); break; default: return; } } #endregion } }