20240301_JSEQ_upperpc/JiangsuEarthquakeNow/JiangsuEarthquake/Models/SeismographModel.cs

1046 lines
65 KiB
C#
Raw Normal View History

using HandyControl.Controls;
using JiangsuEarthquake.Common;
using JiangsuEarthquake.DataAccess;
using JiangsuEarthquake.ViewModels;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Media;
using Application = System.Windows.Application;
namespace JiangsuEarthquake.Models
{
public class SeismographModel
{
private byte[] cmdSend { get; set; } = new byte[2]; //帧标志
private byte[] cmdRecv { get; set; } = new byte[2]; //帧标志
private byte[] lengthSend { get; set; } = new byte[2]; //从DATA开始的帧长度单位字节
private List<byte> dataSend { get; set; } = new List<byte>(); //数据部分
private List<byte> dataRecv { get; set; } = new List<byte>(); //数据部分
private byte[] checkCode { get; set; } = new byte[2]; //从CMD到DATA结束的CRC16校验和
private List<byte> checkByte { get; set; } = new List<byte>(); //校验码Byte
public byte[] CloseByte()
{
List<byte> sendCloseDataSeis = new List<byte>();
List<byte> checkCloseByte = new List<byte>();
byte[] checkCloseCode = new byte[2];
//发送断开连接消息
sendCloseDataSeis.Clear();
sendCloseDataSeis.AddRange(new byte[] { 0xBF, 0x13, 0x97, 0x74 }); //SYNC
sendCloseDataSeis.AddRange(new byte[] { 0xA0, 0x50 }); //CMD
sendCloseDataSeis.AddRange(new byte[] { 0x00, 0x04 }); //LENGTH
//消息字
byte[] msg = new byte[2];
msg = BitConverter.GetBytes(500);
msg = Tools.PadArrayWithZeros(msg, 2);
sendCloseDataSeis.AddRange(msg); //DATA
checkCloseByte.Clear();
checkCloseByte.AddRange(new byte[] { 0xA0, 0x50 }); //CMD
checkCloseByte.AddRange(new byte[] { 0x00, 0x04 }); //LENGTH
checkCloseByte.AddRange(msg); //DATA
checkCloseCode = Tools.ComputeChecksum(checkCloseByte.ToArray()); //CHK_SUM
sendCloseDataSeis.AddRange(checkCloseCode);
return sendCloseDataSeis.ToArray();
}
public void ParsingData(List<byte> byteList, int id, bool isMain)
{
if (byteList.Count == 0)
return;
//原始数据存储
string sql = $"insert into seismograph_originaldata(StationID,RecordTime,OriginalData) values('{id}','{DateTime.Now}','{BitConverter.ToString(byteList.ToArray())}');";
DBHelper.ExecuteNonQuery(sql, 1);
//同步字校验
if (byteList[0] != 0xBF || byteList[1] != 0x13 || byteList[2] != 0x97 || byteList[3] != 0x74)
{
string content = "地震仪数据同步字校验失败";
sql = $"insert into alarm_run_info(StationID,RecordTime,ParaName,ParaContent) values('{id}','{DateTime.Now}','地震仪数据校验','{content}');";
DBHelper.ExecuteNonQuery(sql, 1);
return;
}
checkByte.Clear();
//CRC16校验和校验
for (int i = 4; i < byteList.Count - 2; i++)
checkByte.Add(byteList[i]);
byte[] sendCheckdata = new byte[] { byteList[^2], byteList[^1] };
byte[] caluCheckdata = Tools.ComputeChecksum(checkByte.ToArray());
if (!Tools.CompareByte(sendCheckdata, caluCheckdata))
{
string content = "地震仪数据CRC16校验和校验失败";
sql = $"insert into alarm_run_info(StationID,RecordTime,ParaName,ParaContent) values('{id}','{DateTime.Now}','地震仪数据校验','{content}');";
DBHelper.ExecuteNonQuery(sql, 1);
return;
}
//长度校验
int length = BitConverter.ToInt16(new byte[] { byteList[7], byteList[6] }, 0);
if (length != byteList.Count - 8)
{
string content = "地震仪数据长度校验失败";
sql = $"insert into alarm_run_info(StationID,RecordTime,ParaName,ParaContent) values('{id}','{DateTime.Now}','地震仪数据校验','{content}');";
DBHelper.ExecuteNonQuery(sql, 1);
return;
}
cmdRecv = new byte[] { byteList[4], byteList[5] };
dataRecv.Clear();
for (int i = 8; i < byteList.Count - 2; i++)
dataRecv.Add(byteList[i]);
if (Tools.CompareByte(cmdRecv, new byte[] { 0x77, 0x00 })) //用于客户端与状态流服务器建立链接过程中消息交换
{
if (dataRecv.Count != 2)
{
string content = "地震仪链接回复长度校验失败";
sql = $"insert into alarm_run_info(StationID,RecordTime,ParaName,ParaContent) values('{id}','{DateTime.Now}','地震仪数据校验','{content}');";
DBHelper.ExecuteNonQuery(sql, 1);
return;
}
int response = BitConverter.ToInt16(new byte[2] { dataRecv[1], dataRecv[0] }, 0);
if (response == 100) //有空闲连接时应答
{
App.Current.Dispatcher.Invoke(() =>
{
MainWindow.mainViewModel.MainSeis1ConnectMsgVisibility = Visibility.Visible;
MainWindow.mainViewModel.MainSeis1ConnectMsg = "存在空闲连接,发送认证!";
MainWindow.mainViewModel.MainSeis1ConnectMsgForeground = new SolidColorBrush(Colors.Green);
});
//发送用户认证帧
cmdSend = new byte[] { 0x77, 0x00 };
lengthSend = new byte[] { 0x00, 0x3A };
string User = "Admin";
byte[] userByte = Encoding.UTF8.GetBytes(User);
byte[] userByteArray = Tools.PadArrayWithZeros(userByte, 16);
//if (userByte.Length != 16)
//{
// for (int i = 0; i < 16; i++)
// userByteArray[i] = 0;
// Array.Copy(userByte, 0, userByteArray, 16, userByte.Length);
//}
//else
//{
// userByteArray = userByte;
//}
string Password = "Admin";
byte[] passwordByte = Encoding.UTF8.GetBytes(Password);
byte[] passwordByteArray = Tools.PadArrayWithZeros(passwordByte, 40);
//if (passwordByte.Length != 40)
//{
// for (int i = 0; i < 40; i++)
// passwordByteArray[i] = 0;
// Array.Copy(passwordByte, 0, passwordByteArray, 40, passwordByte.Length);
//}
//else
//{
// passwordByteArray = passwordByte;
//}
dataSend.Clear();
dataSend.AddRange(new byte[] { 0xBF, 0x13, 0x97, 0x74 }); //SYNC
dataSend.AddRange(cmdSend); //CMD
dataSend.AddRange(lengthSend); //LENGTH
dataSend.AddRange(userByteArray);
dataSend.AddRange(passwordByteArray);
checkByte.Clear();
checkByte.AddRange(cmdSend);
checkByte.AddRange(lengthSend);
checkByte.AddRange(userByteArray);
checkByte.AddRange(passwordByteArray);
checkCode = Tools.ComputeChecksum(checkByte.ToArray());
dataSend.AddRange(checkCode);
if (id == 1)
{
if (isMain)
MainWindow.mainViewModel.clientModelMainSeis1.SendMessage(dataSend.ToArray());
else
MainWindow.mainViewModel.clientModelBackupSeis1.SendMessage(dataSend.ToArray());
}
else
{
if (isMain)
MainWindow.mainViewModel.clientModelMainSeis2.SendMessage(dataSend.ToArray());
else
MainWindow.mainViewModel.clientModelBackupSeis2.SendMessage(dataSend.ToArray());
}
string seisDevice = isMain == true ? "海底地震监测基站-主地震仪" : "海底地震监测基站-备地震仪";
sql = $"insert into log_record(StationID,RecordTime,Device_Name,Operation_Type,Record) values('{id}','{DateTime.Now}','{seisDevice}','连接认证','存在空闲连接,并已发送用户认证帧');";
DBHelper.ExecuteNonQuery(sql, 1);
}
else if (response == 405) //没有空闲连接
{
App.Current.Dispatcher.Invoke(() =>
{
MainWindow.mainViewModel.MainSeis1ConnectMsgVisibility = Visibility.Visible;
MainWindow.mainViewModel.MainSeis1ConnectMsg = "无空闲连接,准备重连!";
MainWindow.mainViewModel.MainSeis1ConnectMsgForeground = new SolidColorBrush(Colors.Red);
});
string seisDevice = isMain == true ? "海底地震监测基站-主地震仪" : "海底地震监测基站-备地震仪";
sql = $"insert into log_record(StationID,RecordTime,Device_Name,Operation_Type,Record) values('{id}','{DateTime.Now}','{seisDevice}','连接认证','无空闲连接,准备断开重连');";
DBHelper.ExecuteNonQuery(sql, 1);
//重新尝试连接
//先断开连接10s后重新连接
if (id == 1)
{
if (isMain)
{
if (MainWindow.mainViewModel.clientModelMainSeis1.IsConnected)
{
//发送断开连接消息
MainWindow.mainViewModel.clientModelMainSeis1.SendMessage(CloseByte());
Task.Run(new Action(async () =>
{
await Task.Delay(100);
MainWindow.mainViewModel.clientModelMainSeis1.DisConnect();
MainWindow.mainViewModel.IsMainSeis1CertSucs = false;
MainWindow.mainViewModel.MainSeis1ConnectMsgVisibility = Visibility.Visible;
MainWindow.mainViewModel.MainSeis1ConnectMsg = "连接断开!";
MainWindow.mainViewModel.MainSeis1ConnectMsgForeground = new SolidColorBrush(Colors.Red);
}));
sql = $"insert into log_record(StationID,RecordTime,Device_Name,Operation_Type,Record) values('1','{DateTime.Now}','海底地震监测基站-主地震仪','通信连接','连接已断开');";
DBHelper.ExecuteNonQuery(sql, 1);
}
Task.Run(new Action(async () =>
{
await Task.Delay(10000);
if (MainWindow.mainViewModel.clientModelMainSeis1.DoConnect(MainViewModel.SocketInfoMainSeis1))
{
MainWindow.mainViewModel.IsMainSeis1CertSucs = false;
MainWindow.mainViewModel.MainSeis1ConnectMsgVisibility = Visibility.Visible;
MainWindow.mainViewModel.MainSeis1ConnectMsg = "初步连接,等待消息帧!";
MainWindow.mainViewModel.MainSeis1ConnectMsgForeground = new SolidColorBrush(Colors.Green);
string record = "初步连接等待消息帧IP" + MainViewModel.SocketInfoMainSeis1.IP + "Port" + MainViewModel.SocketInfoMainSeis1.Port;
string sql = $"insert into log_record(StationID,RecordTime,Device_Name,Operation_Type,Record) values('1','{DateTime.Now}','海底地震监测基站-主地震仪','通信连接','{record}');";
DBHelper.ExecuteNonQuery(sql, 1);
}
}));
}
else
{
if (MainWindow.mainViewModel.clientModelBackupSeis1.IsConnected)
{
//发送断开连接消息
MainWindow.mainViewModel.clientModelBackupSeis1.SendMessage(CloseByte());
Task.Run(new Action(async () =>
{
await Task.Delay(100);
MainWindow.mainViewModel.clientModelBackupSeis1.DisConnect();
MainWindow.mainViewModel.IsBackupSeis1CertSucs = false;
MainWindow.mainViewModel.BackupSeis1ConnectMsgVisibility = Visibility.Visible;
MainWindow.mainViewModel.BackupSeis1ConnectMsg = "连接断开!";
MainWindow.mainViewModel.BackupSeis1ConnectMsgForeground = new SolidColorBrush(Colors.Red);
}));
sql = $"insert into log_record(StationID,RecordTime,Device_Name,Operation_Type,Record) values('1','{DateTime.Now}','海底地震监测基站-备地震仪','通信连接','连接已断开');";
DBHelper.ExecuteNonQuery(sql, 1);
}
Task.Run(new Action(async () =>
{
await Task.Delay(10000);
if (MainWindow.mainViewModel.clientModelBackupSeis1.DoConnect(MainViewModel.SocketInfoBackupSeis1))
{
MainWindow.mainViewModel.IsBackupSeis1CertSucs = false;
MainWindow.mainViewModel.BackupSeis1ConnectMsgVisibility = Visibility.Visible;
MainWindow.mainViewModel.BackupSeis1ConnectMsg = "初步连接,等待消息帧!";
MainWindow.mainViewModel.BackupSeis1ConnectMsgForeground = new SolidColorBrush(Colors.Green);
string record = "初步连接等待消息帧IP" + MainViewModel.SocketInfoBackupSeis1.IP + "Port" + MainViewModel.SocketInfoBackupSeis1.Port;
string sql = $"insert into log_record(StationID,RecordTime,Device_Name,Operation_Type,Record) values('1','{DateTime.Now}','海底地震监测基站-备地震仪','通信连接','{record}');";
DBHelper.ExecuteNonQuery(sql, 1);
}
}));
}
}
else
{
if (isMain)
{
if (MainWindow.mainViewModel.clientModelMainSeis2.IsConnected)
{
//发送断开连接消息
MainWindow.mainViewModel.clientModelMainSeis2.SendMessage(CloseByte());
Task.Run(new Action(async () =>
{
await Task.Delay(100);
MainWindow.mainViewModel.clientModelMainSeis2.DisConnect();
MainWindow.mainViewModel.IsMainSeis2CertSucs = false;
MainWindow.mainViewModel.MainSeis2ConnectMsgVisibility = Visibility.Visible;
MainWindow.mainViewModel.MainSeis2ConnectMsg = "连接断开!";
MainWindow.mainViewModel.MainSeis2ConnectMsgForeground = new SolidColorBrush(Colors.Red);
}));
sql = $"insert into log_record(StationID,RecordTime,Device_Name,Operation_Type,Record) values('2','{DateTime.Now}','海底地震监测基站-主地震仪','通信连接','连接已断开');";
DBHelper.ExecuteNonQuery(sql, 1);
}
Task.Run(new Action(async () =>
{
await Task.Delay(10000);
if (MainWindow.mainViewModel.clientModelMainSeis2.DoConnect(MainViewModel.SocketInfoMainSeis2))
{
MainWindow.mainViewModel.IsMainSeis2CertSucs = false;
MainWindow.mainViewModel.MainSeis2ConnectMsgVisibility = Visibility.Visible;
MainWindow.mainViewModel.MainSeis2ConnectMsg = "初步连接,等待消息帧!";
MainWindow.mainViewModel.MainSeis2ConnectMsgForeground = new SolidColorBrush(Colors.Green);
string record = "初步连接等待消息帧IP" + MainViewModel.SocketInfoMainSeis2.IP + "Port" + MainViewModel.SocketInfoMainSeis2.Port;
string sql = $"insert into log_record(StationID,RecordTime,Device_Name,Operation_Type,Record) values('2','{DateTime.Now}','海底地震监测基站-主地震仪','通信连接','{record}');";
DBHelper.ExecuteNonQuery(sql, 1);
}
}));
}
else
{
if (MainWindow.mainViewModel.clientModelBackupSeis2.IsConnected)
{
//发送断开连接消息
MainWindow.mainViewModel.clientModelBackupSeis2.SendMessage(CloseByte());
Task.Run(new Action(async () =>
{
await Task.Delay(100);
MainWindow.mainViewModel.clientModelBackupSeis2.DisConnect();
MainWindow.mainViewModel.IsBackupSeis2CertSucs = false;
MainWindow.mainViewModel.BackupSeis2ConnectMsgVisibility = Visibility.Visible;
MainWindow.mainViewModel.BackupSeis2ConnectMsg = "连接断开!";
MainWindow.mainViewModel.BackupSeis2ConnectMsgForeground = new SolidColorBrush(Colors.Red);
}));
sql = $"insert into log_record(StationID,RecordTime,Device_Name,Operation_Type,Record) values('2','{DateTime.Now}','海底地震监测基站-备地震仪','通信连接','连接已断开');";
DBHelper.ExecuteNonQuery(sql, 1);
}
Task.Run(new Action(async () =>
{
await Task.Delay(10000);
if (MainWindow.mainViewModel.clientModelBackupSeis2.DoConnect(MainViewModel.SocketInfoBackupSeis2))
{
MainWindow.mainViewModel.IsBackupSeis2CertSucs = false;
MainWindow.mainViewModel.BackupSeis2ConnectMsgVisibility = Visibility.Visible;
MainWindow.mainViewModel.BackupSeis2ConnectMsg = "初步连接,等待消息帧!";
MainWindow.mainViewModel.BackupSeis2ConnectMsgForeground = new SolidColorBrush(Colors.Green);
string record = "初步连接等待消息帧IP" + MainViewModel.SocketInfoBackupSeis2.IP + "Port" + MainViewModel.SocketInfoBackupSeis2.Port;
string sql = $"insert into log_record(StationID,RecordTime,Device_Name,Operation_Type,Record) values('2','{DateTime.Now}','海底地震监测基站-备地震仪','通信连接','{record}');";
DBHelper.ExecuteNonQuery(sql, 1);
}
}));
}
}
}
else if (response == 200) //认证成功
{
App.Current.Dispatcher.Invoke(() =>
{
//连接成功
if (id == 1)
{
if (isMain)
{
MainWindow.mainViewModel.IsMainSeis1CertSucs = true;
MainWindow.mainViewModel.MainSeis1ConnectMsgVisibility = Visibility.Visible;
MainWindow.mainViewModel.MainSeis1ConnectMsg = "认证成功!";
MainWindow.mainViewModel.MainSeis1ConnectMsgForeground = new SolidColorBrush(Colors.Green);
}
else
{
MainWindow.mainViewModel.IsBackupSeis1CertSucs = true;
MainWindow.mainViewModel.BackupSeis1ConnectMsgVisibility = Visibility.Visible;
MainWindow.mainViewModel.BackupSeis1ConnectMsg = "认证成功!";
MainWindow.mainViewModel.BackupSeis1ConnectMsgForeground = new SolidColorBrush(Colors.Green);
}
}
else
{
if (isMain)
{
MainWindow.mainViewModel.IsMainSeis2CertSucs = true;
MainWindow.mainViewModel.MainSeis2ConnectMsgVisibility = Visibility.Visible;
MainWindow.mainViewModel.MainSeis2ConnectMsg = "认证成功!";
MainWindow.mainViewModel.MainSeis2ConnectMsgForeground = new SolidColorBrush(Colors.Green);
}
else
{
MainWindow.mainViewModel.IsBackupSeis2CertSucs = true;
MainWindow.mainViewModel.BackupSeis2ConnectMsgVisibility = Visibility.Visible;
MainWindow.mainViewModel.BackupSeis2ConnectMsg = "认证成功!";
MainWindow.mainViewModel.BackupSeis2ConnectMsgForeground = new SolidColorBrush(Colors.Green);
}
}
});
string seisDevice = isMain == true ? "海底地震监测基站-主地震仪" : "海底地震监测基站-备地震仪";
sql = $"insert into log_record(StationID,RecordTime,Device_Name,Operation_Type,Record) values('{id}','{DateTime.Now}','{seisDevice}','连接认证','认证成功');";
DBHelper.ExecuteNonQuery(sql, 1);
}
else if (response == 400) //认证失败
{
string seisDevice = isMain == true ? "海底地震监测基站-主地震仪" : "海底地震监测基站-备地震仪";
sql = $"insert into log_record(StationID,RecordTime,Device_Name,Operation_Type,Record) values('{id}','{DateTime.Now}','{seisDevice}','连接认证','认证失败,准备断开重连');";
DBHelper.ExecuteNonQuery(sql, 1);
//重新尝试连接
if (id == 1)
{
if (isMain)
{
App.Current.Dispatcher.Invoke(() =>
{
MainWindow.mainViewModel.IsMainSeis1CertSucs = false;
MainWindow.mainViewModel.MainSeis1ConnectMsgVisibility = Visibility.Visible;
MainWindow.mainViewModel.MainSeis1ConnectMsg = "认证失败!";
MainWindow.mainViewModel.MainSeis1ConnectMsgForeground = new SolidColorBrush(Colors.Red);
});
if (MainWindow.mainViewModel.clientModelMainSeis1.IsConnected)
{
//发送断开连接消息
MainWindow.mainViewModel.clientModelMainSeis1.SendMessage(CloseByte());
Task.Run(new Action(async () =>
{
await Task.Delay(100);
MainWindow.mainViewModel.clientModelMainSeis1.DisConnect();
MainWindow.mainViewModel.IsMainSeis1CertSucs = false;
MainWindow.mainViewModel.MainSeis1ConnectMsgVisibility = Visibility.Visible;
MainWindow.mainViewModel.MainSeis1ConnectMsg = "连接断开!";
MainWindow.mainViewModel.MainSeis1ConnectMsgForeground = new SolidColorBrush(Colors.Red);
}));
sql = $"insert into log_record(StationID,RecordTime,Device_Name,Operation_Type,Record) values('1','{DateTime.Now}','海底地震监测基站-主地震仪','通信连接','连接已断开');";
DBHelper.ExecuteNonQuery(sql, 1);
}
Task.Run(new Action(async () =>
{
await Task.Delay(10000);
if (MainWindow.mainViewModel.clientModelMainSeis1.DoConnect(MainViewModel.SocketInfoMainSeis1))
{
MainWindow.mainViewModel.IsMainSeis1CertSucs = false;
MainWindow.mainViewModel.MainSeis1ConnectMsgVisibility = Visibility.Visible;
MainWindow.mainViewModel.MainSeis1ConnectMsg = "初步连接,等待消息帧!";
MainWindow.mainViewModel.MainSeis1ConnectMsgForeground = new SolidColorBrush(Colors.Green);
string record = "初步连接等待消息帧IP" + MainViewModel.SocketInfoMainSeis1.IP + "Port" + MainViewModel.SocketInfoMainSeis1.Port;
string sql = $"insert into log_record(StationID,RecordTime,Device_Name,Operation_Type,Record) values('1','{DateTime.Now}','海底地震监测基站-主地震仪','通信连接','{record}');";
DBHelper.ExecuteNonQuery(sql, 1);
}
}));
}
else
{
App.Current.Dispatcher.Invoke(() =>
{
MainWindow.mainViewModel.IsBackupSeis1CertSucs = false;
MainWindow.mainViewModel.BackupSeis1ConnectMsgVisibility = Visibility.Visible;
MainWindow.mainViewModel.BackupSeis1ConnectMsg = "认证失败!";
MainWindow.mainViewModel.BackupSeis1ConnectMsgForeground = new SolidColorBrush(Colors.Red);
});
if (MainWindow.mainViewModel.clientModelBackupSeis1.IsConnected)
{
//发送断开连接消息
MainWindow.mainViewModel.clientModelBackupSeis1.SendMessage(CloseByte());
Task.Run(new Action(async () =>
{
await Task.Delay(100);
MainWindow.mainViewModel.clientModelBackupSeis1.DisConnect();
MainWindow.mainViewModel.IsBackupSeis1CertSucs = false;
MainWindow.mainViewModel.BackupSeis1ConnectMsgVisibility = Visibility.Visible;
MainWindow.mainViewModel.BackupSeis1ConnectMsg = "连接断开!";
MainWindow.mainViewModel.BackupSeis1ConnectMsgForeground = new SolidColorBrush(Colors.Red);
}));
sql = $"insert into log_record(StationID,RecordTime,Device_Name,Operation_Type,Record) values('1','{DateTime.Now}','海底地震监测基站-备地震仪','通信连接','连接已断开');";
DBHelper.ExecuteNonQuery(sql, 1);
}
Task.Run(new Action(async () =>
{
await Task.Delay(10000);
if (MainWindow.mainViewModel.clientModelBackupSeis1.DoConnect(MainViewModel.SocketInfoBackupSeis1))
{
MainWindow.mainViewModel.IsBackupSeis1CertSucs = false;
MainWindow.mainViewModel.BackupSeis1ConnectMsgVisibility = Visibility.Visible;
MainWindow.mainViewModel.BackupSeis1ConnectMsg = "初步连接,等待消息帧!";
MainWindow.mainViewModel.BackupSeis1ConnectMsgForeground = new SolidColorBrush(Colors.Green);
string record = "初步连接等待消息帧IP" + MainViewModel.SocketInfoBackupSeis1.IP + "Port" + MainViewModel.SocketInfoBackupSeis1.Port;
string sql = $"insert into log_record(StationID,RecordTime,Device_Name,Operation_Type,Record) values('1','{DateTime.Now}','海底地震监测基站-备地震仪','通信连接','{record}');";
DBHelper.ExecuteNonQuery(sql, 1);
}
}));
}
}
else
{
if (isMain)
{
App.Current.Dispatcher.Invoke(() =>
{
MainWindow.mainViewModel.IsMainSeis2CertSucs = false;
MainWindow.mainViewModel.MainSeis2ConnectMsgVisibility = Visibility.Visible;
MainWindow.mainViewModel.MainSeis2ConnectMsg = "认证失败!";
MainWindow.mainViewModel.MainSeis2ConnectMsgForeground = new SolidColorBrush(Colors.Red);
});
if (MainWindow.mainViewModel.clientModelMainSeis2.IsConnected)
{
//发送断开连接消息
MainWindow.mainViewModel.clientModelMainSeis2.SendMessage(CloseByte());
Task.Run(new Action(async () =>
{
await Task.Delay(100);
MainWindow.mainViewModel.clientModelMainSeis2.DisConnect();
MainWindow.mainViewModel.IsMainSeis2CertSucs = false;
MainWindow.mainViewModel.MainSeis2ConnectMsgVisibility = Visibility.Visible;
MainWindow.mainViewModel.MainSeis2ConnectMsg = "连接断开!";
MainWindow.mainViewModel.MainSeis2ConnectMsgForeground = new SolidColorBrush(Colors.Red);
}));
sql = $"insert into log_record(StationID,RecordTime,Device_Name,Operation_Type,Record) values('2','{DateTime.Now}','海底地震监测基站-主地震仪','通信连接','连接已断开');";
DBHelper.ExecuteNonQuery(sql, 1);
}
Task.Run(new Action(async () =>
{
await Task.Delay(10000);
if (MainWindow.mainViewModel.clientModelMainSeis2.DoConnect(MainViewModel.SocketInfoMainSeis2))
{
MainWindow.mainViewModel.IsMainSeis2CertSucs = false;
MainWindow.mainViewModel.MainSeis2ConnectMsgVisibility = Visibility.Visible;
MainWindow.mainViewModel.MainSeis2ConnectMsg = "初步连接,等待消息帧!";
MainWindow.mainViewModel.MainSeis2ConnectMsgForeground = new SolidColorBrush(Colors.Green);
string record = "初步连接等待消息帧IP" + MainViewModel.SocketInfoMainSeis2.IP + "Port" + MainViewModel.SocketInfoMainSeis2.Port;
string sql = $"insert into log_record(StationID,RecordTime,Device_Name,Operation_Type,Record) values('2','{DateTime.Now}','海底地震监测基站-主地震仪','通信连接','{record}');";
DBHelper.ExecuteNonQuery(sql, 1);
}
}));
}
else
{
App.Current.Dispatcher.Invoke(() =>
{
MainWindow.mainViewModel.IsBackupSeis2CertSucs = false;
MainWindow.mainViewModel.BackupSeis2ConnectMsgVisibility = Visibility.Visible;
MainWindow.mainViewModel.BackupSeis2ConnectMsg = "认证失败!";
MainWindow.mainViewModel.BackupSeis2ConnectMsgForeground = new SolidColorBrush(Colors.Red);
});
if (MainWindow.mainViewModel.clientModelBackupSeis2.IsConnected)
{
//发送断开连接消息
MainWindow.mainViewModel.clientModelBackupSeis2.SendMessage(CloseByte());
Task.Run(new Action(async () =>
{
await Task.Delay(100);
MainWindow.mainViewModel.clientModelBackupSeis2.DisConnect();
MainWindow.mainViewModel.IsBackupSeis2CertSucs = false;
MainWindow.mainViewModel.BackupSeis2ConnectMsgVisibility = Visibility.Visible;
MainWindow.mainViewModel.BackupSeis2ConnectMsg = "连接断开!";
MainWindow.mainViewModel.BackupSeis2ConnectMsgForeground = new SolidColorBrush(Colors.Red);
}));
sql = $"insert into log_record(StationID,RecordTime,Device_Name,Operation_Type,Record) values('2','{DateTime.Now}','海底地震监测基站-备地震仪','通信连接','连接已断开');";
DBHelper.ExecuteNonQuery(sql, 1);
}
Task.Run(new Action(async () =>
{
await Task.Delay(10000);
if (MainWindow.mainViewModel.clientModelBackupSeis2.DoConnect(MainViewModel.SocketInfoBackupSeis2))
{
MainWindow.mainViewModel.IsBackupSeis2CertSucs = false;
MainWindow.mainViewModel.BackupSeis2ConnectMsgVisibility = Visibility.Visible;
MainWindow.mainViewModel.BackupSeis2ConnectMsg = "初步连接,等待消息帧!";
MainWindow.mainViewModel.BackupSeis2ConnectMsgForeground = new SolidColorBrush(Colors.Green);
string record = "初步连接等待消息帧IP" + MainViewModel.SocketInfoBackupSeis2.IP + "Port" + MainViewModel.SocketInfoBackupSeis2.Port;
string sql = $"insert into log_record(StationID,RecordTime,Device_Name,Operation_Type,Record) values('2','{DateTime.Now}','海底地震监测基站-备地震仪','通信连接','{record}');";
DBHelper.ExecuteNonQuery(sql, 1);
}
}));
}
}
}
}
else
{
if (Tools.CompareByte(cmdRecv, new byte[] { 0xC0, 0x00 })) //台站参数
{
if (dataRecv.Count == 128) //查询台站参数应答
{
try
{
//台号
int stationNum = BitConverter.ToInt32(new byte[] { dataRecv[3], dataRecv[2], dataRecv[1], dataRecv[0] }, 0);
//台站名称
List<byte> stationNameData = new List<byte>();
for (int i = 4; i < 36; i++)
stationNameData.Add(dataRecv[i]);
string stationName = Encoding.UTF8.GetString(stationNameData.ToArray());
//台名缩写
List<byte> stationNameAbbData = new List<byte>();
for (int i = 36; i < 44; i++)
stationNameAbbData.Add(dataRecv[i]);
string stationNameAbb = Encoding.UTF8.GetString(stationNameAbbData.ToArray());
//地震计总数
short seisNum = BitConverter.ToInt16(new byte[] { dataRecv[45], dataRecv[44] }, 0);
//总通道数
short passNum = BitConverter.ToInt16(new byte[] { dataRecv[47], dataRecv[46] }, 0);
//纬度
int latitude = BitConverter.ToInt16(new byte[] { dataRecv[51], dataRecv[50], dataRecv[49], dataRecv[48] }, 0);
//经度
int longitude = BitConverter.ToInt16(new byte[] { dataRecv[55], dataRecv[54], dataRecv[53], dataRecv[52] }, 0);
//高程
int elevation = BitConverter.ToInt16(new byte[] { dataRecv[59], dataRecv[58], dataRecv[57], dataRecv[56] }, 0);
//起用日期
List<byte> enablingDateList = new List<byte>();
for (int i = 60; i < 92; i++)
enablingDateList.Add(dataRecv[i]);
string enablingDate = Encoding.UTF8.GetString(enablingDateList.ToArray());
//台网标志
string tetworkLogo = Encoding.UTF8.GetString(new byte[] { dataRecv[95], dataRecv[94], dataRecv[93], dataRecv[92] });
//软件编本
List<byte> softVersionList = new List<byte>();
for (int i = 96; i < 128; i++)
softVersionList.Add(dataRecv[i]);
string softVersion = Encoding.UTF8.GetString(softVersionList.ToArray());
//数据存储
sql = $"insert into seismograph_originaldata(StationID,RecordTime,StationNo,StationName," +
$"StationShortName,EarthQuakeCount,ChannelsNo,WD,JD,GaoCheng,StartTime,Station_Id," +
$"Software_Version) values('{id}','{DateTime.Now}','{stationNum}','{stationName}','{stationNameAbb}','{seisNum}','{passNum}','{latitude}','{longitude}','{elevation}','{enablingDate}','{tetworkLogo}','{softVersion}');";
DBHelper.ExecuteNonQuery(sql, 1);
App.Current.Dispatcher.Invoke(() =>
{
//通知到前端
if (id == 1)
{
if (isMain)
MainViewModel.seismometerParameterViewModel1.BackupSeisIsChecked = false;
else
MainViewModel.seismometerParameterViewModel1.BackupSeisIsChecked = true;
MainViewModel.seismometerParameterViewModel1.EarthQuakeParaSet.StationID = stationNum;
MainViewModel.seismometerParameterViewModel1.EarthQuakeParaSet.StationName = stationName;
MainViewModel.seismometerParameterViewModel1.EarthQuakeParaSet.StationShortName = stationNameAbb;
MainViewModel.seismometerParameterViewModel1.EarthQuakeParaSet.EarthQuakeCount = seisNum;
MainViewModel.seismometerParameterViewModel1.EarthQuakeParaSet.ChannelsNo = passNum;
MainViewModel.seismometerParameterViewModel1.EarthQuakeParaSet.WD = latitude;
MainViewModel.seismometerParameterViewModel1.EarthQuakeParaSet.JD = longitude;
MainViewModel.seismometerParameterViewModel1.EarthQuakeParaSet.GaoCheng = elevation;
MainViewModel.seismometerParameterViewModel1.EarthQuakeParaSet.StartTime = enablingDate;
MainViewModel.seismometerParameterViewModel1.EarthQuakeParaSet.Station_Id = tetworkLogo;
MainViewModel.seismometerParameterViewModel1.EarthQuakeParaSet.Software_Version = softVersion;
}
else
{
if (isMain)
MainViewModel.seismometerParameterViewModel2.BackupSeisIsChecked = false;
else
MainViewModel.seismometerParameterViewModel2.BackupSeisIsChecked = true;
MainViewModel.seismometerParameterViewModel2.EarthQuakeParaSet.StationID = stationNum;
MainViewModel.seismometerParameterViewModel2.EarthQuakeParaSet.StationName = stationName;
MainViewModel.seismometerParameterViewModel2.EarthQuakeParaSet.StationShortName = stationNameAbb;
MainViewModel.seismometerParameterViewModel2.EarthQuakeParaSet.EarthQuakeCount = seisNum;
MainViewModel.seismometerParameterViewModel2.EarthQuakeParaSet.ChannelsNo = passNum;
MainViewModel.seismometerParameterViewModel2.EarthQuakeParaSet.WD = latitude;
MainViewModel.seismometerParameterViewModel2.EarthQuakeParaSet.JD = longitude;
MainViewModel.seismometerParameterViewModel2.EarthQuakeParaSet.GaoCheng = elevation;
MainViewModel.seismometerParameterViewModel2.EarthQuakeParaSet.StartTime = enablingDate;
MainViewModel.seismometerParameterViewModel2.EarthQuakeParaSet.Station_Id = tetworkLogo;
MainViewModel.seismometerParameterViewModel2.EarthQuakeParaSet.Software_Version = softVersion;
}
});
}
catch (Exception ex)
{
string content = "地震仪台站参数解析失败," + ex.Message;
string seisDevice = isMain == true ? "主地震仪台站参数解析" : "备地震仪台站参数解析";
sql = $"insert into alarm_run_info(StationID,RecordTime,ParaName,ParaContent) values('{id}','{DateTime.Now}','{seisDevice}','{content}');";
DBHelper.ExecuteNonQuery(sql, 1);
}
}
else if (dataRecv.Count == 2) //设置/读取台站参数应答
{
App.Current.Dispatcher.Invoke(() =>
{
string type = "";
string record = "";
if (id == 1)
{
if (MainViewModel.seismometerParameterViewModel1.EarthQuakeParaSetIsSend) //设置
{
MainViewModel.seismometerParameterViewModel1.EarthQuakeParaSetIsReceived = true;
MainViewModel.seismometerParameterViewModel1.SeisParaMsg = "设置台站参数成功!";
MainViewModel.seismometerParameterViewModel1.timerEarthQuakeParaSet.Stop();
type = "参数设置";
record = "地震仪台站参数设置成功";
}
else
{
MainViewModel.seismometerParameterViewModel1.EarthQuakeParaReadIsReceived = true;
MainViewModel.seismometerParameterViewModel1.SeisParaMsg = "读取台站参数成功!";
MainViewModel.seismometerParameterViewModel1.timerEarthQuakeParaRead.Stop();
type = "参数读取";
record = "地震仪台站参数读取成功";
}
MainViewModel.seismometerParameterViewModel1.SeisParaMsgVisibility = Visibility.Visible;
MainViewModel.seismometerParameterViewModel1.SeisParaMsgForeground = new SolidColorBrush(Colors.Green);
MainViewModel.seismometerParameterViewModel1.timerSeisParaMsgHidden.Start();
MainViewModel.seismometerParameterViewModel1.EarthQuakeParaSetBtnIsEnabled = true;
MainViewModel.seismometerParameterViewModel1.EarthQuakeParaReadBtnIsEnabled = true;
}
else
{
if (MainViewModel.seismometerParameterViewModel2.EarthQuakeParaSetIsSend) //设置
{
MainViewModel.seismometerParameterViewModel2.EarthQuakeParaSetIsReceived = true;
MainViewModel.seismometerParameterViewModel2.SeisParaMsg = "设置台站参数成功!";
MainViewModel.seismometerParameterViewModel2.timerEarthQuakeParaSet.Stop();
type = "参数设置";
record = "地震仪台站参数设置成功";
}
else
{
MainViewModel.seismometerParameterViewModel2.EarthQuakeParaReadIsReceived = true;
MainViewModel.seismometerParameterViewModel2.SeisParaMsg = "读取台站参数成功!";
MainViewModel.seismometerParameterViewModel2.timerEarthQuakeParaRead.Stop();
type = "参数读取";
record = "地震仪台站参数读取成功";
}
MainViewModel.seismometerParameterViewModel2.SeisParaMsgVisibility = Visibility.Visible;
MainViewModel.seismometerParameterViewModel2.SeisParaMsgForeground = new SolidColorBrush(Colors.Green);
MainViewModel.seismometerParameterViewModel2.timerSeisParaMsgHidden.Start();
MainViewModel.seismometerParameterViewModel2.EarthQuakeParaSetBtnIsEnabled = true;
MainViewModel.seismometerParameterViewModel2.EarthQuakeParaReadBtnIsEnabled = true;
}
string seisDevice = isMain == true ? "海底地震监测基站-主地震仪" : "海底地震监测基站-备地震仪";
sql = $"insert into log_record(StationID,RecordTime,Device_Name,Operation_Type,Record) values('{id}','{DateTime.Now}','{seisDevice}','{type}','{record}');";
DBHelper.ExecuteNonQuery(sql, 1);
});
}
}
else if (Tools.CompareByte(cmdRecv, new byte[] { 0xC0, 0x50 })) //启动地震计调零
{
if (dataRecv.Count != 2)
{
string content = "地震仪启动调零回复长度校验失败";
sql = $"insert into alarm_run_info(StationID,RecordTime,ParaName,ParaContent) values('{id}','{DateTime.Now}','地震仪数据校验','{content}');";
DBHelper.ExecuteNonQuery(sql, 1);
return;
}
int seisNum = BitConverter.ToInt16(new byte[] { dataRecv[1], dataRecv[0] }, 0);
App.Current.Dispatcher.Invoke(() =>
{
MainWindow.mainViewModel.SeisZeroSetStartIsReceived = true;
MainWindow.mainViewModel.OpenSetMsgVisibility = Visibility.Visible;
MainWindow.mainViewModel.OpenSetMsg = "调零开启成功!";
MainWindow.mainViewModel.timerOpenSetMsgHidden.Start();
MainWindow.mainViewModel.OpenSetMsgForeground = new SolidColorBrush(Colors.Green);
MainWindow.mainViewModel.timerSeisZeroSetStart.Stop();
MainWindow.mainViewModel.ImageSourceSetZero = (ImageSource)Application.Current.FindResource("DeviceOn");
MainWindow.mainViewModel.SeisZeroSetStartButtonIsEnabled = true;
MainWindow.mainViewModel.SeisZeroSetStopButtonIsEnabled = true;
});
string name = "";
if (isMain)
name = "MainSeisSetZero";
else
name = "BackupSeisSetZero";
//存储历史设置
sql = $"insert into switch_info_his(StationID,RecordTime,SwitchName,SwitchState) values('{id}','{DateTime.Now}','{name}','On');";
DBHelper.ExecuteNonQuery(sql, 1);
//存储最新设置
sql = $"update switch_info set SwitchState='On',RecordTime='{DateTime.Now}' where SwitchName='{name}' and StationID={id};";
DBHelper.ExecuteNonQuery(sql, 1);
string seisDevice = isMain == true ? "海底地震监测基站-主地震仪" : "海底地震监测基站-备地震仪";
sql = $"insert into log_record(StationID,RecordTime,Device_Name,Operation_Type,Record) values('{id}','{DateTime.Now}','{seisDevice}','系统控制','地震仪调零开启成功');";
DBHelper.ExecuteNonQuery(sql, 1);
}
else if (Tools.CompareByte(cmdRecv, new byte[] { 0xC0, 0x51 })) //停止地震计调零
{
if (dataRecv.Count != 2)
{
string content = "地震仪停止调零回复长度校验失败";
sql = $"insert into alarm_run_info(StationID,RecordTime,ParaName,ParaContent) values('{id}','{DateTime.Now}','地震仪数据校验','{content}');";
DBHelper.ExecuteNonQuery(sql, 1);
return;
}
int seisNum = BitConverter.ToInt16(new byte[] { dataRecv[1], dataRecv[0] }, 0);
App.Current.Dispatcher.Invoke(() =>
{
MainWindow.mainViewModel.SeisZeroSetStopIsReceived = true;
MainWindow.mainViewModel.CloseSetMsgVisibility = Visibility.Visible;
MainWindow.mainViewModel.CloseSetMsg = "调零停止成功!";
MainWindow.mainViewModel.timerCloseSetMsgHidden.Start();
MainWindow.mainViewModel.CloseSetMsgForeground = new SolidColorBrush(Colors.Green);
MainWindow.mainViewModel.timerSeisZeroSetStop.Stop();
MainWindow.mainViewModel.ImageSourceSetZero = (ImageSource)Application.Current.FindResource("DeviceOff");
MainWindow.mainViewModel.SeisZeroSetStopButtonIsEnabled = true;
MainWindow.mainViewModel.SeisZeroSetStartButtonIsEnabled = true;
});
//存储状态
string name = "";
if (isMain)
name = "MainSeisSetZero";
else
name = "BackupSeisSetZero";
//存储历史设置
sql = $"insert into switch_info_his(StationID,RecordTime,SwitchName,SwitchState) values('{id}','{DateTime.Now}','{name}','Off');";
DBHelper.ExecuteNonQuery(sql, 1);
//存储最新设置
sql = $"update switch_info set SwitchState='Off',RecordTime='{DateTime.Now}' where SwitchName='{name}' and StationID={id};";
DBHelper.ExecuteNonQuery(sql, 1);
string seisDevice = isMain == true ? "海底地震监测基站-主地震仪" : "海底地震监测基站-备地震仪";
sql = $"insert into log_record(StationID,RecordTime,Device_Name,Operation_Type,Record) values('{id}','{DateTime.Now}','{seisDevice}','系统控制','地震仪调零停止成功');";
DBHelper.ExecuteNonQuery(sql, 1);
}
else if (Tools.CompareByte(cmdRecv, new byte[] { 0xC0, 0x66 })) //运行状态信息
{
if (dataRecv.Count != 56)
{
string content = "地震仪运行状态数据长度校验失败";
sql = $"insert into alarm_run_info(StationID,RecordTime,ParaName,ParaContent) values('{id}','{DateTime.Now}','地震仪数据校验','{content}');";
DBHelper.ExecuteNonQuery(sql, 1);
return;
}
try
{
//外部供电电压
float supplyVoltage = BitConverter.ToInt16(new byte[] { dataRecv[1], dataRecv[0] }, 0) * 0.1f;
//后备电池电压
float batteryVoltage = BitConverter.ToInt16(new byte[] { dataRecv[3], dataRecv[2] }, 0) * 0.1f;
//压力
int pressure = BitConverter.ToInt16(new byte[] { dataRecv[5], dataRecv[4] }, 0);
//温度
float temperature = BitConverter.ToInt16(new byte[] { dataRecv[7], dataRecv[6] }, 0) * 0.1f;
//地震计倾斜角度
float tiltAngleSeis = BitConverter.ToInt16(new byte[] { dataRecv[9], dataRecv[8] }, 0) * 0.1f;
//OBS 倾斜角度
float tiltAngleOBS = BitConverter.ToInt16(new byte[] { dataRecv[11], dataRecv[10] }, 0) * 0.1f;
//钟差
int clockDeviation = BitConverter.ToInt16(new byte[] { dataRecv[13], dataRecv[12] }, 0);
//频差
float freDifference = BitConverter.ToInt16(new byte[] { dataRecv[15], dataRecv[14] }, 0) * 0.01f;
//CF 卡总空间
int totalSpaceCF = BitConverter.ToInt16(new byte[] { dataRecv[19], dataRecv[18], dataRecv[17], dataRecv[16] }, 0);
//CF 卡可用空间
int canUseSpaceCF = BitConverter.ToInt16(new byte[] { dataRecv[23], dataRecv[22], dataRecv[21], dataRecv[20] }, 0);
//SD1 卡总空间
int totalSpaceSD1 = BitConverter.ToInt16(new byte[] { dataRecv[27], dataRecv[26], dataRecv[25], dataRecv[24] }, 0);
//SD1 卡可用空间
int canUseSpaceSD1 = BitConverter.ToInt16(new byte[] { dataRecv[31], dataRecv[30], dataRecv[29], dataRecv[28] }, 0);
//SD2 卡总空间
int totalSpaceSD2 = BitConverter.ToInt16(new byte[] { dataRecv[35], dataRecv[34], dataRecv[33], dataRecv[32] }, 0);
//SD2 卡可用空间
int canUseSpaceSD2 = BitConverter.ToInt16(new byte[] { dataRecv[39], dataRecv[38], dataRecv[37], dataRecv[36] }, 0);
//地震计 U 零点
float zeroPointU = BitConverter.ToInt16(new byte[] { dataRecv[43], dataRecv[42], dataRecv[41], dataRecv[40] }, 0) * 0.1f;
//地震计 V 零点
float zeroPointV = BitConverter.ToInt16(new byte[] { dataRecv[47], dataRecv[46], dataRecv[45], dataRecv[44] }, 0) * 0.1f;
//地震计 W 零点
float zeroPointW = BitConverter.ToInt16(new byte[] { dataRecv[51], dataRecv[50], dataRecv[49], dataRecv[48] }, 0) * 0.1f;
//寻北角度
float northSeekingAngle = BitConverter.ToInt16(new byte[] { dataRecv[55], dataRecv[54], dataRecv[53], dataRecv[52] }, 0) * 0.1f;
//数据存储
sql = $"insert into seismograph_state(StationID,RecordTime,Out_Vol,Backup_Vol,Pre,Tem," +
$"Sei_Tilt_Angle,OBS_Tilt_Angle,Species_Dif,Frequency_Dif,CF_Total_Cap," +
$"CF_Usable_Cap,SD_Total_Cap1,SD_Usable_Cap1,SD_Total_Cap2,SD_Usable_Cap2," +
$"Sei_U_Point,Sei_V_Point,Sei_W_Point,North_Angle) values('{id}','{DateTime.Now}','{supplyVoltage}','{batteryVoltage}','{pressure}'," +
$"'{temperature}','{tiltAngleSeis}','{tiltAngleOBS}','{clockDeviation}'," +
$"'{freDifference}','{totalSpaceCF}','{canUseSpaceCF}','{totalSpaceSD1}'," +
$"'{canUseSpaceSD1}','{totalSpaceSD2}','{canUseSpaceSD2}','{zeroPointU}'," +
$"'{zeroPointV}','{zeroPointW}','{northSeekingAngle}');";
DBHelper.ExecuteNonQuery(sql, 1);
}
catch (Exception ex)
{
string content = "地震仪状态数据解析失败," + ex.Message;
sql = $"insert into alarm_run_info(StationID,RecordTime,ParaName,ParaContent) values('{id}','{DateTime.Now}','地震仪数据解析','{content}');";
DBHelper.ExecuteNonQuery(sql, 1);
}
}
else if (Tools.CompareByte(cmdRecv, new byte[] { 0xC0, 0x90 })) //启动地震计调平
{
if (dataRecv.Count != 2)
{
string content = "地震仪启动调平回复长度校验失败";
sql = $"insert into alarm_run_info(StationID,RecordTime,ParaName,ParaContent) values('{id}','{DateTime.Now}','地震仪数据校验','{content}');";
DBHelper.ExecuteNonQuery(sql, 1);
return;
}
int seisNum = BitConverter.ToInt16(new byte[] { dataRecv[1], dataRecv[0] }, 0);
App.Current.Dispatcher.Invoke(() =>
{
MainWindow.mainViewModel.SeisLevelSetStartIsReceived = true;
MainWindow.mainViewModel.OpenSetMsgVisibility = Visibility.Visible;
MainWindow.mainViewModel.OpenSetMsg = "调平开启成功!";
MainWindow.mainViewModel.timerOpenSetMsgHidden.Start();
MainWindow.mainViewModel.OpenSetMsgForeground = new SolidColorBrush(Colors.Green);
MainWindow.mainViewModel.timerSeisLevelSetStart.Stop();
MainWindow.mainViewModel.ImageSourceSetLevel = (ImageSource)Application.Current.FindResource("DeviceOn");
MainWindow.mainViewModel.SeisLevelSetStartButtonIsEnabled = true;
MainWindow.mainViewModel.SeisLevelSetStopButtonIsEnabled = true;
});
//存储状态
string name = "";
if (isMain)
name = "MainSeisSetLevel";
else
name = "BackupSeisSetLevel";
//存储历史设置
sql = $"insert into switch_info_his(StationID,RecordTime,SwitchName,SwitchState) values('{id}','{DateTime.Now}','{name}','On');";
DBHelper.ExecuteNonQuery(sql, 1);
//存储最新设置
sql = $"update switch_info set SwitchState='On',RecordTime='{DateTime.Now}' where SwitchName='{name}' and StationID={id};";
DBHelper.ExecuteNonQuery(sql, 1);
string seisDevice = isMain == true ? "海底地震监测基站-主地震仪" : "海底地震监测基站-备地震仪";
sql = $"insert into log_record(StationID,RecordTime,Device_Name,Operation_Type,Record) values('{id}','{DateTime.Now}','{seisDevice}','系统控制','地震仪调平开启成功');";
DBHelper.ExecuteNonQuery(sql, 1);
}
else if (Tools.CompareByte(cmdRecv, new byte[] { 0xC0, 0x91 })) //停止地震计调平
{
if (dataRecv.Count != 2)
{
string content = "地震仪停止调平回复长度校验失败";
sql = $"insert into alarm_run_info(StationID,RecordTime,ParaName,ParaContent) values('{id}','{DateTime.Now}','地震仪数据校验','{content}');";
DBHelper.ExecuteNonQuery(sql, 1);
return;
}
int seisNum = BitConverter.ToInt16(new byte[] { dataRecv[1], dataRecv[0] }, 0);
App.Current.Dispatcher.Invoke(() =>
{
MainWindow.mainViewModel.SeisLevelSetStopIsReceived = true;
MainWindow.mainViewModel.CloseSetMsgVisibility = Visibility.Visible;
MainWindow.mainViewModel.CloseSetMsg = "调平停止成功!";
MainWindow.mainViewModel.timerCloseSetMsgHidden.Start();
MainWindow.mainViewModel.CloseSetMsgForeground = new SolidColorBrush(Colors.Green);
MainWindow.mainViewModel.timerSeisLevelSetStop.Stop();
MainWindow.mainViewModel.ImageSourceSetLevel = (ImageSource)Application.Current.FindResource("DeviceOff");
MainWindow.mainViewModel.SeisLevelSetStopButtonIsEnabled = true;
MainWindow.mainViewModel.SeisLevelSetStartButtonIsEnabled = true;
});
//存储状态
string name = "";
if (isMain)
name = "MainSeisSetLevel";
else
name = "BackupSeisSetLevel";
//存储历史设置
sql = $"insert into switch_info_his(StationID,RecordTime,SwitchName,SwitchState) values('{id}','{DateTime.Now}','{name}','Off');";
DBHelper.ExecuteNonQuery(sql, 1);
//存储最新设置
sql = $"update switch_info set SwitchState='Off',RecordTime='{DateTime.Now}' where SwitchName='{name}' and StationID={id};";
DBHelper.ExecuteNonQuery(sql, 1);
string seisDevice = isMain == true ? "海底地震监测基站-主地震仪" : "海底地震监测基站-备地震仪";
sql = $"insert into log_record(StationID,RecordTime,Device_Name,Operation_Type,Record) values('{id}','{DateTime.Now}','{seisDevice}','系统控制','地震仪调平停止成功');";
DBHelper.ExecuteNonQuery(sql, 1);
}
}
}
}
}