Exemple #1
0
        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());
            }
        }
Exemple #2
0
        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);
        }
Exemple #3
0
 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());
     }
 }