diff --git a/JiangsuEarthquake/.vs/JiangsuEarthquake/v17/.suo b/JiangsuEarthquake/.vs/JiangsuEarthquake/v17/.suo index 70532b0..eda122d 100644 Binary files a/JiangsuEarthquake/.vs/JiangsuEarthquake/v17/.suo and b/JiangsuEarthquake/.vs/JiangsuEarthquake/v17/.suo differ diff --git a/JiangsuEarthquake/.vs/JiangsuEarthquake/v17/DocumentLayout.json b/JiangsuEarthquake/.vs/JiangsuEarthquake/v17/DocumentLayout.json index 32b182f..a2d8a1b 100644 --- a/JiangsuEarthquake/.vs/JiangsuEarthquake/v17/DocumentLayout.json +++ b/JiangsuEarthquake/.vs/JiangsuEarthquake/v17/DocumentLayout.json @@ -2,14 +2,14 @@ "Version": 1, "WorkspaceRootPath": "F:\\Code\\JSEQ\\20240301_JSEQ_upperpc\\JiangsuEarthquake\\", "Documents": [ - { - "AbsoluteMoniker": "D:0:0:{51CD2C1B-B7CD-4AC0-8087-846E14D316AD}|JiangsuEarthquake\\JiangsuEarthquake.csproj|f:\\code\\jseq\\20240301_jseq_upperpc\\jiangsuearthquake\\jiangsuearthquake\\models\\volcurcollectormodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", - "RelativeMoniker": "D:0:0:{51CD2C1B-B7CD-4AC0-8087-846E14D316AD}|JiangsuEarthquake\\JiangsuEarthquake.csproj|solutionrelative:jiangsuearthquake\\models\\volcurcollectormodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" - }, { "AbsoluteMoniker": "D:0:0:{51CD2C1B-B7CD-4AC0-8087-846E14D316AD}|JiangsuEarthquake\\JiangsuEarthquake.csproj|f:\\code\\jseq\\20240301_jseq_upperpc\\jiangsuearthquake\\jiangsuearthquake\\models\\lowercomputermodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{51CD2C1B-B7CD-4AC0-8087-846E14D316AD}|JiangsuEarthquake\\JiangsuEarthquake.csproj|solutionrelative:jiangsuearthquake\\models\\lowercomputermodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, + { + "AbsoluteMoniker": "D:0:0:{51CD2C1B-B7CD-4AC0-8087-846E14D316AD}|JiangsuEarthquake\\JiangsuEarthquake.csproj|f:\\code\\jseq\\20240301_jseq_upperpc\\jiangsuearthquake\\jiangsuearthquake\\models\\seismographmodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{51CD2C1B-B7CD-4AC0-8087-846E14D316AD}|JiangsuEarthquake\\JiangsuEarthquake.csproj|solutionrelative:jiangsuearthquake\\models\\seismographmodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, { "AbsoluteMoniker": "D:0:0:{51CD2C1B-B7CD-4AC0-8087-846E14D316AD}|JiangsuEarthquake\\JiangsuEarthquake.csproj|f:\\code\\jseq\\20240301_jseq_upperpc\\jiangsuearthquake\\jiangsuearthquake\\viewmodels\\mainviewmodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{51CD2C1B-B7CD-4AC0-8087-846E14D316AD}|JiangsuEarthquake\\JiangsuEarthquake.csproj|solutionrelative:jiangsuearthquake\\viewmodels\\mainviewmodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" @@ -18,6 +18,10 @@ "AbsoluteMoniker": "D:0:0:{51CD2C1B-B7CD-4AC0-8087-846E14D316AD}|JiangsuEarthquake\\JiangsuEarthquake.csproj|f:\\code\\jseq\\20240301_jseq_upperpc\\jiangsuearthquake\\jiangsuearthquake\\viewmodels\\boosterstationstatedataviewmodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "RelativeMoniker": "D:0:0:{51CD2C1B-B7CD-4AC0-8087-846E14D316AD}|JiangsuEarthquake\\JiangsuEarthquake.csproj|solutionrelative:jiangsuearthquake\\viewmodels\\boosterstationstatedataviewmodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" }, + { + "AbsoluteMoniker": "D:0:0:{51CD2C1B-B7CD-4AC0-8087-846E14D316AD}|JiangsuEarthquake\\JiangsuEarthquake.csproj|f:\\code\\jseq\\20240301_jseq_upperpc\\jiangsuearthquake\\jiangsuearthquake\\models\\volcurcollectormodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{51CD2C1B-B7CD-4AC0-8087-846E14D316AD}|JiangsuEarthquake\\JiangsuEarthquake.csproj|solutionrelative:jiangsuearthquake\\models\\volcurcollectormodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, { "AbsoluteMoniker": "D:0:0:{51CD2C1B-B7CD-4AC0-8087-846E14D316AD}|JiangsuEarthquake\\JiangsuEarthquake.csproj|f:\\code\\jseq\\20240301_jseq_upperpc\\jiangsuearthquake\\jiangsuearthquake\\views\\realtimedataview.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}", "RelativeMoniker": "D:0:0:{51CD2C1B-B7CD-4AC0-8087-846E14D316AD}|JiangsuEarthquake\\JiangsuEarthquake.csproj|solutionrelative:jiangsuearthquake\\views\\realtimedataview.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}" @@ -38,7 +42,7 @@ "Children": [ { "$type": "Document", - "DocumentIndex": 5, + "DocumentIndex": 6, "Title": "App.config", "DocumentMoniker": "F:\\Code\\JSEQ\\20240301_JSEQ_upperpc\\JiangsuEarthquake\\JiangsuEarthquake\\App.config", "RelativeDocumentMoniker": "JiangsuEarthquake\\App.config", @@ -53,6 +57,19 @@ { "$type": "Document", "DocumentIndex": 4, + "Title": "VolCurCollectorModel.cs", + "DocumentMoniker": "F:\\Code\\JSEQ\\20240301_JSEQ_upperpc\\JiangsuEarthquake\\JiangsuEarthquake\\Models\\VolCurCollectorModel.cs", + "RelativeDocumentMoniker": "JiangsuEarthquake\\Models\\VolCurCollectorModel.cs", + "ToolTip": "F:\\Code\\JSEQ\\20240301_JSEQ_upperpc\\JiangsuEarthquake\\JiangsuEarthquake\\Models\\VolCurCollectorModel.cs", + "RelativeToolTip": "JiangsuEarthquake\\Models\\VolCurCollectorModel.cs", + "ViewState": "AQIAAKwBAAAAAAAAAAAkwMIBAAA1AAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2024-06-28T01:42:56.109Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 5, "Title": "RealTimeDataView.xaml", "DocumentMoniker": "F:\\Code\\JSEQ\\20240301_JSEQ_upperpc\\JiangsuEarthquake\\JiangsuEarthquake\\Views\\RealTimeDataView.xaml", "RelativeDocumentMoniker": "JiangsuEarthquake\\Views\\RealTimeDataView.xaml", @@ -70,35 +87,35 @@ "RelativeDocumentMoniker": "JiangsuEarthquake\\ViewModels\\BoosterStationStateDataViewModel.cs", "ToolTip": "F:\\Code\\JSEQ\\20240301_JSEQ_upperpc\\JiangsuEarthquake\\JiangsuEarthquake\\ViewModels\\BoosterStationStateDataViewModel.cs", "RelativeToolTip": "JiangsuEarthquake\\ViewModels\\BoosterStationStateDataViewModel.cs", - "ViewState": "AQIAACcGAAAAAAAAAAAAAD0GAAAtAAAA", + "ViewState": "AQIAAFwBAAAAAAAAAAAuwNkFAAAIAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "WhenOpened": "2024-06-27T06:25:37.202Z", "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 1, + "DocumentIndex": 0, "Title": "LowerComputerModel.cs", "DocumentMoniker": "F:\\Code\\JSEQ\\20240301_JSEQ_upperpc\\JiangsuEarthquake\\JiangsuEarthquake\\Models\\LowerComputerModel.cs", "RelativeDocumentMoniker": "JiangsuEarthquake\\Models\\LowerComputerModel.cs", "ToolTip": "F:\\Code\\JSEQ\\20240301_JSEQ_upperpc\\JiangsuEarthquake\\JiangsuEarthquake\\Models\\LowerComputerModel.cs", "RelativeToolTip": "JiangsuEarthquake\\Models\\LowerComputerModel.cs", - "ViewState": "AQIAANwAAAAAAAAAAAAAAO8AAACWAAAA", + "ViewState": "AQIAAFoAAAAAAAAAAAAuwIQAAAAvAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "WhenOpened": "2024-06-27T05:54:59.023Z", "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 0, - "Title": "VolCurCollectorModel.cs", - "DocumentMoniker": "F:\\Code\\JSEQ\\20240301_JSEQ_upperpc\\JiangsuEarthquake\\JiangsuEarthquake\\Models\\VolCurCollectorModel.cs", - "RelativeDocumentMoniker": "JiangsuEarthquake\\Models\\VolCurCollectorModel.cs", - "ToolTip": "F:\\Code\\JSEQ\\20240301_JSEQ_upperpc\\JiangsuEarthquake\\JiangsuEarthquake\\Models\\VolCurCollectorModel.cs", - "RelativeToolTip": "JiangsuEarthquake\\Models\\VolCurCollectorModel.cs", - "ViewState": "AQIAAGoAAAAAAAAAAAAmwH8AAAAzAAAA", + "DocumentIndex": 1, + "Title": "SeismographModel.cs", + "DocumentMoniker": "F:\\Code\\JSEQ\\20240301_JSEQ_upperpc\\JiangsuEarthquake\\JiangsuEarthquake\\Models\\SeismographModel.cs", + "RelativeDocumentMoniker": "JiangsuEarthquake\\Models\\SeismographModel.cs", + "ToolTip": "F:\\Code\\JSEQ\\20240301_JSEQ_upperpc\\JiangsuEarthquake\\JiangsuEarthquake\\Models\\SeismographModel.cs", + "RelativeToolTip": "JiangsuEarthquake\\Models\\SeismographModel.cs", + "ViewState": "AQIAADUAAAAAAAAAAAAUwEoAAAAAAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", - "WhenOpened": "2024-06-27T05:54:57.251Z", + "WhenOpened": "2024-06-28T01:41:37.637Z", "EditorCaption": "" }, { @@ -109,7 +126,7 @@ "RelativeDocumentMoniker": "JiangsuEarthquake\\ViewModels\\MainViewModel.cs", "ToolTip": "F:\\Code\\JSEQ\\20240301_JSEQ_upperpc\\JiangsuEarthquake\\JiangsuEarthquake\\ViewModels\\MainViewModel.cs", "RelativeToolTip": "JiangsuEarthquake\\ViewModels\\MainViewModel.cs", - "ViewState": "AQIAALgNAAAAAAAAAADgv9INAAA5AAAA", + "ViewState": "AQIAAKUPAAAAAAAAAAAAAAsIAAAIAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "WhenOpened": "2024-06-26T09:47:38.344Z", "EditorCaption": "" diff --git a/JiangsuEarthquake/JiangsuEarthquake/Models/LowerComputerModel.cs b/JiangsuEarthquake/JiangsuEarthquake/Models/LowerComputerModel.cs index 2fe5561..c5b9548 100644 --- a/JiangsuEarthquake/JiangsuEarthquake/Models/LowerComputerModel.cs +++ b/JiangsuEarthquake/JiangsuEarthquake/Models/LowerComputerModel.cs @@ -55,6 +55,10 @@ namespace JiangsuEarthquake.Models //CRC校验失败 if (checkCodeCRC != byteList[^1]) { + string content = "接驳盒数据CRC校验失败" ; + sql = $"insert into alarm_run_info(StationID,RecordTime,ParaName,ParaContent) values('{id}','{DateTime.Now}','接驳盒数据校验','{content}');"; + DBHelper.ExecuteNonQuery(sql, 1); + try { //发送失败信息 @@ -69,9 +73,11 @@ namespace JiangsuEarthquake.Models MainWindow.mainViewModel.serverModel2.SendMessage(ServerReplyData(byteList[5], byteList[6], 0x00).ToArray()); } } - catch + catch(Exception ex) { - + content = "接驳盒数据CRC校验失败信息发送失败," + ex.Message; + sql = $"insert into alarm_run_info(StationID,RecordTime,ParaName,ParaContent) values('{id}','{DateTime.Now}','接驳盒数据发送','{content}');"; + DBHelper.ExecuteNonQuery(sql, 1); } return; @@ -91,6 +97,10 @@ namespace JiangsuEarthquake.Models byteLength = BitConverter.ToInt16(new byte[] { byteList[3], byteList[2] }, 0); if (byteLength != 106) //长度校验失败 { + string content = "接驳盒其他传感器集合数据长度校验失败"; + sql = $"insert into alarm_run_info(StationID,RecordTime,ParaName,ParaContent) values('{id}','{DateTime.Now}','接驳盒数据校验','{content}');"; + DBHelper.ExecuteNonQuery(sql, 1); + try { //发送失败信息 @@ -107,8 +117,7 @@ namespace JiangsuEarthquake.Models } catch (Exception ex) { - string content = "接驳盒其他传感器集合数据长度校验失败信息发送失败," + ex.Message; - + content = "接驳盒其他传感器集合数据长度校验失败信息发送失败," + ex.Message; sql = $"insert into alarm_run_info(StationID,RecordTime,ParaName,ParaContent) values('{id}','{DateTime.Now}','接驳盒数据发送','{content}');"; DBHelper.ExecuteNonQuery(sql, 1); } @@ -154,14 +163,16 @@ namespace JiangsuEarthquake.Models 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); } - } 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); + //try //{ // //发送失败信息 @@ -181,11 +192,6 @@ namespace JiangsuEarthquake.Models //} - string content = "接驳盒其他传感器集合数据解析失败," + ex.Message; - - sql = $"insert into alarm_run_info(StationID,RecordTime,ParaName,ParaContent) values('{id}','{DateTime.Now}','接驳盒数据解析','{content}');"; - DBHelper.ExecuteNonQuery(sql, 1); - break; } @@ -193,6 +199,8 @@ namespace JiangsuEarthquake.Models sql = $"insert into juncbox_env(StationID,RecordTime,DataTime,Temperature,Humidity,AttitudeX,AttitudeY,AttitudeZ) values('{id}','{DateTime.Now}','{DataTime}','{temperature}','{humidity}','{gestureX}','{gestureY}','{gestureZ}');"; DBHelper.ExecuteNonQuery(sql, 1); + + #region 更新到实时数据显示页面 //更新到实时数据显示页面 App.Current.Dispatcher.Invoke(() => { @@ -364,6 +372,8 @@ namespace JiangsuEarthquake.Models }; } }); + #endregion + } } @@ -388,6 +398,10 @@ namespace JiangsuEarthquake.Models byteLength = BitConverter.ToInt16(new byte[] { byteList[3], byteList[2] }, 0); if (byteLength != 13) //长度校验失败 { + string content = "接驳盒远程控制回复长度校验失败" ; + sql = $"insert into alarm_run_info(StationID,RecordTime,ParaName,ParaContent) values('{id}','{DateTime.Now}','接驳盒数据校验','{content}');"; + DBHelper.ExecuteNonQuery(sql, 1); + //try //{ // //发送失败信息 @@ -487,7 +501,6 @@ namespace JiangsuEarthquake.Models //存储历史设置 sql = $"insert into switch_info_his(StationID,RecordTime,SwitchName,SwitchState) values('{id}','{DateTime.Now}','BackupSeisPower','{state}');"; DBHelper.ExecuteNonQuery(sql, 1); - } break; @@ -526,7 +539,6 @@ namespace JiangsuEarthquake.Models //存储历史设置 sql = $"insert into switch_info_his(StationID,RecordTime,SwitchName,SwitchState) values('{id}','{DateTime.Now}','BackupSeisPower','{state}');"; DBHelper.ExecuteNonQuery(sql, 1); - } break; @@ -540,6 +552,10 @@ namespace JiangsuEarthquake.Models byteLength = BitConverter.ToInt16(new byte[] { byteList[3], byteList[2] }, 0); if (byteLength != 45) //长度校验失败 { + string content = "接驳盒读取状态回复长度校验失败"; + sql = $"insert into alarm_run_info(StationID,RecordTime,ParaName,ParaContent) values('{id}','{DateTime.Now}','接驳盒数据校验','{content}');"; + DBHelper.ExecuteNonQuery(sql, 1); + try { //发送失败信息 @@ -556,8 +572,7 @@ namespace JiangsuEarthquake.Models } catch (Exception ex) { - string content = "接驳盒状态数据长度校验失败信息发送失败," + ex.Message; - + content = "接驳盒状态数据长度校验失败信息发送失败," + ex.Message; sql = $"insert into alarm_run_info(StationID,RecordTime,ParaName,ParaContent) values('{id}','{DateTime.Now}','接驳盒数据发送','{content}');"; DBHelper.ExecuteNonQuery(sql, 1); } @@ -650,7 +665,6 @@ namespace JiangsuEarthquake.Models 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); } @@ -658,7 +672,6 @@ namespace JiangsuEarthquake.Models 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); @@ -699,6 +712,8 @@ namespace JiangsuEarthquake.Models sql = $"insert into juncbox_monitor(StationID,RecordTime,Seis2_Voltage,Seis1_Current,Seis2_Current,Elect_Current,Seis1_Voltage,Out_Voltage12_Reserved1,Out_Voltage12_Reserved2,Reserved) values('{id}','{recordTime}','{Seis2_Voltage}','{Seis1_Current}','{Seis2_Current}','{Elect_Current}','{Seis1_Voltage}','{Out_Voltage12_Reserved1}','{Out_Voltage12_Reserved2}','{Reserved}');"; DBHelper.ExecuteNonQuery(sql, 1); + + #region 更新到实时数据显示页面 //更新到页面 if (id == 1) { @@ -902,6 +917,8 @@ namespace JiangsuEarthquake.Models MainViewModel.realTimeDataViewModel2.HatchStateImage = (ImageSource)Application.Current.FindResource("CycleGray"); }); } + #endregion + break; case 0x07: @@ -910,6 +927,11 @@ namespace JiangsuEarthquake.Models byteLength = BitConverter.ToInt16(new byte[] { byteList[3], byteList[2] }, 0); if (byteLength != 8) //长度校验失败 { + string content = "接驳盒请求读取上位机现在时间数据长度校验失败"; + + sql = $"insert into alarm_run_info(StationID,RecordTime,ParaName,ParaContent) values('{id}','{DateTime.Now}','接驳盒数据校验','{content}');"; + DBHelper.ExecuteNonQuery(sql, 1); + try { //发送失败信息 @@ -926,7 +948,7 @@ namespace JiangsuEarthquake.Models } catch (Exception ex) { - string content = "接驳盒读取上位机现在时间长度校验失败信息发送失败," + ex.Message; + content = "接驳盒读取上位机现在时间长度校验失败信息发送失败," + ex.Message; sql = $"insert into alarm_run_info(StationID,RecordTime,ParaName,ParaContent) values('{id}','{DateTime.Now}','接驳盒数据发送','{content}');"; DBHelper.ExecuteNonQuery(sql, 1); @@ -980,6 +1002,11 @@ namespace JiangsuEarthquake.Models byteLength = BitConverter.ToInt16(new byte[] { byteList[3], byteList[2] }, 0); if (byteLength != 18) //长度校验失败 { + string content = "接驳盒告警数据长度校验失败"; + + sql = $"insert into alarm_run_info(StationID,RecordTime,ParaName,ParaContent) values('{id}','{DateTime.Now}','接驳盒数据校验','{content}');"; + DBHelper.ExecuteNonQuery(sql, 1); + try { //发送失败信息 @@ -996,7 +1023,7 @@ namespace JiangsuEarthquake.Models } catch (Exception ex) { - string content = "接驳盒告警数据长度校验失败信息发送失败," + ex.Message; + content = "接驳盒告警数据长度校验失败信息发送失败," + ex.Message; sql = $"insert into alarm_run_info(StationID,RecordTime,ParaName,ParaContent) values('{id}','{DateTime.Now}','接驳盒数据发送','{content}');"; DBHelper.ExecuteNonQuery(sql, 1); @@ -1045,6 +1072,8 @@ namespace JiangsuEarthquake.Models DBHelper.ExecuteNonQuery(sql, 1); } + + #region 更新到实时数据显示页面 //更新到前端 App.Current.Dispatcher.Invoke(() => { @@ -1082,6 +1111,8 @@ namespace JiangsuEarthquake.Models } dataReader.Dispose(); }); + #endregion + } catch (Exception ex) { diff --git a/JiangsuEarthquake/JiangsuEarthquake/Models/SeismographModel.cs b/JiangsuEarthquake/JiangsuEarthquake/Models/SeismographModel.cs index 5503be7..78108e4 100644 --- a/JiangsuEarthquake/JiangsuEarthquake/Models/SeismographModel.cs +++ b/JiangsuEarthquake/JiangsuEarthquake/Models/SeismographModel.cs @@ -70,19 +70,37 @@ namespace JiangsuEarthquake.Models //同步字校验 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.CRCCalc(checkCode.ToArray()))) - return; + { + 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] }; @@ -93,7 +111,13 @@ namespace JiangsuEarthquake.Models 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); @@ -109,9 +133,7 @@ namespace JiangsuEarthquake.Models if (userByte.Length != 16) { for (int i = 0; i < 16; i++) - { userByteArray[i] = 0; - } Array.Copy(userByte, 0, userByteArray, 16, userByte.Length); } @@ -126,9 +148,7 @@ namespace JiangsuEarthquake.Models if (passwordByte.Length != 40) { for (int i = 0; i < 40; i++) - { passwordByteArray[i] = 0; - } Array.Copy(passwordByte, 0, passwordByteArray, 40, passwordByte.Length); } @@ -163,6 +183,10 @@ namespace JiangsuEarthquake.Models 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) //没有空闲连接 { @@ -170,6 +194,10 @@ namespace JiangsuEarthquake.Models 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) @@ -186,11 +214,13 @@ namespace JiangsuEarthquake.Models 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 () => @@ -200,12 +230,16 @@ namespace JiangsuEarthquake.Models 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 { @@ -219,11 +253,13 @@ namespace JiangsuEarthquake.Models 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 () => @@ -233,10 +269,13 @@ namespace JiangsuEarthquake.Models 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); } })); } @@ -255,11 +294,13 @@ namespace JiangsuEarthquake.Models 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 () => @@ -269,10 +310,13 @@ namespace JiangsuEarthquake.Models 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); } })); } @@ -288,11 +332,13 @@ namespace JiangsuEarthquake.Models 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 () => @@ -302,10 +348,13 @@ namespace JiangsuEarthquake.Models 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); } })); } @@ -319,7 +368,6 @@ namespace JiangsuEarthquake.Models if (isMain) { MainWindow.mainViewModel.IsMainSeis1CertSucs = true; - MainWindow.mainViewModel.MainSeis1ConnectMsgVisibility = Visibility.Visible; MainWindow.mainViewModel.MainSeis1ConnectMsg = "认证成功!"; MainWindow.mainViewModel.MainSeis1ConnectMsgForeground = new SolidColorBrush(Colors.Green); @@ -327,7 +375,6 @@ namespace JiangsuEarthquake.Models else { MainWindow.mainViewModel.IsBackupSeis1CertSucs = true; - MainWindow.mainViewModel.BackupSeis1ConnectMsgVisibility = Visibility.Visible; MainWindow.mainViewModel.BackupSeis1ConnectMsg = "认证成功!"; MainWindow.mainViewModel.BackupSeis1ConnectMsgForeground = new SolidColorBrush(Colors.Green); @@ -338,7 +385,6 @@ namespace JiangsuEarthquake.Models if (isMain) { MainWindow.mainViewModel.IsMainSeis2CertSucs = true; - MainWindow.mainViewModel.MainSeis2ConnectMsgVisibility = Visibility.Visible; MainWindow.mainViewModel.MainSeis2ConnectMsg = "认证成功!"; MainWindow.mainViewModel.MainSeis2ConnectMsgForeground = new SolidColorBrush(Colors.Green); @@ -346,22 +392,28 @@ namespace JiangsuEarthquake.Models 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); @@ -376,11 +428,13 @@ namespace JiangsuEarthquake.Models 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 () => @@ -390,17 +444,19 @@ namespace JiangsuEarthquake.Models 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); @@ -415,11 +471,13 @@ namespace JiangsuEarthquake.Models 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 () => @@ -429,10 +487,13 @@ namespace JiangsuEarthquake.Models 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); } })); } @@ -442,7 +503,6 @@ namespace JiangsuEarthquake.Models if (isMain) { MainWindow.mainViewModel.IsMainSeis2CertSucs = false; - MainWindow.mainViewModel.MainSeis2ConnectMsgVisibility = Visibility.Visible; MainWindow.mainViewModel.MainSeis2ConnectMsg = "认证失败!"; MainWindow.mainViewModel.MainSeis2ConnectMsgForeground = new SolidColorBrush(Colors.Red); @@ -457,11 +517,13 @@ namespace JiangsuEarthquake.Models 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 () => @@ -471,17 +533,19 @@ namespace JiangsuEarthquake.Models 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); @@ -496,11 +560,13 @@ namespace JiangsuEarthquake.Models 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 () => @@ -510,10 +576,13 @@ namespace JiangsuEarthquake.Models 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); } })); } @@ -526,139 +595,180 @@ namespace JiangsuEarthquake.Models { if (dataRecv.Count == 128) //查询台站参数应答 { - //台号 - int stationNum = BitConverter.ToInt32(new byte[] { dataRecv[3], dataRecv[2], dataRecv[1], dataRecv[0] }, 0); - - //台站名称 - List stationNameData = new List(); - for (int i = 4; i < 36; i++) - stationNameData.Add(dataRecv[i]); - string stationName = Encoding.UTF8.GetString(stationNameData.ToArray()); - - //台名缩写 - List stationNameAbbData = new List(); - 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 enablingDateList = new List(); - 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 softVersionList = new List(); - for (int i = 96; i < 128; i++) - softVersionList.Add(dataRecv[i]); - string softVersion = Encoding.UTF8.GetString(softVersionList.ToArray()); - - //数据存储 - sql = $"insert into earthquakeoriginaldata(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); - - //通知到前端 - if (id == 1) + try { - 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; + //台号 + int stationNum = BitConverter.ToInt32(new byte[] { dataRecv[3], dataRecv[2], dataRecv[1], dataRecv[0] }, 0); + //台站名称 + List stationNameData = new List(); + for (int i = 4; i < 36; i++) + stationNameData.Add(dataRecv[i]); + string stationName = Encoding.UTF8.GetString(stationNameData.ToArray()); + //台名缩写 + List stationNameAbbData = new List(); + 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 enablingDateList = new List(); + 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 softVersionList = new List(); + for (int i = 96; i < 128; i++) + softVersionList.Add(dataRecv[i]); + string softVersion = Encoding.UTF8.GetString(softVersionList.ToArray()); + + //数据存储 + sql = $"insert into earthquakeoriginaldata(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; + } + }); } - else + catch(Exception ex) { - 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; + 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) //设置/读取台站参数应答 { - if (id == 1) + App.Current.Dispatcher.Invoke(() => { - if (MainViewModel.seismometerParameterViewModel1.EarthQuakeParaSetIsSend) //设置 + string type = ""; + string record = ""; + + if (id == 1) { - MainViewModel.seismometerParameterViewModel1.EarthQuakeParaSetIsReceived = true; - MainViewModel.seismometerParameterViewModel1.SeisParaMsg = "设置台站参数成功!"; - MainViewModel.seismometerParameterViewModel1.timerEarthQuakeParaSet.Stop(); + 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 { - MainViewModel.seismometerParameterViewModel1.EarthQuakeParaReadIsReceived = true; - MainViewModel.seismometerParameterViewModel1.SeisParaMsg = "读取台站参数成功!"; - MainViewModel.seismometerParameterViewModel1.timerEarthQuakeParaRead.Stop(); + 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; } - 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(); - } - else - { - MainViewModel.seismometerParameterViewModel2.EarthQuakeParaReadIsReceived = true; - MainViewModel.seismometerParameterViewModel2.SeisParaMsg = "读取台站参数成功!"; - MainViewModel.seismometerParameterViewModel2.timerEarthQuakeParaRead.Stop(); - } - - 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); @@ -672,257 +782,227 @@ namespace JiangsuEarthquake.Models MainWindow.mainViewModel.SeisZeroSetStartButtonIsEnabled = true; MainWindow.mainViewModel.SeisZeroSetStopButtonIsEnabled = true; + string name = ""; if(isMain) - { - //存储历史设置 - sql = $"insert into switchinfohis(StationID,RecordTime,SwitchName,SwitchState) values('{id}','{DateTime.Now}','MainSeisSetZero','On');"; - DBHelper.ExecuteNonQuery(sql, 1); - - //存储最新设置 - sql = $"update switchinfo set SwitchState='On',RecordTime='{DateTime.Now}' where SwitchName='MainSeisSetZero' and StationID={id};"; - DBHelper.ExecuteNonQuery(sql, 1); - } + name = "MainSeisSetZero"; else - { - //存储历史设置 - sql = $"insert into switchinfohis(StationID,RecordTime,SwitchName,SwitchState) values('{id}','{DateTime.Now}','BackupSeisSetZero','On');"; - DBHelper.ExecuteNonQuery(sql, 1); + name = "BackupSeisSetZero"; - //存储最新设置 - sql = $"update switchinfo set SwitchState='On',RecordTime='{DateTime.Now}' where SwitchName='BackupSeisSetZero' and StationID={id};"; - DBHelper.ExecuteNonQuery(sql, 1); - } + //存储历史设置 + sql = $"insert into switchinfohis(StationID,RecordTime,SwitchName,SwitchState) values('{id}','{DateTime.Now}','{name}','On');"; + DBHelper.ExecuteNonQuery(sql, 1); + + //存储最新设置 + sql = $"update switchinfo 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); - 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; + 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) - { - //存储历史设置 - sql = $"insert into switchinfohis(StationID,RecordTime,SwitchName,SwitchState) values('{id}','{DateTime.Now}','MainSeisSetZero','Off');"; - DBHelper.ExecuteNonQuery(sql, 1); - - //存储最新设置 - sql = $"update switchinfo set SwitchState='Off',RecordTime='{DateTime.Now}' where SwitchName='MainSeisSetZero' and StationID={id};"; - DBHelper.ExecuteNonQuery(sql, 1); - } + name = "MainSeisSetZero"; else - { - //存储历史设置 - sql = $"insert into switchinfohis(StationID,RecordTime,SwitchName,SwitchState) values('{id}','{DateTime.Now}','BackupSeisSetZero','Off');"; - DBHelper.ExecuteNonQuery(sql, 1); + name = "BackupSeisSetZero"; - //存储最新设置 - sql = $"update switchinfo set SwitchState='Off',RecordTime='{DateTime.Now}' where SwitchName='BackupSeisSetZero' and StationID={id};"; - DBHelper.ExecuteNonQuery(sql, 1); - } + //存储历史设置 + sql = $"insert into switchinfohis(StationID,RecordTime,SwitchName,SwitchState) values('{id}','{DateTime.Now}','{name}','Off');"; + DBHelper.ExecuteNonQuery(sql, 1); + + //存储最新设置 + sql = $"update switchinfo 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; + } - //外部供电电压 - float supplyVoltage = BitConverter.ToInt16(new byte[] { dataRecv[1], dataRecv[0] }, 0) * 0.1f; + 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; - //后备电池电压 - 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); - - ////通知到前端 - //if (id == 1) - //{ - // MainViewModel.earthquakeSensorModel1.Out_Vol = supplyVoltage; - // MainViewModel.earthquakeSensorModel1.Backup_Vol = batteryVoltage; - // MainViewModel.earthquakeSensorModel1.Pre = pressure; - // MainViewModel.earthquakeSensorModel1.Tem = temperature; - // MainViewModel.earthquakeSensorModel1.Sei_Tilt_Angle = tiltAngleSeis; - // MainViewModel.earthquakeSensorModel1.OBS_Tilt_Angle = tiltAngleOBS; - // MainViewModel.earthquakeSensorModel1.Species_Dif = clockDeviation; - // MainViewModel.earthquakeSensorModel1.Frequency_Dif = freDifference; - // MainViewModel.earthquakeSensorModel1.CF_Total_Cap = totalSpaceCF; - // MainViewModel.earthquakeSensorModel1.CF_Usable_Cap = canUseSpaceCF; - // MainViewModel.earthquakeSensorModel1.SD_Total_Cap1 = totalSpaceSD1; - // MainViewModel.earthquakeSensorModel1.SD_Usable_Cap1 = canUseSpaceSD1; - // MainViewModel.earthquakeSensorModel1.SD_Total_Cap2 = totalSpaceSD2; - // MainViewModel.earthquakeSensorModel1.SD_Usable_Cap2 = canUseSpaceSD2; - // MainViewModel.earthquakeSensorModel1.Sei_U_Point = zeroPointU; - // MainViewModel.earthquakeSensorModel1.Sei_V_Point = zeroPointV; - // MainViewModel.earthquakeSensorModel1.Sei_W_Point = zeroPointW; - // MainViewModel.earthquakeSensorModel1.North_Angle = northSeekingAngle; - //} - //else - //{ - // MainViewModel.earthquakeSensorModel2.Out_Vol = supplyVoltage; - // MainViewModel.earthquakeSensorModel2.Backup_Vol = batteryVoltage; - // MainViewModel.earthquakeSensorModel2.Pre = pressure; - // MainViewModel.earthquakeSensorModel2.Tem = temperature; - // MainViewModel.earthquakeSensorModel2.Sei_Tilt_Angle = tiltAngleSeis; - // MainViewModel.earthquakeSensorModel2.OBS_Tilt_Angle = tiltAngleOBS; - // MainViewModel.earthquakeSensorModel2.Species_Dif = clockDeviation; - // MainViewModel.earthquakeSensorModel2.Frequency_Dif = freDifference; - // MainViewModel.earthquakeSensorModel2.CF_Total_Cap = totalSpaceCF; - // MainViewModel.earthquakeSensorModel2.CF_Usable_Cap = canUseSpaceCF; - // MainViewModel.earthquakeSensorModel2.SD_Total_Cap1 = totalSpaceSD1; - // MainViewModel.earthquakeSensorModel2.SD_Usable_Cap1 = canUseSpaceSD1; - // MainViewModel.earthquakeSensorModel2.SD_Total_Cap2 = totalSpaceSD2; - // MainViewModel.earthquakeSensorModel2.SD_Usable_Cap2 = canUseSpaceSD2; - // MainViewModel.earthquakeSensorModel2.Sei_U_Point = zeroPointU; - // MainViewModel.earthquakeSensorModel2.Sei_V_Point = zeroPointV; - // MainViewModel.earthquakeSensorModel2.Sei_W_Point = zeroPointW; - // MainViewModel.earthquakeSensorModel2.North_Angle = northSeekingAngle; - //} + //数据存储 + 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); - 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; + 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) - { - //存储历史设置 - sql = $"insert into switchinfohis(StationID,RecordTime,SwitchName,SwitchState) values('{id}','{DateTime.Now}','MainSeisSetLevel','On');"; - DBHelper.ExecuteNonQuery(sql, 1); - - //存储最新设置 - sql = $"update switchinfo set SwitchState='On',RecordTime='{DateTime.Now}' where SwitchName='MainSeisSetLevel' and StationID={id};"; - DBHelper.ExecuteNonQuery(sql, 1); - } + name = "MainSeisSetLevel"; else - { - //存储历史设置 - sql = $"insert into switchinfohis(StationID,RecordTime,SwitchName,SwitchState) values('{id}','{DateTime.Now}','BackupSeisSetLevel','On');"; - DBHelper.ExecuteNonQuery(sql, 1); + name = "BackupSeisSetLevel"; - //存储最新设置 - sql = $"update switchinfo set SwitchState='On',RecordTime='{DateTime.Now}' where SwitchName='BackupSeisSetLevel' and StationID={id};"; - DBHelper.ExecuteNonQuery(sql, 1); - } + //存储历史设置 + sql = $"insert into switchinfohis(StationID,RecordTime,SwitchName,SwitchState) values('{id}','{DateTime.Now}','{name}','On');"; + DBHelper.ExecuteNonQuery(sql, 1); + + //存储最新设置 + sql = $"update switchinfo 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); - 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; + 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) - { - //存储历史设置 - sql = $"insert into switchinfohis(StationID,RecordTime,SwitchName,SwitchState) values('{id}','{DateTime.Now}','MainSeisSetLevel','Off');"; - DBHelper.ExecuteNonQuery(sql, 1); - - //存储最新设置 - sql = $"update switchinfo set SwitchState='Off',RecordTime='{DateTime.Now}' where SwitchName='MainSeisSetLevel' and StationID={id};"; - DBHelper.ExecuteNonQuery(sql, 1); - } + name = "MainSeisSetLevel"; else - { - //存储历史设置 - sql = $"insert into switchinfohis(StationID,RecordTime,SwitchName,SwitchState) values('{id}','{DateTime.Now}','BackupSeisSetLevel','Off');"; - DBHelper.ExecuteNonQuery(sql, 1); + name = "BackupSeisSetLevel"; - //存储最新设置 - sql = $"update switchinfo set SwitchState='Off',RecordTime='{DateTime.Now}' where SwitchName='BackupSeisSetLevel' and StationID={id};"; - DBHelper.ExecuteNonQuery(sql, 1); - } + //存储历史设置 + sql = $"insert into switchinfohis(StationID,RecordTime,SwitchName,SwitchState) values('{id}','{DateTime.Now}','{name}','Off');"; + DBHelper.ExecuteNonQuery(sql, 1); + + //存储最新设置 + sql = $"update switchinfo 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); } } } diff --git a/JiangsuEarthquake/JiangsuEarthquake/Models/VolCurCollectorModel.cs b/JiangsuEarthquake/JiangsuEarthquake/Models/VolCurCollectorModel.cs index bcf02e3..e22369c 100644 --- a/JiangsuEarthquake/JiangsuEarthquake/Models/VolCurCollectorModel.cs +++ b/JiangsuEarthquake/JiangsuEarthquake/Models/VolCurCollectorModel.cs @@ -16,6 +16,7 @@ using System.Windows.Media; using Application = System.Windows.Application; using MySql.Data.MySqlClient; using Color = System.Windows.Media.Color; +using System.Reflection.Metadata; namespace JiangsuEarthquake.Models { @@ -72,7 +73,6 @@ namespace JiangsuEarthquake.Models string sql = $"insert into boosterstationoriginaldata(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++) @@ -80,7 +80,15 @@ namespace JiangsuEarthquake.Models checkCodeCRC = Tools.CRCCalc(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] == 0x03) //查询从设备寄存器内容 { @@ -91,39 +99,51 @@ namespace JiangsuEarthquake.Models { string content = "升压站电控通信系统状态数据长度校验失败"; - sql = $"insert into alarm_run_info(StationID,RecordTime,ParaName,ParaContent) values('{id}','{DateTime.Now}','升压站电控通信系统数据接收','{content}');"; + sql = $"insert into alarm_run_info(StationID,RecordTime,ParaName,ParaContent) values('{id}','{DateTime.Now}','升压站电控通信系统数据校验','{content}');"; DBHelper.ExecuteNonQuery(sql, 1); return; } - - //获取电压电流的量程; - int VoltageRange = int.Parse(Tools.GetAppSetting("SYZVoltageRange")); - int CurrentRange = int.Parse(Tools.GetAppSetting("SYZCurrentRange")); - voltage = BitConverter.ToInt16(new byte[2] { byteList[4], byteList[3] }) / 10000f * VoltageRange; - current = BitConverter.ToInt16(new byte[2] { byteList[6], byteList[5] }) / 10000f * CurrentRange; - power = BitConverter.ToInt16(new byte[2] { byteList[7], byteList[8] }) / 10000f * VoltageRange * CurrentRange; - posEleDegree = BitConverter.ToUInt32(new byte[4] { byteList[9], byteList[10], byteList[11], byteList[12] }) * VoltageRange * CurrentRange / (1000 * 3600); - revEleDegree = BitConverter.ToUInt32(new byte[4] { byteList[13], byteList[14], byteList[15], byteList[16] }) * VoltageRange * CurrentRange / (1000 * 3600); - uVoltage = BitConverter.ToUInt16(new byte[2] { byteList[17], byteList[18] }) / 10000f * VoltageRange; - uCurrent = BitConverter.ToUInt16(new byte[2] { byteList[19], byteList[20] }) / 10000f * VoltageRange; - relayStatus = BitConverter.ToUInt16(new byte[2] { byteList[21], byteList[22] }); - highResVoltage = BitConverter.ToInt16(new byte[2] { byteList[23], byteList[24] }) / 50000f * VoltageRange; - highResCurrent = BitConverter.ToInt16(new byte[2] { byteList[25], byteList[26] }) / 50000f * CurrentRange; - forAmpereHour = BitConverter.ToUInt32(new byte[4] { byteList[27], byteList[28], byteList[29], byteList[30] }) * CurrentRange / 3600; - revAmpereHour = BitConverter.ToUInt32(new byte[4] { byteList[31], byteList[32], byteList[33], byteList[34] }) * CurrentRange / 3600; DateTime recordTime = DateTime.Now; - sql = $"insert into boosterstation_state(StationID,RecordTime,In_Vol,In_Cur,Power,PosEleDegree," + - $"RevEleDegree,uVoltage,uCurrent,RelayStatus,HighResVoltage,HighResCurrent,ForAmpereHour," + - $"RevAmpereHour) values('{id}','{recordTime}','{voltage}','{current}','{power}','{posEleDegree}'," + - $"'{revEleDegree}','{uVoltage}','{uCurrent}','{relayStatus}','{highResVoltage}'," + - $"'{highResCurrent}','{forAmpereHour}','{revAmpereHour}');"; - DBHelper.ExecuteNonQuery(sql, 1); + try + { + //获取电压电流的量程; + int VoltageRange = int.Parse(Tools.GetAppSetting("SYZVoltageRange")); + int CurrentRange = int.Parse(Tools.GetAppSetting("SYZCurrentRange")); - sql = $"insert into log_record(StationID,RecordTime,Device_Name,Operation_Type,Record) values('{id}','{DateTime.Now}','升压站电控通信系统','系统控制','请求升压站状态数据成功');"; - DBHelper.ExecuteNonQuery(sql, 1); + voltage = BitConverter.ToInt16(new byte[2] { byteList[4], byteList[3] }) / 10000f * VoltageRange; + current = BitConverter.ToInt16(new byte[2] { byteList[6], byteList[5] }) / 10000f * CurrentRange; + power = BitConverter.ToInt16(new byte[2] { byteList[7], byteList[8] }) / 10000f * VoltageRange * CurrentRange; + posEleDegree = BitConverter.ToUInt32(new byte[4] { byteList[9], byteList[10], byteList[11], byteList[12] }) * VoltageRange * CurrentRange / (1000 * 3600); + revEleDegree = BitConverter.ToUInt32(new byte[4] { byteList[13], byteList[14], byteList[15], byteList[16] }) * VoltageRange * CurrentRange / (1000 * 3600); + uVoltage = BitConverter.ToUInt16(new byte[2] { byteList[17], byteList[18] }) / 10000f * VoltageRange; + uCurrent = BitConverter.ToUInt16(new byte[2] { byteList[19], byteList[20] }) / 10000f * VoltageRange; + relayStatus = BitConverter.ToUInt16(new byte[2] { byteList[21], byteList[22] }); + highResVoltage = BitConverter.ToInt16(new byte[2] { byteList[23], byteList[24] }) / 50000f * VoltageRange; + highResCurrent = BitConverter.ToInt16(new byte[2] { byteList[25], byteList[26] }) / 50000f * CurrentRange; + forAmpereHour = BitConverter.ToUInt32(new byte[4] { byteList[27], byteList[28], byteList[29], byteList[30] }) * CurrentRange / 3600; + revAmpereHour = BitConverter.ToUInt32(new byte[4] { byteList[31], byteList[32], byteList[33], byteList[34] }) * CurrentRange / 3600; + recordTime = DateTime.Now; + + sql = $"insert into boosterstation_state(StationID,RecordTime,In_Vol,In_Cur,Power,PosEleDegree," + + $"RevEleDegree,uVoltage,uCurrent,RelayStatus,HighResVoltage,HighResCurrent,ForAmpereHour," + + $"RevAmpereHour) values('{id}','{recordTime}','{voltage}','{current}','{power}','{posEleDegree}'," + + $"'{revEleDegree}','{uVoltage}','{uCurrent}','{relayStatus}','{highResVoltage}'," + + $"'{highResCurrent}','{forAmpereHour}','{revAmpereHour}');"; + DBHelper.ExecuteNonQuery(sql, 1); + + sql = $"insert into log_record(StationID,RecordTime,Device_Name,Operation_Type,Record) values('{id}','{DateTime.Now}','升压站电控通信系统','数据请求','请求升压站状态数据成功');"; + 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); + } App.Current.Dispatcher.Invoke(() => { @@ -268,7 +288,7 @@ namespace JiangsuEarthquake.Models { string content = "升压站电控通信系统对从设备单个寄存器置数回复长度校验失败"; - sql = $"insert into alarm_run_info(StationID,RecordTime,ParaName,ParaContent) values('{id}','{DateTime.Now}','升压站电控通信系统数据接收','{content}');"; + sql = $"insert into alarm_run_info(StationID,RecordTime,ParaName,ParaContent) values('{id}','{DateTime.Now}','升压站电控通信系统数据校验','{content}');"; DBHelper.ExecuteNonQuery(sql, 1); return; @@ -361,6 +381,8 @@ namespace JiangsuEarthquake.Models } else if (byteList[2] == 0x01 && byteList[3] == 0x30) //继电器输出 { + string record = ""; + //if (id == 1) //{ if (Tools.CompareByte(byteList.ToArray(), MainWindow.mainViewModel.RelayActivationRecv)) @@ -381,6 +403,8 @@ namespace JiangsuEarthquake.Models MainViewModel.baseStationStateModel1.JunBox_Power = (ImageSource)Application.Current.FindResource("DeviceOn"); else MainViewModel.baseStationStateModel2.JunBox_Power = (ImageSource)Application.Current.FindResource("DeviceOn"); + + record = "打开海底基站电源成功"; }); } else if (Tools.CompareByte(byteList.ToArray(), MainWindow.mainViewModel.RelayShutdownRecv)) @@ -401,6 +425,8 @@ namespace JiangsuEarthquake.Models MainViewModel.baseStationStateModel1.JunBox_Power = (ImageSource)Application.Current.FindResource("DeviceOff"); else MainViewModel.baseStationStateModel2.JunBox_Power = (ImageSource)Application.Current.FindResource("DeviceOff"); + + record = "关闭海底基站电源成功"; }); } else @@ -416,8 +442,14 @@ namespace JiangsuEarthquake.Models MainWindow.mainViewModel.BaseStationMsg = "继电开启/关闭失败!"; MainWindow.mainViewModel.timerBaseStationMsgHidden.Start(); MainWindow.mainViewModel.BaseStationMsgForeground = new SolidColorBrush(Colors.Red); + + record = "打开/关闭海底基站电源成功"; }); } + + sql = $"insert into log_record(StationID,RecordTime,Device_Name,Operation_Type,Record) values('{id}','{DateTime.Now}','升压站电控通信系统','系统控制','{record}');"; + DBHelper.ExecuteNonQuery(sql, 1); + //} //else //{