public bool CheckSupportPressControllersRange(DeviceRange range) { // Минимальные значения проверяются только для ДИВ if (rangeType == RangeTypeEnum.DIV) { if (SearshController(range.Min_Pa, range.Max_Pa, range.Min_Pa, devicePrecision) < 0) { return(false); } } // и ДА if (rangeType == RangeTypeEnum.DA) { if (SearshController(range.Min_Pa + DeviceRange.VacuumPressure, range.Max_Pa + DeviceRange.VacuumPressure, range.Min_Pa + DeviceRange.VacuumPressure, devicePrecision) < 0) { return(false); } } // Максимальные значения проверяются для всех типов if (SearshController(range.Max_Pa, range.Max_Pa, range.Min_Pa, devicePrecision) < 0) { return(false); } return(true); }
public PD100_Device(string serialNumber, DeviceName name, int metrologicGroup) { try { SerialNumber = serialNumber; Name = name; MetrologicGroupNumber = metrologicGroup; Range = new DeviceRange(GetRangePaByPressureLabel(Name.Range), Name.RangeType); Precision = Convert.ToSingle(Name.Precision); if (Name.Title == "ПД100") { // У ПД100 любого класса точность должна быть не хуже 0.5 TargetPrecision = Precision > 0.5F ? 0.5F : Precision; } else { TargetPrecision = Precision; } TargetVariation = TargetPrecision / 2; OutPort = OutPortEnum.Current; if (Name.OutPortLabel == DeviceName.RS485label || Name.OutPortLabel == "-" + DeviceName.RS485label) { OutPort = OutPortEnum.RS485; } } catch { throw new ParseDeviceNameException(); } }
private List <int> CreatePressureRow() { List <int> row = new List <int>(); int mult = 1; int[] pressureRow = rangeType != RangeTypeEnum.DA ? new int[] { 100, 160, 250, 400, 600 }: new int[] { 60000, 100000, 160000, 250000, 400000 }; bool searshComplete = false; // На основе ряда создаем диапазон изделия и проверяем, поддерживается ли он пневмосистемой while (!searshComplete) { foreach (int item in pressureRow) { // Преобразуем значение из ряда в значение диапазона в Па, // который будет обозначен в названии изделия int rangeLabel = PressRowItemToRangeLabel(item * mult); DeviceRange range = new DeviceRange(rangeLabel, rangeType); // Если текцщий диапазон изделия выходит за границы пневмосистемы if (!CheckSupportPsysRange(range)) { if (range.RangeType == RangeTypeEnum.DA && range.Max_Pa <= pressSystemInfo.RangeHi) { // Для ДА поиск продолжим, если диапазон меньше верхней границы. // Возможно, текущий диапазон просто ниже нижней границы пневмосистемы continue; } else { searshComplete = true; break; } } // Если найден контроллер, поддерживающий диапазон и тип датчика, добавляем в ряд if (CheckSupportPressControllersRange(range)) { row.Add(rangeLabel); } } mult *= 10; } AddAdvancerItem(row); if (row.Count == 0) { row = null; } return(row); }
private void AddAdvancerItem(List <int> row) { // Здесь добавляются диапазоны, не входящие в ряд if (rangeType == RangeTypeEnum.DIV) { int label = 100000; DeviceRange range = new DeviceRange(label, RangeTypeEnum.DIV); if (CheckSupportPsysRange(range) && CheckSupportPressControllersRange(range)) { row.Add(label); row.Sort(); } } }
private bool CheckSupportPsysRange(DeviceRange range) { bool result = false; switch (rangeType) { case RangeTypeEnum.DV: result = pressSystemInfo.CheckRange(0, range.Max_Pa); break; case RangeTypeEnum.DA: result = pressSystemInfo.CheckRange(range.Max_Pa + DeviceRange.VacuumPressure, range.Min_Pa + DeviceRange.VacuumPressure); break; default: result = pressSystemInfo.CheckRange(range.Max_Pa, range.Min_Pa); break; } return(result); }