_МЕЖДУНАРОДНЫЙ НАУЧНЫЙ ЖУРНАЛ «СИМВОЛ НАУКИ» № 06/2017 ISSN 2410-700Х_
уравнение (2) описывает устойчивое динамическое звено.
Требуемое качество переходных процессов в каждой подсистеме (1) формируется локальными эталонными моделями
dxMi(t)
dt
' = AMi' ) + Вмг' Г (t) , Умг (t) = L xMi (t) ,
(3)
где Aui - гурвицевы матрицы порядка n х пг-; Bui = [0, 0, ..., Kmi]t, Kui = const > 0; r(t) e R - задающие воздействия, ri(t) - кусочно-непрерывные, ограниченные функции; yui(t) e R - выходы эталонов, xui(0) =
XM0i, i = 1, ..., k.
Следуя [1], на выход i-ой подсистемы подключаются фильтр-корректоры:
dXß dt
Fi • xfi (t) + Bfi • Уг (t), Zi (t) = gT xfl (t) + Dfiyx (t), x» = 0,
(4)
с передаточной функцией Wfi(5) = ¿Т {рЕ - Fi) 1В^ + Dfi = (5)/{Т5 + \ ха е Л"1 1, гг(0 е Л,
£¿(5) - гурвицевы полиномы, Т - малые постоянные времени.
На основе методики, изложенной в [1, 2], явный вид технически реализуемого управляющего воздействия в подсистемах имеет следующий вид:
i n
U (t) =
где x =
X h ij (t) + X h x (t - ъ) + X изь
, j=1 j=1 j=1
f n л / л
d~j(t -S.) dt
+ h4ir2(t) + h5i
КО,
(5)
1,'", ( n-1),
y-xf,i -ST,
jxf, j
j=2
т
, h\j, h2j, h3j, h4i, h5i = const > 0, i=1,...,k; j = 1, ...,
n, Ti,j - соответствующие коэффициенты полиномов (Ts + 1.
В работе получен робастный закон управления (5) для многосвязной системы с запаздыванием нейтрального типа, результаты имитационного моделирования подтверждают достижение требуемого качества функционирования.
Список использованной литературы:
1. Eremin E.L., Chepak L.V., Shelenok E.A. Robust control of multi-connected nonlinear system // 2015 International Siberian Conference On Control And Communications, SIBCON 2015 - PROCEEDINGS, Omsk, C. 7147284.
2. Чепак Л.В., Баранова А.Н. Робастное управление аффинной системой с запаздыванием // Математические методы в технике и технологиях. 2016, № 10(92), с. 8 - 11.
© Чепак Л.В., Добровольская Н.Ю., Харченко А.В., 2017
УДК 004514 Шикуть Алла Васильевна
канд. техн. наук, доц. МГТУ им.Н.Э.Баумана г. Москва, РФ, E-mail: alla.shikut@rambler.ru Аристов Борис Константинович ст. преподаватель МГТУ им.Н.Э.Баумана e-mail: aristov-boris@rambler.ru, г. Москва, РФ
ОСОБЕННОСТИ ИСПОЛЬЗОВАНИЯ ВОЗМОЖНОСТЕЙ MS VISUAL STUDIO CLR .NET
В ПРИЛОЖЕНИЯХ НА С++
Аннотация
Статья посвящена особенностям использования возможностей среды программирования MS Visual Studio CLR .NET в приложениях на языке С++. Рассмотрены основные возможности общеязыковой среды выполнения CLR . Показаны отличительные особенности использования управляемого, неуправляемого и
смешанного кода. Рассмотрены особенности, расширяющие возможности CLR для разработки приложений на различных языках программирования. Рассмотрены особенности использования строковых данных в среде смешанного кода CLR. Приведены фрагменты конкретных приложений на языке С++ , использующих графический интерфейс.
Ключевые слова
Приложение, визуальный интерфейс, управляемый, неуправляемый, смешанный код, класс,
конструктор, метаданные.
Введение
Вопросы создания приложений на С++ с использованием графического интерфейса являются актуальными и представляют определённый интерес для разработчиков и пользователей с MS Visual Studio CLR .NET благодаря целому ряду особенностей и достоинств CLR (Common Languge Runtime). В частности принципиально важным является возможность использования среды программирования для разработки приложений на различных языках программирования, в том числе С, С++, C#, Visual Basic, Java и др., ... Кроме того, CLR характеризуется многими отличительными особенностями и возможностями, предоставляющими комфортные удобства разработчикам визуальных приложений. К числу таких особенностей и возможностей визуальной среды относится управляемый код и данные, автоматическая сборка мусора, гарантированная инициализация переменных, контроль типов и проверка допустимости значений аргументов во время выполнения приложения, сокрытие деталей работы, смешанный код, .Всё это позволяет создавать переносимые приложения, что является не мало важным.
Управляемый код и данные
Известно, что код, который используется службами, предоставляемыми общеязыковой средой выполнения CLR, является, управляемым кодом [1,с.23]. Все элементы, используемые в приложении CLR, также являются управляемыми. При этом особенностью управляемого языка программирования является отсутствие привязки к одному конкретному языку программирования (C, С++, С#, VB, Java,...). Таким образом, использование управляемых элементов позволяет сформировать независимый от языка программирования код.
Кроме того, все ограничения, которые накладываются на .NET — код, определяются общей системой типов (Common Type System, СTS). Общая система типов определяет типы и операции, которые могут использоваться кодом, работающим в общеязыковой среде выполнения CLR. В частности, только благодаря общей системе типов, на используемые типы накладывается ограничение единичного наследования реализации. В результате код приложения компилируется во внутренний (собственный) код платформы. Таким образом .NET приложения формируют так называемые метаданные, то есть такие описания кода и данных, которые используются конкретным приложением. Именно благодаря использованию метаданных становится возможным автоматическое преобразование данных общеязыковой средой выполнения CLR при их сохранении.
Метаданные являются одним из основных понятий, на которых базируется платформа .NET , и представляют собой описания используемых в программе типов и методов в стандартном двоичном формате, которые хранятся в одном и том же модуле вместе с кодом программы. Метаданные знают об используемых в программе типах абсолютно всё. Каждый элемент незамедлительно регистрируется в базе метаданных, будь то маленькая и скромная вспомогательная private - переменная или большой и важный public- метод. Компилятор генерирует информацию об управляемых типах автоматически, основываясь на их определении, что позволяет создавать самодостаточные в плане описания типы. Благодаря этому совершенно не важно, на каком языке программирования написан класс, от которого может быть наследование, и пользователя совершенно не должно волновать, из каких языков будет использоваться код. Такая программа может импортировать метаданные путём включения директивы #using.
Память для управляемых данных распределяется и освобождается автоматически. Такое автоматическое освобождение занимаемой памяти называется сборкой мусора. Именно сборка мусора решает все проблемы утечки памяти и им подобные.
Основные возможности общеязыковой среды выполнения CLR
Основные возможности общеязыковой среды выполнения CLR можно сформулировать следующим образом:
- автоматическая сборка мусора, что избавляет программиста от того, чтобы помнить о вызовах деструкторов и освобождении памяти, занимаемой объектами;
- гарантированная инициализация переменных, контроль типов и проверка допустимости значений аргументов во время исполнения приложения, что в свою очередь позволяет защитить систему от неправильно работающих конструкций, тем самым повышая её надёжность; при механизм контроля доступа в С++ обеспечивает защиту от случайности;
- сокрытие деталей работы с элементами операционной системы, включая многозадачность, пользовательский интерфейс и управление ресурсами, что позволяет абстрагироваться от деталей работы с конкретной операционной системой и создавать переносимые приложения;
- возможность создавать и использовать смешанный код, то есть возможность использовать управляемые типы данных наряду с обычными типами для языка С++ и любого другого языка программирования из списка допустимых (C, С++, С#, VB, Java,...).
Основные объекты CLR- приложений
Основными объектами в приложениях на С++ в CLR являются:- управляемые типы, такие как классы, структуры, массивы и указатели; - строки; - делегаты и события; - метаданные.
При этом следует иметь в виду, что для поддержки автоматической сборки мусора и безопасной передачи данных между различными частями системы необходимо, чтобы среда CLR владела полной информацией обо всех используемых типах данных.
Объявление управляемого типа в общеязыковой среде выполнения CLR производится с помощью ключевых слов _gc или _value.
Идентификатор _gc применяется для объявления сложных типов, в том числе классов, массивов и указателей, размещаемых только в управляемой куче CLR. Ключевое слово _gc перед объявлением класса сообщает компилятору, что класс является управляемым и подчиняется всем правилам CLR.
Также как и для всех объектов управляемых типов, память для управляемых массивов выделяется в куче CLR. Такие массивы могут содержать переменное число элементов и всегда инициализируются при создании.
В управляемой среде используются специальные указатели на управляемые объекты. Такие указатели позволяют зафиксировать объект в памяти и сделать его неперемещаемым до тех пор, пока такой указатель существует как объект и его значение не равно нулю.
Идентификатор _value позволяет объявлять управляемые типы, которые в отличие от _gc- типов, могут размещаться как в управляемой куче, так и в стеке программы. С помощью идентификатора _value можно объявлять как классы, структуры, так и управляемые перечислимые типы. Например:
-value class cl{int a;};
-value struct st{int a;};
-value enum en : {Eni, En2};
Решение задачи использования управляемого класса в CLR происходит с помощью специального механизма, который находится в классе Form. Но чтобы добраться до этого механизма, необходимо сначала объявить ссылку на этот класс, а затем через нее добраться до нужного члена класса.
Формирование ссылки на класс происходит не само по себе, а с помощью утилиты gcnew, которая запускает специальную программу - конструктор класса, который в свою очередь создаёт в выделенной утилитой памяти экземпляр класса, чтобы с ним можно было работать. Конструктор всегда имеет тоже имя, что и класс, для которого он создаётся. Это обычная функция, которая выполняет определённые действия по инициализации членов данных класса.
Пример использования gcnew:
String А s= gcnew String ("'');
_МЕЖДУНАРОДНЫЙ НАУЧНЫЙ ЖУРНАЛ «СИМВОЛ НАУКИ» № 06/2017 ISSN 2410-700Х_
Строки
Особого внимания при создании приложений в среде CLR заслуживают строки. С одной стороны строки в CLR представляются классом System::String и ничем особенным не выделяются среди других объектов, за исключением нового префикса для объявления строковых констант - " S " или " L " . Префикс " S " обозначает управляемую строковую константу, имеющую тип System::String а , а префикс " L " обозначает большую " Large" управляемую строковую константу, имеющую тип System ::String а. С другой стороны использование строк при разработке приложений в управляемой среде является достаточно большой проблемой, поскольку требуется производить преобразования из разряда управляемых символов в разряд ASCII- символов и наоборот.
Пример использования управляемого кода для трёх объявляемых строк:
#using System;;String;
void test() {
String а si = "123"; String As2 = L"456"; String As3 = S"789";
}
Доступ к управляемым строкам как к обычным неуправляемым символам может быть осуществлён следующим образом:
#include <string.h>
#include<vcclr.h>
using namespace System::Text;
void text(System::String As) {
//wide characters - для расширенных символов wchar-t-pin Aws = PtrTostringChars(s); wslen(ws); // ASCII characters- для ASCII символов ^ar mas_gc[] = Encoding::ASCII->GetBytes(s); сhar _pin Aas = &mas[0]; strlen(as);
}
Тип wchar_t
Особую роль при разработке приложений в общеязыковой среде выполнения CLR с визуальным интерфейсом играет кодировка символов. С целью расширения возможностей использования среды проектирования для различных языков программирования, пользователю предоставляетс явозможность применение расширенных символов Unicodе.
Получение расширенных символов Unicodе обеспечивает использование типа wchar_t. Расширенный символ - это двухбайтовый код символа для кодирования символов в различных языках программирования. Размера длины кода символа хватает чтобы закодировать символы в любом языке ( в отличие от однобайтового кода таблицы ASCII). Такая система кодирования называется Unicodе. Кодирование этими символами относится к типу wchar_t.
Строка символов представляет собой массив wchar_t, а указателем на такую строку( или начало массива) является указатель wchar_t *. Любой ASCII символ можно представить в расширенной кодировке, добавив к нему символ " L ". Например, ' L\' - это признак конца строки в новой кодировке (NULL -символ). Таким образом, можно представить любую ASCII - последовательность - строку в новой
_МЕЖДУНАРОДНЫЙ НАУЧНЫЙ ЖУРНАЛ «СИМВОЛ НАУКИ» № 06/2017 ISSN 2410-700Х_
кодировке, предваряя её символом" L ".(от слова Large -широкий). Например, «L"Hello". Так при выводе результата в компонент textBox-> text c использованием Unicodе получим:
textBox1->rext = L"TF = " + tf;. где String Af.
В итоге получим следующий оператор для строки tf в новой кодиовке :
textBox1 -> Text = SystemA ConvertToString (text_tf);
Преобразования
Кроме стандартных способов преобразования таких как ConvertToString , ConvertToDouble, ConvertToInt32, ConvertToFloat, ConvertToChr следует иметь ввиду другие возможные способы преобразования символов и строк [1,с.568]:
1. Перевод из char в String:
char *a = "Перевод из char в string" String As = gcnew String(a); this -> textBox1 ->Text =s;
2. Перевод из wchar_t в String:
wchar_t un[] = L" Это символы Unicoda"); String As = gcnew String(un);
this -> textBox1 ->Text ="// Это символы Unicoda»);
3. Перевод из string в String: #include <stdlib.h>
string s =" Строка типа string ";
String As1 = gcnew String(c_str());
this -> textBox1 ->Text =s1; // Строка типа string
Делегаты и события
В технологии Объектно-ориентированного программирования "делегаты " широко используются в процессе разработки приложений и обычно рассматриваются как указатели на функции. Но как и все другие объекты в СLR, делегаты являются управляемыми объектами и обладают своей дополнительной функциональностью.
Объявление делегатов производится с помощью ключевого слова _delegate. С помощью делегатов могут быть вызваны любые методы управляемых классов, как обычные, так и статические. Это принципиально отличает делегаты от указателей на функции, так как делегат хранит не только указатель на функцию, но и информацию о конкретном объекте, у которого эта функция должна быть вызвана. Единственное условие - прототип метода должен совпадать с типом делегата. Самое главное отличие при этом, это то, что один делегат может использоваться для обслуживания нескольких функций, то есть делегат в СLR - это не просто указатель, а список указателей. Кроме того, с помощью делегатов можно вызывать даже функции Windows API.
Наиболее логичным применением делегатов в управляемой среде СLR является обработка событий ( _event). Организовать генерацию событий и их обработку в СLR достаточно просто, так как при этом компилятор создаёт делегат и генерирует сразу несколько методов, управляющих ими и генерацией событий.
Смешанный код
В отличие от некоторых других языков программирования, которые могут быть использованы в СLR,
_МЕЖДУНАРОДНЫЙ НАУЧНЫЙ ЖУРНАЛ «СИМВОЛ НАУКИ» № 06/2017 ISSN 2410-700Х_
язык С++ позволяет легко смешивать управляемый и неуправляемый код. Это обстоятельство представляет определённый интерес для пользователей и объясняет механизмы взаимодействия управляемого и неуправляемого кодов. При этом особый интерес представляют различия работы с данными, а также вызов управляемой функции из неуправляемого кода и наоборот.
Известно [3 ], что в одном модуле спокойно уживаются и ассемблер, и функции CLR, из чего можно сделать вывод, что код программы фактически содержит два генератора кода. Это лишний раз подтверждает способность CLR работать с памятью напрямую, что не совсем обычно для управляемой среды. Оказывается, что объявление функции в неуправляемой части приложения заставляет компилятор генерировать для неё неуправляемый код вне зависимости от места её реализации. Однако известно также, что неуправляемый код не может использовать управляемые объекты, хотя сама функция может быть определена в управляемой секции.
Ниже приводится фрагмент программы, использующей управляемый код CLR.
// Ввести данные в таблицу DataGridView и сохранить их в бинарном файле
value struct zap {
int num; char group[8]; char fam[12]; int oc1, oc2, oc3;}
Void saveToFile (char *file) {
FILE *f; zap tmp; int i;
int k = DataGridViewi ^RowCount; f =fopen (file, " wb ") ;
for (i =0: i<k; i++) {
strToChr(Convert :: ToString( DataGridView1[0,i] ^Value), tmp.group);
strToChr(Convert :: ToString( DataGridView1[1,i] ^Value), tmp.fam); tmp.oc1 = Convert :: ToInt32 ( DataGridView1 [2,i] -> Value); tmp.oc2 = Convert :: ToInt32 ( DataGridView1 [3,i] -> Value); tmp.oc3 = Convert :: ToInt32 ( DataGridView1 [4,i] -> Value); fwrite(&tmp, sizeof(tmp),1,f);
}
fclose(f); }
Заключение
В статье рассмотрены особенности использования возможностей среды программирования MS Visual Studio CLR .NET в приложениях на языке С++. Показано, что создание приложений на С++ с использованием графического интерфейса, представляет определённый интерес разработчикам и пользователям MS Visual Studio CLR .NET благодаря особенностям и достоинствам среды программирования, в том числе благодаря расширению возможностей использования CLR для разработки приложений на различных языках программирования, в том числе С, С++, C#, Visual Basic, Java и др.,
Показано также, что в своих программах на С++ в СLR можно смело использовать все привычные возможности С++ такие как шаблоны и множественное наследование, перегрузку операторов и прямую работу с памятью. Особенность заключается лишь в том, что в этом случае компилятор генерирует
управляемый код вместо ассемблера, если это касается только обычных типов С++. Если же возникает необходимость в использовании управляемых типов, таких как gc- и value- типов, то в этом случае отпадает необходимость заботиться об удалении объектов и освобождении памяти, так как СLR сама создает управляемый код и данные, производит автоматическую сборку мусора, гарантированную инициализацию переменных, контроль типов и проверку допустимости значений аргументов во время выполнения приложения, а также осуществляет сокрытие деталей работы, использует смешанный код, .Всё это позволяет создавать переносимые приложения, что является немало важным обстоятельством. Список использованной литературы
1.Пахомов Б. С/С++ и VS Visual C++ 2008 для начинающих - Спб.:БВХ- Петербург, 2009.
2. Герберд Шилдт. C++: Базовый курс, 3-е издание.: Пер. с англ.- М.: Издательский дом «Вильямс», 2007.
3. Ассемблер для Windows используя Visual Studio https://prog_cpp.ru/asm_VS, Express 2010
© Шикуть А.В., Аристов Б.К.,2017.
УДК 658.345:677(075.8)8
Шмырев Денис Викторович,
к.т.н., ст.преподаватель, Шмырев Виктор Иванович, к.т.н., доцент, Кочетов Олег Савельевич,
д.т.н., профессор,
Российский государственный социальный университет, (РГСУ)
е-тай: v.shmyrev@bk.ru
СИСТЕМА ПОЖАРОТУШЕНИЯ С ВИХРЕВЫМ АППАРАТОМ ФОРМИРОВАНИЯ ГАЗОЖИДКОСТНОЙ СМЕСИ И СПРИНКЛЕРНЫМИ ОРОСИТЕЛЯМИ
Аннотация
В работе рассматривается система пожаротушения с вихревым аппаратом формирования газожидкостной смеси с пусковым баллоном, заполненным рабочим газом: азотом или СО2.
Ключевые слова
система пожаротушения, аппарат формирования газожидкостной смеси.
Одной из основных задач современного развития науки и техники является обеспечение пожаробезопасности зданий, сооружений и технологических процессов [1,с.23; 2,с.25; 3,с.27]. Среди комплекса технических решений, направленных на решение этих актуальных задач следует особо выделить: системы подслойного тушения пожаров в резервуарах и системы пожаротушения с вихревыми аппаратами формирования газожидкостной смеси [4,с.9; 5,с.11; 6,с.17; 7,с.25; 8,с.15].
Модульная система пожаротушения с вихревым аппаратом формирования газожидкостной смеси представлена рис.1-3. Система содержит сосуд 1, в котором хранится огнетушащее вещество. Он крепится кронштейнами 18 к строительной конструкции помещения и имеет устройство сброса газовой фазы 5, совмещенное с мерным щупом для огнетушащего вещества. В дежурном режиме в сосуде 1 для огнетушащего вещества избыточное давление отсутствует. Сосуд 1 оснащен устройством 2 формирования газожидкостной смеси вихревого типа, которое выполнено в виде конической камеры смешения с тангенциальным вводом в верхней части, выполненным в виде гибкого шланга 9 высокого давления, соединенным с пусковым баллоном 7, заполненным рабочим газом, (например азотом или СО2).