/// <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(ВычислитьРасчетныеПараметры)}")); } }
/* 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); }; }
/// <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(ИзвлечьЗначенияИзмеренныхПараметров)}")); } }
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; } } }
/// <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) } }
protected virtual void OnDataError(DataImportDataErrorArgs e) { DataError?.Invoke(this, e); }