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 checkByte { get; set; } = new List(); //校验码Byte private byte dataAreaBytes { get; set; } //数据区字节数 private List dataArea { get; set; } = new List(); //数据区 public void ParsingData(List 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; } } } } }