private static StationDto CreateStationDto(Station station) { DvseMeter meter = null; ProductionOrder order = null; if (!string.IsNullOrEmpty(station.MeterNo)) { meter = MeterRepository.GetOne(station.MeterNo); } if (!string.IsNullOrEmpty(station.OrderUniqueId)) { order = OrderRepository.GetOneByUniqueId(station.OrderUniqueId, true); } var dto = StationDto.Create(station, order, meter); return dto; }
public static void ReadData(Station station, CancellationToken token) { var meter = GetMeter(station.MeterNo); try { StationRepository.SetPortComParamStatus(station.ComPort, PortComParamStatus.Reading); var isFakeCom = AppConfigRepository.Get().IsFakeCom; if (!isFakeCom) { SetManufacturerMode(station.ComPort, true); } // clear real values meter.Parameters.ForEach(p => p.RealValue = string.Empty); MeterRepository.Update(meter); foreach (var p in from p in meter.Parameters where p.IsActive // < only take activated parameters for reading where !p.IsWriteOnly // < only take readable parameters for reading where !p.IsNameplateOnly // < only take com parameters for reading select p) { if (token.IsCancellationRequested) { // break if user cancelled task StationRepository.SetPortComParamStatus(station.ComPort, PortComParamStatus.NotRead); return; } if (isFakeCom) { //Thread.Sleep(150); p.RealValue = p.TargetValue; if (p.TagId == ParameterTagId.SignatureCheck) { p.RealValue = "SUCCESS: ..."; } } else { switch (p.TagId) { case ParameterTagId.ClientId: p.RealValue = ReadClientId(station.ComPort); break; case ParameterTagId.ManufacturerSerialNumber: p.RealValue = ReadManufacturerSerialNumber(station.ComPort); break; case ParameterTagId.ProductionId: p.RealValue = ReadProductionId(station.ComPort); break; case ParameterTagId.ServerId: p.RealValue = ReadServerId(station.ComPort); break; case ParameterTagId.MeasurementMode: p.RealValue = ReadMeasurementMode(station.ComPort); break; case ParameterTagId.TariffCount: p.RealValue = ReadNumberOfTariffs(station.ComPort).ToString(); break; case ParameterTagId.InverseTariffControl: p.RealValue = ReadTerminalControlReverse(station.ComPort); break; case ParameterTagId.PublicKey: p.RealValue = ReadPublicKey(station.ComPort); break; case ParameterTagId.InfoInterfaceActivated: p.RealValue = ReadInfoInterfaceStatus(station.ComPort); break; case ParameterTagId.HistoricValuesEnabled: p.RealValue = ReadHistoricEnergyEnabled(station.ComPort); break; case ParameterTagId.PinProtectionEnabled: p.RealValue = ReadPinProtectionEnabled(station.ComPort); break; case ParameterTagId.PowerOnLcdEnabled: p.RealValue = ReadPowerOnLcdEnabled(station.ComPort); break; case ParameterTagId.AutomaticPinFallback: p.RealValue = ReadAutoPinFallback(station.ComPort); break; case ParameterTagId.SignatureCheck: ReadSignature(station.ComPort, p); break; } } } meter.IsCommunciationCompleted = meter.Parameters.All(p => p.IsValid); MeterRepository.Update(meter); StationRepository.SetPortComParamStatus(station.ComPort, meter.IsCommunciationCompleted ? PortComParamStatus.ReadBackOk : PortComParamStatus.ParamFailed); } catch (Exception ex) { Log.ErrorException("SmlCom read failed", ex); StationRepository.SetPortComParamStatus(station.ComPort, PortComParamStatus.ReadFailed); } }
public static void WriteData(Station station, CancellationToken token, bool isReadBackEnabled = false) { var meter = GetMeter(station.MeterNo); try { StationRepository.SetPortComParamStatus(station.ComPort, PortComParamStatus.Writing); if (!AppConfigRepository.Get().IsFakeCom) { SetManufacturerMode(station.ComPort, true); } // clear real values meter.Parameters.ForEach(p => p.RealValue = string.Empty); // clear written status meter.Parameters.ForEach(p => p.IsWritten = false); MeterRepository.Update(meter); var isFakeCom = AppConfigRepository.Get().IsFakeCom; foreach (var p in meter.Parameters) { if (token.IsCancellationRequested) { // break if user cancelled task StationRepository.SetPortComParamStatus(station.ComPort, PortComParamStatus.NotWritten); return; } if (p.IsActive == false || p.IsNameplateOnly || p.IsReadOnly) { if (p.TagId != ParameterTagId.SignatureCheck) { // Signaturecheck should be always performed, even when it was declared as readonly or inactive... continue; } } if (isFakeCom) { p.RealValue = p.TargetValue; if (!p.IsReadOnly && !p.IsNameplateOnly) { p.IsWritten = true; } if (p.TagId == ParameterTagId.SignatureCheck) { p.IsWritten = true; } Thread.Sleep(200); continue; } switch (p.TagId) { case ParameterTagId.ClientId: WriteClientId(station.ComPort, p.TargetValue); p.IsWritten = true; break; case ParameterTagId.ManufacturerSerialNumber: WriteManufacturerSerialNumber(station.ComPort, p.TargetValue); p.IsWritten = true; break; case ParameterTagId.ProductionId: WriteProductionId(station.ComPort, p.TargetValue); p.IsWritten = true; break; case ParameterTagId.ServerId: WriteServerId(station.ComPort, p.TargetValue); p.IsWritten = true; break; case ParameterTagId.MeasurementMode: WriteMeasurementMode(station.ComPort, p.TargetValue); p.IsWritten = true; break; case ParameterTagId.TariffCount: WriteNumberOfTariffs(station.ComPort, int.Parse(p.TargetValue)); p.IsWritten = true; break; case ParameterTagId.InverseTariffControl: WriteTerminalControlReverse(station.ComPort, p.TargetValue); p.IsWritten = true; break; case ParameterTagId.GenerateKeys: if (GetTextAsValue(p.TargetValue)) { WriteCreateEccKeys(station.ComPort); } p.IsWritten = true; break; case ParameterTagId.ClearManipulation: if (GetTextAsValue(p.TargetValue)) { WriteClearManipulation(station.ComPort); } p.IsWritten = true; break; case ParameterTagId.ClearHistoricEnergy: if (GetTextAsValue(p.TargetValue)) { WriteEraseHistoricEnergy(station.ComPort); } p.IsWritten = true; break; case ParameterTagId.ClearEvents: if (GetTextAsValue(p.TargetValue)) { WriteClearEvent(station.ComPort); } p.IsWritten = true; break; case ParameterTagId.ClearError: if (GetTextAsValue(p.TargetValue)) { WriteClearError(station.ComPort); } p.IsWritten = true; break; case ParameterTagId.PinCode: WritePinCode(station.ComPort, p.TargetValue); p.IsWritten = true; break; case ParameterTagId.InfoInterfaceActivated: WriteInfoInterfaceStatus(station.ComPort, p.TargetValue); p.IsWritten = true; break; case ParameterTagId.HistoricValuesEnabled: WriteHistoricEnergyEnabled(station.ComPort, p.TargetValue); p.IsWritten = true; break; case ParameterTagId.PinProtectionEnabled: WritePinProtectionEnabled(station.ComPort, p.TargetValue); p.IsWritten = true; break; case ParameterTagId.PowerOnLcdEnabled: WritePowerOnLcdEnabled(station.ComPort, p.TargetValue); p.IsWritten = true; break; case ParameterTagId.AutomaticPinFallback: WriteAutoPinFallback(station.ComPort, p.TargetValue); p.IsWritten = true; break; case ParameterTagId.SignatureCheck: WriteEnableEdl40(station.ComPort); p.IsWritten = true; break; } } MeterRepository.Update(meter); StationRepository.SetPortComParamStatus(station.ComPort, PortComParamStatus.WriteOk); } catch (Exception ex) { StationRepository.SetPortComParamStatus(station.ComPort, PortComParamStatus.WriteFailed); Log.ErrorException("Sml Com write failed", ex); } if (isReadBackEnabled) { ReadData(station, token); } }
public void Update(Station station) { Clients.All.Update(station); }