示例#1
0
        /// <summary>
        /// Создает экземпляр класса Crate для управления крейтом
        /// </summary>
        /// <param name="csn">Строка - серийный номер крейта</param>
        /// <param name="servIP">IP-адрес LTR-сервера</param>
        /// <param name="ipStatus">Состояние подключения крейта</param>
        /// <param name="crateIP">IP-адрес крейта</param>
        public Crate(string csn, string servIP = "", LTRInfo.CrateIPStatus ipStatus = LTRInfo.CrateIPStatus.OFFLINE, string crateIP = "")
        {
            //переменная для обработки кодов ошибок при работе с крейтом
            _LTRNative.LTRERROR errorCode;

            //сохраняем переданный серийный номер крейта
            this.serialNumber = csn;

            //инициализируем структуру класса TLTR
            tLTR = new _LTRNative.TLTR();
            errorCode = _LTRNative.LTR_Init(ref tLTR);
            LTRInfo.CheckOperationStatus(errorCode, "Ошибка инициализации крейта");

            //передаем серийный номер крейта в управляющую структуру
            tLTR.csn = LTRInfo.GetByteSN(csn);

            //передаем IP-адрес ltr-сервера в управляющую структуру
            if (servIP != "")
                tLTR.saddr = LTRInfo.GetServerIP(servIP);

            //задаем состояние подключия крейта
            this.IPStatus = ipStatus;

            //задаем IP-адрес самого крейта
            this.IPAddress = crateIP;

            //выделяем память для списка модулей крейта
            modules = new List<CrateModule>();

            //получаем информацию о крейте
            GetCrateInfo();

            //получаем список модулей крейта
            GetCrateModules();

            //если крейт двухместный, то оставляем в списке модулей только 2 модуля
            if (this.CrateType == (byte)LTRInfo.CrateType.CRATE_TYPE_LTR021)
                for (int i = this.modules.Count - 1; i > 1; i--)
                    this.modules.RemoveAt(i);
        }
        //Получение списка крейтов
        private void menuItemGetCratesList_Click(object sender, EventArgs e)
        {
            if (sender is ComboBox && !checkBoxGetCratesOnSelect.Checked)
                return;

            ClearFields();

            string servIP = (comboBoxIP.Items.Count == 0 || comboBoxIP.SelectedIndex == -1) ? "127.0.0.1" : serversList[comboBoxIP.SelectedIndex].ServerIP;

            LTRInfo cratesInfo;

            try
            {
                cratesInfo = new LTRInfo(servIP);
            }
            catch (Exception exc)
            {
                MessageBox.Show(String.Format("Ошибка установки соединения с сервером {0}: \n{1}", comboBoxIP.Text, exc.Message), "Ошибка");
                return;
            }

            crates.Clear();

            //добавляем не IP-шные крейты и выключенные
            if (cratesInfo.CratesSerialNumbers.Length != cratesInfo.CratesStatesList.Length)
            {
                bool isContain;
                foreach (string crateSN in cratesInfo.CratesSerialNumbers)
                {
                    isContain = false;
                    foreach (LTRInfo.TIPCRATE_ENTRY_EXTEND csl in cratesInfo.CratesStatesList)
                        if (isContain = csl.serial_number == crateSN)
                            break;
                    if (!isContain)
                        AddCrate(new Crate(crateSN, servIP, LTRInfo.CrateIPStatus.ONLINE, "USB"));
                }
            }

            //теперь добавляем IP-шные
            foreach (LTRInfo.TIPCRATE_ENTRY_EXTEND csl in cratesInfo.CratesStatesList)
            {
                AddCrate(new Crate(csl.serial_number, servIP, csl.status, csl.ip_addr));
            }

            //подключаемся к БД KD2210 для получения конфига, его парсинга и получения точек измерений
            ConnectToDataBase();
        }