303 lines
18 KiB
C#
303 lines
18 KiB
C#
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;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|