Пример #1
0
        /// <summary>
        /// Поиск всех параметров по пользовательскому запросу в DataSet.РасчетныеПараметры
        /// (с одним входным параметром являющимся именем расчётной величины).
        /// </summary>
        /// <remarks></remarks>
        private void ВычислитьРасчетныеПараметры()
        {
            // Иммитатор()' отладка
            try
            {
                ВычислениеОсновных();

                // занести вычисленные значения
                // вместо последовательного извлечения применяется обход по коллекции
                // .CalculatedDataTable.FindByИмяПараметра(conCalc1).ВычисленноеЗначениеВСИ = Calc1
                // ...
                // .CalculatedDataTable.FindByИмяПараметра(conCalc10).ВычисленноеЗначениеВСИ = Calc10

                foreach (string keysCalc in calcParam.CalcDictionary.Keys.ToArray())
                {
                    mProjectManager.CalculatedDataTable.FindByИмяПараметра(keysCalc).ВычисленноеЗначениеВСИ = calcParam.CalcDictionary[keysCalc];
                }

                // расчетные вспомогательные ...
            }
            catch (Exception ex)
            {
                // перенаправление встроенной ошибки
                DataError?.Invoke(this, new DataErrorEventArgs(ex.Message, $"Процедура: {nameof(ВычислитьРасчетныеПараметры)}"));
            }
        }
Пример #2
0
        /* Public */

        public Controller(SerialPortStream port)
        {
            Buffer                    = new StringBuilder(16);
            TerminalQueue             = new BlockingCollectionQueue();
            DataQueue                 = new BlockingCollectionQueue();
            Port                      = port;
            Port.DataReceived        += Port_DataReceived;
            DataErrorEventThreadStart = (object x) => { DataError?.Invoke(this, (DataErrorEventArgs)x); };
            DeviceErrorThreadStart    = (object x) => { DeviceError?.Invoke(this, (TerminalEventArgs)x); };
        }
Пример #3
0
        /// <summary>
        /// Поиск всех параметров по пользовательскому запросу в DataSet.MeasurementDataTable
        /// (с одним входным параметром являющимся именем связи для реального измеряемого канала Сервера).
        /// </summary>
        /// <remarks></remarks>
        private void ИзвлечьЗначенияИзмеренныхПараметров()
        {
            try
            {
                var _with2 = mProjectManager.MeasurementDataTable;
                //'расчетные параметры
                //Tбокса = .FindByИмяПараметра(conTбокса).ЗначениеВСИ '	температура в боксе
                //Барометр = .FindByИмяПараметра(conБарометр).ЗначениеВСИ '	БРС1-М
                //'учет атмосферного давления - относительного давления воздуха
                //B = Барометр / кон735_6
                //ДавлениеВоздухаНаВходе = .FindByИмяПараметра(conДавлениеВоздухаНаВходе).ЗначениеВСИ + B

                // вместо последовательного извлечения применяется обход по коллекции
                // inputArg.ARG1 = .FindByИмяПараметра(InputArgument.conARG1).ЗначениеВСИ
                // ...
                // inputArg.ARG10 = .FindByИмяПараметра(InputArgument.conARG10).ЗначениеВСИ
                //inputArg.Барометр = .FindByИмяПараметра("Барометр").ЗначениеВСИ
                //inputArg.InputArgDictionary("Барометр") = 100

                foreach (string keysArg in inParam.InputArgDictionary.Keys.ToArray())
                {
                    double Si = _with2.FindByИмяПараметра(keysArg).ЗначениеВСИ;
                    inParam.InputArgDictionary[keysArg] = _with2.FindByИмяПараметра(keysArg).ЗначениеВСИ;
                }

                //' иттератор по коллекции как KeyValuePair objects.
                //For Each kvp As KeyValuePair(Of String, Double) In inputArg.InputArgDictionary
                //    'Console.WriteLine("Key = {0}, Value = {1}", kvp.Key, kvp.Value)
                //    inputArg.InputArgDictionary(kvp.Key) = .FindByИмяПараметра(kvp.Key).ЗначениеВСИ
                //Next

                //For Each value As Double In inputArg.InputArgDictionary.Values
                //    Console.WriteLine("Value = {0}", value)
                //Next
            }
            catch (Exception ex)
            {
                //перенаправление встроенной ошибки
                DataError?.Invoke(this, new DataErrorEventArgs(ex.Message, $"Процедура: {nameof(ИзвлечьЗначенияИзмеренныхПараметров)}"));
            }
        }
Пример #4
0
 public void BlockingRead(byte[] buffer, int offset, int count)
 {
     while (count > 0)
     {
         // SerialPort.Read() blocks until at least one byte has been read, or SerialPort.ReadTimeout milliseconds
         // have elapsed. If a timeout occurs a TimeoutException will be thrown.
         // Because SerialPort.Read() blocks until some data is available this is not a busy loop,
         // and we do NOT need to issue any calls to Thread.Sleep().
         try
         {
             int bytesRead = mPort.Read(buffer, offset, count);
             offset += bytesRead;
             count  -= bytesRead;
         }
         catch (Exception e)
         {
             PrintInformation("ERROR: reading UART: {0}", e.Message);
             DataError?.Invoke(this, EventArgs.Empty);
             return;
         }
     }
 }
Пример #5
0
        /// <summary>
        /// Получить значения параметров, используемых как настраиваемые глобальные переменные.
        /// </summary>
        /// <remarks></remarks>
        public void ПолучитьЗначенияНастроечныхПараметров()
        {
            if (Manager.TuningDataTable == null)
            {
                return;
            }

            bool success = false;

            // Вначале проверяется наличие расчетных параметров в базе
            //arrНастроечныеПараметры
            foreach (string имяНастроечногоПараметра in tunParam.TuningDictionary.Keys.ToArray())
            {
                success = false;

                foreach (BaseFormDataSet.НастроечныеПараметрыRow rowНастроечныйПараметр in Manager.TuningDataTable.Rows)
                {
                    if (rowНастроечныйПараметр.ИмяПараметра == имяНастроечногоПараметра)
                    {
                        success = true;
                        break;
                    }
                }

                if (success == false)
                {
                    // перенаправление встроенной ошибки
                    DataError?.Invoke(this, new DataErrorEventArgs(string.Format("Настроечный параметр {0} в базе параметров не найден!", имяНастроечногоПараметра), description));
                    // не ловит в конструкторе
                    //MessageBox.Show(Message, Description, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                    return;
                }
            }

            // проверить наличие в расчетном модуле переменных, соответствующих расчетным настроечным
            // и присвоение им значений
            success = true;
            try
            {
                foreach (BaseFormDataSet.НастроечныеПараметрыRow rowНастроечныйПараметр in Manager.TuningDataTable.Rows)
                {
                    if (tunParam.TuningDictionary.Keys.Contains(rowНастроечныйПараметр.ИмяПараметра))
                    {
                        // настроить какието внутренние переменные
                        switch (rowНастроечныйПараметр.ИмяПараметра)
                        {
                        //case TuningParameter.conA:
                        //    break;

                        // так не делать т.к. тоже самое в цикле далее: tuningParam.A.ЦифровоеЗначение = rowНастроечныйПараметр.ЦифровоеЗначение
                        // так можно: Dim Temp As Double = rowНастроечныйПараметр.ЦифровоеЗначение

                        //Case "GвМПитоПриводить"
                        //    'GвМПитоПриводить = rowНастроечныйПараметр.ЦифровоеЗначение
                        //    'n1ГПриводить = Convert.ToInt32(rowНастроечныйПараметр.ЛогическоеЗначение)
                        //    GвМПитоПриводить = rowНастроечныйПараметр.ЛогическоеЗначение
                        //    Exit Select
                        //Case "GвМПолеДавленийПриводить"
                        //    GвМПолеДавленийПриводить = rowНастроечныйПараметр.ЛогическоеЗначение
                        //    Exit Select
                        //Case "n1ГПриводить"
                        //    n1ГПриводить = rowНастроечныйПараметр.ЛогическоеЗначение
                        //    Exit Select
                        //Case "nИГ-03ГПриводить"
                        //    nИГ_03ГПриводить = rowНастроечныйПараметр.ЛогическоеЗначение

                        default:
                            break;
                        }
                    }
                    else
                    {
                        success = false;
                        // перенаправление встроенной ошибки
                        DataError?.Invoke(this, new DataErrorEventArgs(string.Format("Настроечный параметр {0} не имеет соответствующей переменной в модуле расчета!", rowНастроечныйПараметр.ИмяПараметра), description));
                        //не ловит в конструкторе
                        //MessageBox.Show(Message, Description, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                    }
                }

                if (success == false)
                {
                    return;
                }

                // занести значения настроечных параметров
                var _with1 = Manager.TuningDataTable;
                foreach (string keysTuning in tunParam.TuningDictionary.Keys.ToArray())
                {
                    if (_with1.FindByИмяПараметра(keysTuning).ЛогикаИлиЧисло)
                    {
                        tunParam.TuningDictionary[keysTuning].ЛогикаИлиЧисло     = true;
                        tunParam.TuningDictionary[keysTuning].ЛогическоеЗначение = _with1.FindByИмяПараметра(keysTuning).ЛогическоеЗначение;
                    }
                    else
                    {
                        tunParam.TuningDictionary[keysTuning].ЛогикаИлиЧисло   = false;
                        tunParam.TuningDictionary[keysTuning].ЦифровоеЗначение = _with1.FindByИмяПараметра(keysTuning).ЦифровоеЗначение;
                    }
                }
            }
            catch (Exception ex)
            {
                // перенаправление встроенной ошибки
                DataError?.Invoke(this, new DataErrorEventArgs(ex.Message, description));
                // не ловит в конструкторе
                //MessageBox.Show(fireDataErrorEventArgs, Description, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            }
        }
Пример #6
0
 protected virtual void OnDataError(DataImportDataErrorArgs e)
 {
     DataError?.Invoke(this, e);
 }