/// <summary>Получает <see cref="SensorState" /> исходя из значений скорости, числа зубьев и диаметра бандажа</summary> /// <remarks>Формула взята у Антона из комментария в исходниках программы БС-ДПС.</remarks> /// <param name="Speed">Значение скорости (с учётом знака: + вперёд, - назад)</param> /// <param name="CogsCount">Количество импульсов (зубьев ДПС) на оборот колеса</param> /// <param name="BondageDiameter">Диаметре бандажа колеса</param> /// <param name="SensorPlacement">Размещение датчика скорости</param> /// <param name="Channel1Condition">Достоверность измерения канала 1</param> /// <param name="Channel2Condition">Достоверность измерения канала 2</param> /// <returns>Элемент <see cref="SensorState" />, соответствующий заданному состоянию датчика</returns> public static SensorState Get(Double Speed, int CogsCount, Double BondageDiameter, DpsSensorPlacement SensorPlacement, ChannelCondition Channel1Condition = ChannelCondition.Good, ChannelCondition Channel2Condition = ChannelCondition.Good) { return new SensorState { Channel1Condition = Channel1Condition, Channel2Condition = Channel2Condition, Frequency = (int)Math.Round(Math.Abs(Speed) * CogsCount * 16 / 3.6 / 3.14 / BondageDiameter * 1000), Direction = Speed > 0 ? (SensorPlacement == DpsSensorPlacement.Left ? RorationDirection.Clockwise : RorationDirection.Counterclockwise) : (SensorPlacement == DpsSensorPlacement.Right ? RorationDirection.Clockwise : RorationDirection.Counterclockwise) }; }
/// <summary>Получает <see cref="SensorState" /> исходя из значений скорости, числа зубьев и диаметра бандажа</summary> /// <remarks>Формула взята у Антона из комментария в исходниках программы БС-ДПС.</remarks> /// <param name="Speed">Значение скорости (с учётом знака: + вперёд, - назад)</param> /// <param name="CogsCount">Количество импульсов (зубьев ДПС) на оборот колеса</param> /// <param name="BondageDiameter">Диаметре бандажа колеса</param> /// <param name="SensorPlacement">Размещение датчика скорости</param> /// <param name="Channel1Condition">Достоверность измерения канала 1</param> /// <param name="Channel2Condition">Достоверность измерения канала 2</param> /// <returns>Элемент <see cref="SensorState" />, соответствующий заданному состоянию датчика</returns> public static SensorState Get(Double Speed, int CogsCount, Double BondageDiameter, DpsSensorPlacement SensorPlacement, ChannelCondition Channel1Condition = ChannelCondition.Good, ChannelCondition Channel2Condition = ChannelCondition.Good) { return(new SensorState { Channel1Condition = Channel1Condition, Channel2Condition = Channel2Condition, Frequency = (int)Math.Round(Math.Abs(Speed) * CogsCount * 16 / 3.6 / 3.14 / BondageDiameter * 1000), Direction = Speed > 0 ? (SensorPlacement == DpsSensorPlacement.Left ? RorationDirection.Clockwise : RorationDirection.Counterclockwise) : (SensorPlacement == DpsSensorPlacement.Right ? RorationDirection.Clockwise : RorationDirection.Counterclockwise) }); }