20240301_JSEQ_upperpc/JiangsuEarthquakeNowUI/JiangsuEarthquake/ViewModels/SeismometerParameterViewModel.cs
2024-11-01 15:54:08 +08:00

947 lines
43 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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<EarthQuakeParaSetModel> seismometerParameterList = new ObservableCollection<EarthQuakeParaSetModel>();
public ObservableCollection<EarthQuakeParaSetModel> SeismometerParameterList
{
get { return seismometerParameterList; }
set { seismometerParameterList = value; this.DoNotify(); }
}
private ObservableCollection<EarthQuakeParaSetModel> totalSeismometerParameterList = new ObservableCollection<EarthQuakeParaSetModel>();
public ObservableCollection<EarthQuakeParaSetModel> 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<object>(ForwordSystemState);
this.ForwordSystemStateCommand.DoCanExcute = new Func<object, bool>((o) => true);
this.NextSystemStateCommand = new CommandBase();
this.NextSystemStateCommand.DoExcute = new Action<object>(NextSystemState);
this.NextSystemStateCommand.DoCanExcute = new Func<object, bool>((o) => true);
this.RefreshDataCommand = new CommandBase();
this.RefreshDataCommand.DoExcute = new Action<object>(RefreshData);
this.RefreshDataCommand.DoCanExcute = new Func<object, bool>((o) => true);
this.DownloadDataCommand = new CommandBase();
this.DownloadDataCommand.DoExcute = new Action<object>(DownloadData);
this.DownloadDataCommand.DoCanExcute = new Func<object, bool>((o) => true);
this.ParaSetSwitch = new CommandBase();
this.ParaSetSwitch.DoExcute = new Action<object>(Btn_ParaSet);
this.ParaSetSwitch.DoCanExcute = new Func<object, bool>((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<byte> sendDataSeisPara = new List<byte>();
byte[] checkCodeSeisPara = new byte[2];
List<byte> checkByteSeisPara = new List<byte>();
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<byte> sendDataSeisParaRead = new List<byte>();
byte[] checkCodeSeisParaRead = new byte[2];
List<byte> checkByteSeisParaRead = new List<byte>();
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
}
}