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

303 lines
18 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

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

using JiangsuEarthquake.Common;
using JiangsuEarthquake.DataAccess;
using JiangsuEarthquake.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;
}
}
}
}
}