private void filePickerButton_Click(object sender, RoutedEventArgs e) { // Create the OpenFIleDialog object Microsoft.Win32.OpenFileDialog openPicker = new Microsoft.Win32.OpenFileDialog(); // Add file filters openPicker.DefaultExt = ".911"; openPicker.Filter = "Файлы дискретных и аналоговых данных с гарнисажных печей|*.911"; // Display the OpenFileDialog by calling ShowDialog method Nullable <bool> result = openPicker.ShowDialog(); // Check to see if we have a result if (result == true) { // Application now has read/write access to the picked file // I am saving the file path to a textbox in the UI to display to the user // as well as a Globals.fileName variable to pass to a method WriteLine("Имя прежде выбранного файла : {0} ", Globals.fileName); filePathTextBox.Text = openPicker.FileName.ToString(); Globals.fileName = filePathTextBox.Text; //проверка содержимого файла,его первого блока WriteLine(Globals.fileName); Globals.readAllTheBytes(Globals.fileName); ReadParamFromDisk packedParameters = new ReadParamFromDisk(Globals.fileName); //повторное чтение файла параметров //в память с инструментарием для работы с ним. app.unpackedParameters = new TickParamsAll(packedParameters); //получение распакованного массива this._remembranceOfFileName.fileName = Globals.fileName; //TimeMover.numberOfSecond = TimeMover.numberOfSecond; //voltagePlotting(ParameterName.Напряжение_дуги, voltageGraph); //currentPlotting(ParameterName.Ток_общ, currentGraph); //vacuumPlotting(ParameterName.Вакуум, vacuumGraph); //waterPlotting(ParameterName.Расход_воды, waterGraph); } }
public TickParamsAll(ReadParamFromDisk packedParameters) //ReadParamFromDisk is a custom //collection of packed blocks, so we can traverse it and inflate it into an array. { this.packedParameters = packedParameters; this.inflatedParameters = new byte[Constants.SecondsInADay * Constants.ParamsBlockLengthInBytes]; inflate(); }
public void Startup_Procedure(object x, System.EventArgs e) { Console.WriteLine("Запуск главной формы"); Application app = Current; //Считываем с диска файл с параметрами,имя файла запомнено с помощью //механизма ApplicationSettingBase mySettings = new MyUserSettings(); scull_Furnaces_Main_Window = new Scull_Furnaces_Main_Window(); scull_Furnaces_Main_Window.InitializeComponent(); //Устанавливаем имя считываемого файла из сохранённого значания, оно будет обновлятся //после диалога с пользователем TabControlData[0].canvasForDiplayedPlot = scull_Furnaces_Main_Window.voltageGraph; TabControlData[1].canvasForDiplayedPlot = scull_Furnaces_Main_Window.currentGraph; TabControlData[2].canvasForDiplayedPlot = scull_Furnaces_Main_Window.vacuumGraph; TabControlData[3].canvasForDiplayedPlot = scull_Furnaces_Main_Window.waterGraph; scull_Furnaces_Main_Window._remembranceOfFileName.fileName = mySettings.FileName; //записываем его в глобальное поле как для доступа из консольной программы Globals.fileName = scull_Furnaces_Main_Window._remembranceOfFileName.fileName; WriteLine("Считанное имя файла : {0}", Globals.fileName); scull_Furnaces_Main_Window._remembranceOfFileName.PropertyChanged += rememberTheChosenFileName; Globals.readAllTheBytes(Globals.fileName); //проверка файла через чтение его в память и проверку первого блока ReadParamFromDisk packedParameters = new ReadParamFromDisk(Globals.fileName); //повторное чтение файла параметров //в память с инструментарием для работы с ним. unpackedParameters = new TickParamsAll(packedParameters); //получение распакованного массива //File.WriteAllBytes(Globals.fileName+".bin", unpackedParameters.inflatedParameters); //запись на диск //распакованного массива //scull_Furnaces_Main_Window.maxValueForCurrentOnYAxis.Text = mySettings.UpperLimitForCurrent; scull_Furnaces_Main_Window.maxValueForCurrentOnYAxis.DataContext = mySettings; scull_Furnaces_Main_Window.maxValueForVoltageOnYAxis.DataContext = mySettings; scull_Furnaces_Main_Window.begTimeOnXAxis.clockWatch.Alarm_On = false; //не обнавлять график при начальной установке диапазона времени для отображения scull_Furnaces_Main_Window.endTimeOnXAxis.clockWatch.Alarm_On = false; //не обнавлять график при начальной установке диапазона времени для отображения scull_Furnaces_Main_Window.begTimeForVoltageOnXAxis.clockWatch.Alarm_On = false; scull_Furnaces_Main_Window.endTimeForVoltageOnXAxis.clockWatch.Alarm_On = false; scull_Furnaces_Main_Window.begTimeOnXAxis.Ticks.Text = mySettings.TimeLowerBoundaryForTheCurrent.ToString(); scull_Furnaces_Main_Window.endTimeOnXAxis.Ticks.Text = mySettings.TimeUpperBoundaryForTheCurrent.ToString(); scull_Furnaces_Main_Window.begTimeForVoltageOnXAxis.Ticks.Text = mySettings.TimeLowerBoundaryForTheVoltage.ToString(); scull_Furnaces_Main_Window.endTimeForVoltageOnXAxis.Ticks.Text = mySettings.TimeUpperBoundaryForTheVoltage.ToString(); scull_Furnaces_Main_Window.begTimeOnXAxis.clockWatch.AlarmProcedure += scull_Furnaces_Main_Window.setMinTimeValue; scull_Furnaces_Main_Window.endTimeOnXAxis.clockWatch.AlarmProcedure += scull_Furnaces_Main_Window.setMaxTimeValue; scull_Furnaces_Main_Window.begTimeForVoltageOnXAxis.clockWatch.AlarmProcedure += scull_Furnaces_Main_Window.setMinTimeForVoltageValue; scull_Furnaces_Main_Window.endTimeForVoltageOnXAxis.clockWatch.AlarmProcedure += scull_Furnaces_Main_Window.setMaxTimeForVoltageValue; scull_Furnaces_Main_Window.momentOfTime.clockWatch.AlarmProcedure += scull_Furnaces_Main_Window.setParameterValueOnTheTab; scull_Furnaces_Main_Window.momentOfTime.clockWatch.AlarmProcedure += testAlarm; scull_Furnaces_Main_Window.begTimeOnXAxis.clockWatch.Alarm_On = true; //обновлять график при изменении нижней границы диапазона времени scull_Furnaces_Main_Window.endTimeOnXAxis.clockWatch.Alarm_On = true; //обновлять график при изменении верхней границы диапазона времени scull_Furnaces_Main_Window.begTimeForVoltageOnXAxis.clockWatch.Alarm_On = true; scull_Furnaces_Main_Window.endTimeForVoltageOnXAxis.clockWatch.Alarm_On = true; scull_Furnaces_Main_Window.unpackedParameters = this.unpackedParameters; scull_Furnaces_Main_Window.WindowStyle = WindowStyle.ToolWindow; scull_Furnaces_Main_Window.Show(); //Создаём табло с набором дискретных параметров и привязкой каждого из них к свойству parameterState //в обьекте класса ColorSource ParameterAllValues parameterDescription = null; foreach (var pair in ParameterData) { parameterDescription = pair.Value; if (parameterDescription.parameterType == ParameterType.дискретный) { DiscretePlaque btnControl = new DiscretePlaque() { Content = parameterDescription.parameterName }; btnControl.discreteNumber = pair.Key; // the key in the Dictionary remembered ColorSource colorSourceForAParameter = new ColorSource(); //в свойстве parameterState этого объекта храниться состояние дискрета вкл/выкл //опеределяющее цвет привязанного к нему Plaque, информационной таблички-кнопки. parameterDescription.colorBinding.Source = colorSourceForAParameter; parameterDescription.colorBinding.Converter = colorSourceForAParameter; btnControl.SetBinding(Button.BackgroundProperty, parameterDescription.colorBinding); btnControl.Template = (ControlTemplate)scull_Furnaces_Main_Window.FindResource("MyBetterButtonTemplate"); scull_Furnaces_Main_Window.uniGrid.Children.Add(btnControl); } } //Устанаваливаем номер вкладки на окне из сохранённого значения, он будет обновлятся далее //автоматически через привязку BINDING к номеру вкладки в XAML окна scull_Furnaces_Main_Window._typeOfParameters.PropertyChanged += SelectThePageWithParameters; scull_Furnaces_Main_Window._typeOfParameters.PropertyChanged += testSelectPage; scull_Furnaces_Main_Window._typeOfParameters.theNumberOfTab = mySettings.SelectedIndex; TimeMover.numberOfSecond = 0; }
static void Main(string[] s) { if (s.Length > 1 && File.Exists(s[1])) { Globals.fileName = s[1]; } readAllTheBytes(Globals.fileName); //В переменной readValues находится адрес массива в памяти с данными из файла if (!(s.Length > 0 && Enum.IsDefined(typeof(ParameterName), s[0]))) //по названию параметра не выходит { try { Int32 theEnteredNumber; //parameterNumber = (ParameterName)Int32.Parse(s[0]); bool itIsANumber = Int32.TryParse(s[0], out theEnteredNumber); //проверим с помощью TryParse, //возможно,введён номер параметра вместо его символьного наименования if (itIsANumber & Enum.IsDefined(typeof(ParameterName), theEnteredNumber)) { parameterName = (ParameterName)theEnteredNumber; } else { parameterName = ParameterName.Напряжение_дуги; throw new Exception(); } } catch (Exception e) { //Если введено неверное название параметра Console.WriteLine("Задайте имя(или № байта) параметра и исходный файл в командной строке!"); Environment.Exit(0); } } else { parameterName = (ParameterName)Enum.Parse(typeof(ParameterName), s[0]); } Console.Write("Имя введённого параметра: {0} ", parameterName); Console.WriteLine("Тип параметра {0}", Constants.ParameterData[(int)(parameterName)].parameterType); if (s.Length > 1 && !File.Exists(s[1])) { Console.WriteLine("Отсутствует указанный файл параметров"); return; } if (s.Length > 2) { Console.WriteLine("Будем вводить стартовое время для выдачи параметра"); try { Globals.startOfParameterOutput = TimeSpan.Parse(s[2]); Console.WriteLine("{0} --> {1}", s[2], Globals.startOfParameterOutput.ToString("c")); } catch (FormatException) { Console.WriteLine("{0}: Неправильный формат для начала времени выводв", s[2]); } catch (OverflowException) { Console.WriteLine("{0}: Overflow", s[2]); } } Globals.startTimeOfFileRecording = new DateTime(Int32.Parse(Globals.fileName.Substring(0, 4)), Int32.Parse(Globals.fileName.Substring(4, 2)), Int32.Parse(Globals.fileName.Substring(6, 2))); Globals.startTimeOfFileRecording += Globals.deltaForStartingOfRecord; Console.WriteLine("Start time of writing to the file: {0:D}", Globals.startTimeOfFileRecording); // Would be better new TickParam:IEnumerator(string Globals.fileName) try { int FileMarkerIndex = 0; for (int i = 0; i < Constants.ParamsBlockLengthInBytes; i++) { FileMarkerIndex = 2 * i; if (i != readValues[FileMarkerIndex]) { throw new Exception(); } //FileMarkerIndex++; } if (readValues[FileMarkerIndex + 2] != 0xFF || readValues[FileMarkerIndex + 3] != 0xFB) { throw new Exception(); } } catch { MessageBox.Show("Неверная полная запись в начале файла!"); } //File O.K, let's read it ReadParamFromDisk packedParameters = new ReadParamFromDisk(Globals.fileName); TickParamsAll unpackedParameters = new TickParamsAll(packedParameters); #if OUTPUT_TO_THE_SCREEN Console.WriteLine("Output to the screen from the fully inflated file of parameters"); //выдадим всё в файл! Console.WriteLine("Длина массива = {0}", unpackedParameters.inflatedParameters.Length); //FileStream fs = File.Open(Globals.fileName+".txt",FileMode.Create); File.WriteAllBytes(Globals.fileName + ".bin", unpackedParameters.inflatedParameters); string unitOfMeasure = (string)Constants.ParameterData[(int)(parameterName)].parameterUnit.ToString(); DateTime realDateTime = Globals.startTimeOfFileRecording + TimeSpan.FromSeconds(Globals.startOfParameterOutput.TotalSeconds); short intAssembled; bool stepMode = true; Console.WriteLine("Нажмите любую клавишу для пошагового чтения или ENTER для непрерывной выдачи"); for ( int iParam = (int)parameterName / (Constants.ParameterData[(int)(parameterName)].parameterType == ParameterType.аналоговый ? 1:10) + (int)Globals.startOfParameterOutput.TotalSeconds * Constants.ParamsBlockLengthInBytes; iParam < unpackedParameters.inflatedParameters.Length; iParam = iParam + Constants.ParamsBlockLengthInBytes) { //Console.WriteLine("Номер ячейки = {0}",iParam); //обеспечиваем построчную выдачу на экран if (stepMode) { if (Console.ReadKey(true).Key == ConsoleKey.Enter) { stepMode = !stepMode; } } else if (Console.KeyAvailable && ((Console.ReadKey(true).Key == ConsoleKey.Enter) || (Console.ReadKey(true).Key == ConsoleKey.Spacebar))) { stepMode = !stepMode; } /* * for(int i=127;i<unpackedParameters.inflatedParameters.Length;i=i+Constants.ParamsBlockLengthInBytes) * Console.WriteLine( unpackedParameters.inflatedParameters[i]); */ //Выдача на экран построчно заданного в командной строке параметра из заданного файла с заданного момента if (Constants.ParameterData[(int)(parameterName)].parameterType == ParameterType.аналоговый) { intAssembled = BitConverter.ToInt16(unpackedParameters.inflatedParameters, iParam); //Globals.swapBytes(ref intAssembled); switch (Constants.ParameterData[(int)(parameterName)].parameterUnit) { case ParameterUnit._: unitOfMeasure = ""; break; case ParameterUnit.м3_ч: unitOfMeasure = "м3/ч"; break; case ParameterUnit.мм_рт_ст: if (intAssembled < 0) { unitOfMeasure = "мм рт.ст"; intAssembled &= 0x777; } else { unitOfMeasure = "мк"; } break; } Console.WriteLine("Время с начала суток: {0} Значение {1} : {2:N1}{3}", realDateTime, parameterName, (float)intAssembled / 10, unitOfMeasure); } else { bool onOff = ((byte)Constants.ParameterData[(int)(parameterName)].bitMask & unpackedParameters.inflatedParameters[iParam]) > 0; unitOfMeasure = ""; Console.WriteLine("Время с начала суток: {0} Значение {1} : {2:N1}{3}", realDateTime, parameterName, onOff, unitOfMeasure); } realDateTime = realDateTime.AddSeconds(1.0); } #endif }
public void Startup_Procedure(object x, System.EventArgs e) { Console.WriteLine("Запуск главной формы"); Application app = Current; //Считываем с диска файл с параметрами,имя файла запомнено с помощью //механизма ApplicationSettingBase mySettings = new MyUserSettings(); scull_Furnaces_Main_Window = new Scull_Furnaces_Main_Window(); scull_Furnaces_Main_Window.InitializeComponent(); //Устанавливаем имя считываемого файла из сохранённого значания, оно будет обновлятся //после диалога с пользователем scull_Furnaces_Main_Window._remembranceOfFileName.fileName = mySettings.FileName; //записываем его в глобальное поле как для доступа из консольной программы Globals.fileName = scull_Furnaces_Main_Window._remembranceOfFileName.fileName; WriteLine("Считанное имя файла : {0}", Globals.fileName); scull_Furnaces_Main_Window._remembranceOfFileName.PropertyChanged += rememberTheChosenFileName; Globals.readAllTheBytes(Globals.fileName); //проверка файла через чтение его в память и проверку первого блока ReadParamFromDisk packedParameters = new ReadParamFromDisk(Globals.fileName); //повторное чтение файла параметров //в память с инструментарием для работы с ним. unpackedParameters = new TickParamsAll(packedParameters); //получение распакованного массива //File.WriteAllBytes(Globals.fileName+".bin", unpackedParameters.inflatedParameters); //запись на диск //распакованного массива //scull_Furnaces_Main_Window.maxValueForCurrentOnYAxis.Text = mySettings.UpperLimitForCurrent; scull_Furnaces_Main_Window.maxValueForCurrentOnYAxis.DataContext = mySettings; scull_Furnaces_Main_Window.begTimeOnXAxis.clockWatch.Alarm_On = false; //не обнавлять график при начальной установке диапазона времени для отображения scull_Furnaces_Main_Window.endTimeOnXAxis.clockWatch.Alarm_On = false; //не обнавлять график при начальной установке диапазона времени для отображения scull_Furnaces_Main_Window.begTimeOnXAxis.Ticks.Text = mySettings.TimeLowerBoundaryForTheCurrent.ToString(); scull_Furnaces_Main_Window.endTimeOnXAxis.Ticks.Text = mySettings.TimeUpperBoundaryForTheCurrent.ToString(); scull_Furnaces_Main_Window.begTimeOnXAxis.clockWatch.AlarmProcedure += scull_Furnaces_Main_Window.setMinTimeValue; scull_Furnaces_Main_Window.endTimeOnXAxis.clockWatch.AlarmProcedure += scull_Furnaces_Main_Window.setMaxTimeValue; scull_Furnaces_Main_Window.begTimeOnXAxis.clockWatch.Alarm_On = true; //обновлять график при изменении нижней границы диапазона времени scull_Furnaces_Main_Window.endTimeOnXAxis.clockWatch.Alarm_On = true; //обновлять график при изменении верхней границы диапазона времени scull_Furnaces_Main_Window.WindowStyle = WindowStyle.ToolWindow; scull_Furnaces_Main_Window.Show(); ParameterAllValues parameterDescription = null; foreach (var pair in ParameterData) { parameterDescription = pair.Value; if (parameterDescription.parameterType == ParameterType.дискретный) { DiscretePlaque btnControl = new DiscretePlaque() { Content = parameterDescription.parameterName }; btnControl.discreteNumber = pair.Key; // the key in the Dictionary remembered //Binding colorBindingForAParameter = new Binding("parameterState"); //to the parameterDesription !!! Binding colorBindingForAParameter = parameterDescription.colorBinding; ColorSource colorSourceForAParameter = new ColorSource(); colorBindingForAParameter.Source = colorSourceForAParameter; //put the Binding into initial state, setting the parameterState in colorSourceForAParameter in accordance with the parameter value being read from disk colorBindingForAParameter.Converter = colorSourceForAParameter; btnControl.SetBinding(Button.BackgroundProperty, colorBindingForAParameter); btnControl.Template = (ControlTemplate)scull_Furnaces_Main_Window.FindResource("MyBetterButtonTemplate"); //btnControl.discreteNumber - ?? how to define ? the number in [] scull_Furnaces_Main_Window.uniGrid.Children.Add(btnControl); } } //Устанаваливаем номер вкладки на окне из сохранённого значения, он будет обновлятся далее //автоматически через привязку BINDING к номеру вкладки в XAML окна scull_Furnaces_Main_Window._typeOfParameters.PropertyChanged += rememberThePageWithParameters; scull_Furnaces_Main_Window._typeOfParameters.theNumberOfTab = mySettings.SelectedIndex; TimeMover.numberOfSecond = 1; //Начинаем просмотр дискретов с 1 секунды! }