예제 #1
0
        public static T Read <T>(this ModbusClient client)
        {
            var typeRegisterMapping = typeof(T)
                                      .GetCustomAttributes(typeof(Model.RegisterMappingAttribute), false)
                                      .OfType <Model.RegisterMappingAttribute>()
                                      .Where(registerMapping => registerMapping.Type == Model.RegisterType.Object)
                                      .First();

            var address = typeRegisterMapping.Addressing == Model.RegisterAddressing.Base1
                ? (int)typeRegisterMapping.Address - 1
                : (int)typeRegisterMapping.Address;

            // TODO: Remove size constraint of 125
            var memory = client.ReadHoldingRegistersRaw(address, Math.Min((int)typeRegisterMapping.Size, 125)).AsMemory().Slice(9);

            return(Model.Reader.Default.Read <T>(memory));
        }