Beispiel #1
0
        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();
     }
 }
Beispiel #3
0
        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);
        }
Beispiel #4
0
 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();
         }
     }
 }
Beispiel #5
0
        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);
        }