public void Start(PluginMonitor databaseMonitor, PluginMonitor dasMonitor) { try { #if DEBUG var hexString = "01 03 1E 00 00 00 00 00 00 00 00 42 C7 D0 13 00 00 41 D0 0A F1 00 00 41 EA 80 00 00 00 41 EE CF 38 6F 91"; var bytes = ByteHelper.HexStringToByteArray(hexString); var substationData = new SubStationData(1, bytes.Skip(3).Take(0x1E).ToArray()); #endif _databaseMonitor = databaseMonitor; _dasMonitor = dasMonitor; _dases.AddRange(InitDas()); _dases.ToList().ForEach(o => o.Start()); _customCommandService.Start(); _customCommandService.ConfigMonitoringServerEvent += CustomCommandService_ConfigMonitoringServerEvent; _customCommandService.ConfigSubstationEvent += CustomCommandService_ConfigSubstationEvent; _customCommandService.ConfigFluxEvent += CustomCommandService_ConfigFluxEvent; _dataBulkService.Start(_databaseMonitor); DasConfig.Repo.EndAlarmToday(); DasConfig.Repo.EndAnalogAlarm(); } catch (Exception ex) { LogD.Error(ex.ToString()); } }
private void Comm_DataReceivedEvent(object sender, ChannelDataEventArgs e) { var now = DateTime.Now; var substationId = e.SendCommand.Id; if (!_subStationDict.ContainsKey(substationId)) { return; } var substationModel = _subStationDict[substationId]; var requestInfo = e.RequestInfo; if (requestInfo == null) { Log($"[{substationId}]号传感器断线"); substationModel.UpdateNetOff(now); } else { if (DasConfig.ShowDetailLogs) Log($"[{substationId}]号传感器数据报文<--{requestInfo.DataString}"); if (!requestInfo.CrcOk) { Log($"[{substationId}]号传感器数据报文校验和错误,丢弃."); substationModel.UpdateAnalogOff(now); } else { switch (requestInfo.CmdKey) { case SubstationCmdkey.QueryRealData: var substationData = new SubStationData(substationModel.SubStationID, requestInfo.Body); if (substationData == null || !substationData.IsValid) { Log($"[{substationId}]号传感器数据报文无效,丢弃."); return; } substationModel.Update(now, substationData); break; case SubstationCmdkey.ErrorResponse: var errorString = Enum.GetName(typeof(ErrorCode), (ErrorCode)requestInfo.Data[2]); Log($"[{substationId}]号传感器异常数据代码:{errorString}."); substationModel.UpdateAnalogOff(now); break; default: Log($"[{substationId}]号传感器未知报文,丢弃."); substationModel.UpdateAnalogOff(now); break; } } } FireDasUpdateRealData(substationModel); }
internal void Update(DateTime now, SubStationData substationData) { RealDataModel.Update(now, "正常", PointState.OK); AnalogPointModels.ForEach(p => p.Update(now, substationData.SensorRealDataInfos)); try { lock (_lock) { FluxPointModels.ForEach(p => p.Update(now, AnalogPointModels.Select(p => p.RealDataModel).ToList())); } SubStationRunModel.UpdateSubStationRun(ref _subStationRunModel, _subStationRunModels, RealDataModel, this); } catch (Exception ex) { LogD.Error(ex.ToString()); } }