예제 #1
0
        public void Read <T>(IKpk12MeasuringUnit unit, IReadValue <T> value, string source,
                             bool silent = false)
        {
            ThrowIfRegisterNull(value.Register);

            var register = value.Register;

            try
            {
                unit.Read(register);

                var converted = (Register <T>)register;
                value.Actual = converted.Value;

                if (silent)
                {
                    return;
                }
                var message = _formatter.For(register)
                              .With(value)
                              .ModuleId(unit.UnitIdRegister.Value)
                              .Response();
                _logger.Info(message, source);
            }
            catch (Exception exception)
            {
                _logger.Error(string.Format("Ошибка чтения регистра '{0}' модуль '{1}'", register.Address, unit.UnitIdRegister.Value), source, exception);
                throw;
            }
        }
예제 #2
0
        public void Write <T>(IKpk12MeasuringUnit unit, IWriteValue <T> value, string source)
        {
            ThrowIfRegisterNull(value.Register);

            var register = value.Register;

            try
            {
                ((Register <T>)register).Value = value.Expected;
                unit.Write(register);

                var message = _formatter.For(register)
                              .With(value)
                              .ModuleId(unit.UnitIdRegister.Value)
                              .Request();
                _logger.Info(message, source);
            }
            catch (Exception exception)
            {
                _logger.Error(string.Format("Ошибка записи регистра '{0}' модуль '{1}'", register.Address, unit.UnitIdRegister.Value), source, exception);
                throw;
            }
        }
예제 #3
0
 public RegisterWorker(IRegisterWriter writer, IKpk12MeasuringUnit unit)
 {
     _writer = writer;
     _unit   = unit;
 }
예제 #4
0
 public static RegisterWorker Use(this IKpk12MeasuringUnit unit, IRegisterWriter writer)
 {
     return(new RegisterWorker(writer, unit));
 }