1 地震仪告警记录中故障次数隐藏;电力载波机和光电交换机的供电状态隐藏; 2 除漏水和保护板事件的数据按照浮点数解析,别的按照整数解析; 3 解决TCP Server和Client存在的问题,包括无法监测到客户端连接,无法监测到服务端断开等问题;
1011 lines
63 KiB
C#
1011 lines
63 KiB
C#
using HandyControl.Controls;
|
||
using JiangsuEarthquake.Common;
|
||
using JiangsuEarthquake.DataAccess;
|
||
using JiangsuEarthquake.ViewModels;
|
||
using System;
|
||
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]);
|
||
if (!Tools.CompareByte(new byte[] { byteList[^2], byteList[^1] }, Tools.ComputeChecksum(checkCode.ToArray())))
|
||
{
|
||
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) //有空闲连接时应答
|
||
{
|
||
//发送用户认证帧
|
||
cmdSend = new byte[] { 0x77, 0x00 };
|
||
lengthSend = new byte[] { 0x00, 0x04 };
|
||
|
||
string User = "Admin";
|
||
byte[] userByte = System.Text.Encoding.ASCII.GetBytes(User);
|
||
byte[] userByteArray = new byte[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 = System.Text.Encoding.ASCII.GetBytes(Password);
|
||
byte[] passwordByteArray = new byte[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(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) //没有空闲连接
|
||
{
|
||
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) //认证成功
|
||
{
|
||
//连接成功
|
||
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)
|
||
{
|
||
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
|
||
{
|
||
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)
|
||
{
|
||
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
|
||
{
|
||
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);
|
||
|
||
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);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|