20240301_JSEQ_upperpc/JiangsuEarthquakeNowUI/JiangsuEarthquake/Models/ZSWLModel.cs

303 lines
18 KiB
C#
Raw Normal View History

2024-11-01 07:54:08 +00:00
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.Media;
using System.Windows;
using Application = System.Windows.Application;
namespace JiangsuEarthquake.Models
{
public class ZSWLModel
{
private byte fromDeviceAddress { get; set; } //从设备地址
private byte functionCode { get; set; } //功能码
private byte[] startingRegisterAddress { get; set; } = new byte[2]; //起始寄存器地址
private byte[] registerNumber { get; set; } = new byte[2]; //寄存器个数
private byte[] checkCodeCRC { get; set; } = new byte[2]; //校验码
private List<byte> checkByte { get; set; } = new List<byte>(); //校验码Byte
private byte dataAreaBytes { get; set; } //数据区字节数
private List<byte> dataArea { get; set; } = new List<byte>(); //数据区
public void ParsingData(List<byte> byteList, int id)
{
if (byteList.Count == 0)
return;
//原始数据存储
string sql = $"insert into boosterstation_switch_originaldata(StationID,RecordTime,OriginalData) values('{id}','{DateTime.Now}','{BitConverter.ToString(byteList.ToArray())}');";
DBHelper.ExecuteNonQuery(sql, 1);
checkByte.Clear();
//CRC校验
for (int i = 0; i < byteList.Count - 2; i++)
checkByte.Add(byteList[i]);
checkCodeCRC = Tools.CRCCalcRev(checkByte.ToArray());
//CRC校验失败
if (!Tools.CompareByte(checkCodeCRC, new byte[2] { byteList[byteList.Count - 2], byteList[byteList.Count - 1] }))
{
string content = "升压站电控通信系统继电控制数据CRC校验失败";
sql = $"insert into alarm_run_info(StationID,RecordTime,ParaName,ParaContent) values('{id}','{DateTime.Now}','升压站电控通信系统继电控制数据校验','{content}');";
DBHelper.ExecuteNonQuery(sql, 1);
return;
}
if (byteList[1] == 0x10) //写多个
{
if (8 != byteList.Count)
{
string content = "升压站电控通信系统状态数据长度校验失败";
sql = $"insert into alarm_run_info(StationID,RecordTime,ParaName,ParaContent) values('{id}','{DateTime.Now}','升压站电控通信系统数据校验','{content}');";
DBHelper.ExecuteNonQuery(sql, 1);
return;
}
byte sensorAddress = byteList[3]; //起始地址
switch(sensorAddress)
{
case 0x14:
string state;
if (!MainWindow.mainViewModel.IsBoosterStationPower1Open && MainWindow.mainViewModel.IsBoosterStationPower1Close)
{
App.Current.Dispatcher.Invoke(() =>
{
if (id == 1)
MainViewModel.boosterStationStateModel1.BoosterStation_Device1 = (ImageSource)Application.Current.FindResource("DeviceOff");
else
MainViewModel.boosterStationStateModel2.BoosterStation_Device1 = (ImageSource)Application.Current.FindResource("DeviceOff");
MainWindow.mainViewModel.BoosterStationPower1OffIsReceived = true;
MainWindow.mainViewModel.BoosterStationPower1OpenBtnIsEnabled = true;
MainWindow.mainViewModel.BoosterStationPower1CloseBtnIsEnabled = true;
MainWindow.mainViewModel.timerBoosterStationPower1Off.Stop();
MainWindow.mainViewModel.BoosterStationPower1MsgVisibility = Visibility.Visible;
MainWindow.mainViewModel.BoosterStationPower1Msg = "设备1电源关闭成功";
MainWindow.mainViewModel.timerBoosterStationPower1MsgHidden.Start();
MainWindow.mainViewModel.BoosterStationPower1MsgForeground = new SolidColorBrush(Colors.Green);
});
state = "Off";
}
else if (MainWindow.mainViewModel.IsBoosterStationPower1Open && !MainWindow.mainViewModel.IsBoosterStationPower1Close)
{
App.Current.Dispatcher.Invoke(() =>
{
if (id == 1)
MainViewModel.boosterStationStateModel1.BoosterStation_Device1 = (ImageSource)Application.Current.FindResource("DeviceOn");
else
MainViewModel.boosterStationStateModel2.BoosterStation_Device1 = (ImageSource)Application.Current.FindResource("DeviceOn");
MainWindow.mainViewModel.BoosterStationPower1OnIsReceived = true;
MainWindow.mainViewModel.BoosterStationPower1OpenBtnIsEnabled = true;
MainWindow.mainViewModel.BoosterStationPower1CloseBtnIsEnabled = true;
MainWindow.mainViewModel.timerBoosterStationPower1Off.Stop();
MainWindow.mainViewModel.BoosterStationPower1MsgVisibility = Visibility.Visible;
MainWindow.mainViewModel.BoosterStationPower1Msg = "设备1电源开启成功";
MainWindow.mainViewModel.timerBoosterStationPower1MsgHidden.Start();
MainWindow.mainViewModel.BoosterStationPower1MsgForeground = new SolidColorBrush(Colors.Green);
});
state = "On";
}
else
break;
//存储历史设置
sql = $"insert into switch_info_his(StationID,RecordTime,SwitchName,SwitchState) values('{id}','{DateTime.Now}','BoosterStationPower1','{state}');";
DBHelper.ExecuteNonQuery(sql, 1);
//存储最新设置
sql = $"update switch_info set SwitchState='{state}',RecordTime='{DateTime.Now}' where SwitchName='BoosterStationPower1' and StationID={id};";
DBHelper.ExecuteNonQuery(sql, 1);
break;
case 0x15:
if (!MainWindow.mainViewModel.IsBoosterStationPower2Open && MainWindow.mainViewModel.IsBoosterStationPower2Close)
{
App.Current.Dispatcher.Invoke(() =>
{
if (id == 1)
MainViewModel.boosterStationStateModel1.BoosterStation_Device2 = (ImageSource)Application.Current.FindResource("DeviceOff");
else
MainViewModel.boosterStationStateModel2.BoosterStation_Device2 = (ImageSource)Application.Current.FindResource("DeviceOff");
MainWindow.mainViewModel.BoosterStationPower2OffIsReceived = true;
MainWindow.mainViewModel.BoosterStationPower2OpenBtnIsEnabled = true;
MainWindow.mainViewModel.BoosterStationPower2CloseBtnIsEnabled = true;
MainWindow.mainViewModel.timerBoosterStationPower2Off.Stop();
MainWindow.mainViewModel.BoosterStationPower2MsgVisibility = Visibility.Visible;
MainWindow.mainViewModel.BoosterStationPower2Msg = "设备2电源关闭成功";
MainWindow.mainViewModel.timerBoosterStationPower2MsgHidden.Start();
MainWindow.mainViewModel.BoosterStationPower2MsgForeground = new SolidColorBrush(Colors.Green);
});
state = "Off";
}
else if (MainWindow.mainViewModel.IsBoosterStationPower2Open && !MainWindow.mainViewModel.IsBoosterStationPower2Close)
{
App.Current.Dispatcher.Invoke(() =>
{
if (id == 1)
MainViewModel.boosterStationStateModel1.BoosterStation_Device2 = (ImageSource)Application.Current.FindResource("DeviceOn");
else
MainViewModel.boosterStationStateModel2.BoosterStation_Device2 = (ImageSource)Application.Current.FindResource("DeviceOn");
MainWindow.mainViewModel.BoosterStationPower2OnIsReceived = true;
MainWindow.mainViewModel.BoosterStationPower2OpenBtnIsEnabled = true;
MainWindow.mainViewModel.BoosterStationPower2CloseBtnIsEnabled = true;
MainWindow.mainViewModel.timerBoosterStationPower2Off.Stop();
MainWindow.mainViewModel.BoosterStationPower2MsgVisibility = Visibility.Visible;
MainWindow.mainViewModel.BoosterStationPower2Msg = "设备2电源开启成功";
MainWindow.mainViewModel.timerBoosterStationPower2MsgHidden.Start();
MainWindow.mainViewModel.BoosterStationPower2MsgForeground = new SolidColorBrush(Colors.Green);
});
state = "On";
}
else
break;
//存储历史设置
sql = $"insert into switch_info_his(StationID,RecordTime,SwitchName,SwitchState) values('{id}','{DateTime.Now}','BoosterStationPower2','{state}');";
DBHelper.ExecuteNonQuery(sql, 1);
//存储最新设置
sql = $"update switch_info set SwitchState='{state}',RecordTime='{DateTime.Now}' where SwitchName='BoosterStationPower2' and StationID={id};";
DBHelper.ExecuteNonQuery(sql, 1);
break;
case 0x16:
if (!MainWindow.mainViewModel.IsBoosterStationPower3Open && MainWindow.mainViewModel.IsBoosterStationPower3Close)
{
App.Current.Dispatcher.Invoke(() =>
{
if (id == 1)
MainViewModel.boosterStationStateModel1.BoosterStation_Device3 = (ImageSource)Application.Current.FindResource("DeviceOff");
else
MainViewModel.boosterStationStateModel2.BoosterStation_Device3 = (ImageSource)Application.Current.FindResource("DeviceOff");
MainWindow.mainViewModel.BoosterStationPower3OffIsReceived = true;
MainWindow.mainViewModel.BoosterStationPower3OpenBtnIsEnabled = true;
MainWindow.mainViewModel.BoosterStationPower3CloseBtnIsEnabled = true;
MainWindow.mainViewModel.timerBoosterStationPower3Off.Stop();
MainWindow.mainViewModel.BoosterStationPower3MsgVisibility = Visibility.Visible;
MainWindow.mainViewModel.BoosterStationPower3Msg = "设备3电源关闭成功";
MainWindow.mainViewModel.timerBoosterStationPower3MsgHidden.Start();
MainWindow.mainViewModel.BoosterStationPower3MsgForeground = new SolidColorBrush(Colors.Green);
});
state = "Off";
}
else if (MainWindow.mainViewModel.IsBoosterStationPower3Open && !MainWindow.mainViewModel.IsBoosterStationPower3Close)
{
App.Current.Dispatcher.Invoke(() =>
{
if (id == 1)
MainViewModel.boosterStationStateModel1.BoosterStation_Device3 = (ImageSource)Application.Current.FindResource("DeviceOn");
else
MainViewModel.boosterStationStateModel2.BoosterStation_Device3 = (ImageSource)Application.Current.FindResource("DeviceOn");
MainWindow.mainViewModel.BoosterStationPower3OnIsReceived = true;
MainWindow.mainViewModel.BoosterStationPower3OpenBtnIsEnabled = true;
MainWindow.mainViewModel.BoosterStationPower3CloseBtnIsEnabled = true;
MainWindow.mainViewModel.timerBoosterStationPower3Off.Stop();
MainWindow.mainViewModel.BoosterStationPower3MsgVisibility = Visibility.Visible;
MainWindow.mainViewModel.BoosterStationPower3Msg = "设备3电源开启成功";
MainWindow.mainViewModel.timerBoosterStationPower3MsgHidden.Start();
MainWindow.mainViewModel.BoosterStationPower3MsgForeground = new SolidColorBrush(Colors.Green);
});
state = "On";
}
else
break;
//存储历史设置
sql = $"insert into switch_info_his(StationID,RecordTime,SwitchName,SwitchState) values('{id}','{DateTime.Now}','BoosterStationPower3','{state}');";
DBHelper.ExecuteNonQuery(sql, 1);
//存储最新设置
sql = $"update switch_info set SwitchState='{state}',RecordTime='{DateTime.Now}' where SwitchName='BoosterStationPower3' and StationID={id};";
DBHelper.ExecuteNonQuery(sql, 1);
break;
case 0x17:
if (!MainWindow.mainViewModel.IsBoosterStationPower4Open && MainWindow.mainViewModel.IsBoosterStationPower4Close)
{
App.Current.Dispatcher.Invoke(() =>
{
if (id == 1)
MainViewModel.boosterStationStateModel1.BoosterStation_Device4 = (ImageSource)Application.Current.FindResource("DeviceOff");
else
MainViewModel.boosterStationStateModel2.BoosterStation_Device4 = (ImageSource)Application.Current.FindResource("DeviceOff");
MainWindow.mainViewModel.BoosterStationPower4OffIsReceived = true;
MainWindow.mainViewModel.BoosterStationPower4OpenBtnIsEnabled = true;
MainWindow.mainViewModel.BoosterStationPower4CloseBtnIsEnabled = true;
MainWindow.mainViewModel.timerBoosterStationPower4Off.Stop();
MainWindow.mainViewModel.BoosterStationPower4MsgVisibility = Visibility.Visible;
MainWindow.mainViewModel.BoosterStationPower4Msg = "设备4电源关闭成功";
MainWindow.mainViewModel.timerBoosterStationPower4MsgHidden.Start();
MainWindow.mainViewModel.BoosterStationPower4MsgForeground = new SolidColorBrush(Colors.Green);
});
state = "Off";
}
else if (MainWindow.mainViewModel.IsBoosterStationPower4Open && !MainWindow.mainViewModel.IsBoosterStationPower4Close)
{
App.Current.Dispatcher.Invoke(() =>
{
if (id == 1)
MainViewModel.boosterStationStateModel1.BoosterStation_Device4 = (ImageSource)Application.Current.FindResource("DeviceOn");
else
MainViewModel.boosterStationStateModel2.BoosterStation_Device4 = (ImageSource)Application.Current.FindResource("DeviceOn");
MainWindow.mainViewModel.BoosterStationPower4OnIsReceived = true;
MainWindow.mainViewModel.BoosterStationPower4OpenBtnIsEnabled = true;
MainWindow.mainViewModel.BoosterStationPower4CloseBtnIsEnabled = true;
MainWindow.mainViewModel.timerBoosterStationPower4Off.Stop();
MainWindow.mainViewModel.BoosterStationPower4MsgVisibility = Visibility.Visible;
MainWindow.mainViewModel.BoosterStationPower4Msg = "设备4电源开启成功";
MainWindow.mainViewModel.timerBoosterStationPower4MsgHidden.Start();
MainWindow.mainViewModel.BoosterStationPower4MsgForeground = new SolidColorBrush(Colors.Green);
});
state = "On";
}
else
break;
//存储历史设置
sql = $"insert into switch_info_his(StationID,RecordTime,SwitchName,SwitchState) values('{id}','{DateTime.Now}','BoosterStationPower4','{state}');";
DBHelper.ExecuteNonQuery(sql, 1);
//存储最新设置
sql = $"update switch_info set SwitchState='{state}',RecordTime='{DateTime.Now}' where SwitchName='BoosterStationPower4' and StationID={id};";
DBHelper.ExecuteNonQuery(sql, 1);
break;
}
}
}
}
}