<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Электронный научно-практический журнал «Современная техника и технологии» &#187; алгоритм</title>
	<atom:link href="http://technology.snauka.ru/tags/algoritm/feed" rel="self" type="application/rss+xml" />
	<link>https://technology.snauka.ru</link>
	<description></description>
	<lastBuildDate>Fri, 30 Jan 2026 18:56:12 +0000</lastBuildDate>
	<language>ru</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>К вопросу об импорте 3D моделей в программы с использованием графической библиотеки OpenGl</title>
		<link>https://technology.snauka.ru/2014/01/2965</link>
		<comments>https://technology.snauka.ru/2014/01/2965#comments</comments>
		<pubDate>Mon, 27 Jan 2014 11:40:20 +0000</pubDate>
		<dc:creator>AbramovaOF</dc:creator>
				<category><![CDATA[Общая рубрика]]></category>
		<category><![CDATA[3D-моделирование]]></category>
		<category><![CDATA[OpenGL]]></category>
		<category><![CDATA[алгоритм]]></category>
		<category><![CDATA[импорт]]></category>
		<category><![CDATA[компьютерная графика]]></category>
		<category><![CDATA[конвертер]]></category>
		<category><![CDATA[программная реализация]]></category>

		<guid isPermaLink="false">https://technology.snauka.ru/?p=2965</guid>
		<description><![CDATA[Изучать  компьютерную графику люди всегда начинают с определенными целями, будь это желание сделать красивую трехмерную сцену или просто успешно сдать работу по данной дисциплине в институте. В последнем случае чаще всего рассматривается графическая подсистема OpenGl. В принципе, в современном мире, благодаря доступности различных интернет-ресурсов, найти информацию по этой платформе не представляет особой сложности. Есть и [...]]]></description>
			<content:encoded><![CDATA[<h1><span style=" 13px; font-weight: normal;">Изучать  компьютерную графику люди всегда начинают с определенными целями, будь это желание сделать красивую трехмерную сцену или просто успешно сдать работу по данной дисциплине в институте. В последнем случае чаще всего рассматривается графическая подсистема OpenGl. В принципе, в современном мире, благодаря доступности различных интернет-ресурсов, найти информацию по этой платформе не представляет особой сложности. Есть и уроки, и спецификации, и многое другое [1]. Вот только есть темы, о которых даже в интернете (по крайней мере, в его русскоязычном сегменте) найти информацию достаточно трудно. В этой статье речь пойдет об одной из них.</span></h1>
<p>Когда человек начинает писать программу с использованием инструментов графической библиотеки OpenGl, то рано или поздно он понимает, что стандартных средств интерфейса совершенно недостаточно для построения графического объекта хоть сколько-нибудь приемлемой сложности. Много ли можно сделать из прямоугольников и треугольников? Много, совершенно справедливо ответите вы. И будете правы, ибо полигональные модели как раз и формируются из этих самых треугольников. Собственно, полигон – это и есть многоугольник, причем чаще всего используются как раз треугольники или прямоугольники[2]. Вот только вручную просчитать расположение сотен (а то и тысяч, и сотен тысяч) полигонов – занятие, конечно, реализуемое, но маловероятное. Нет, конечно же, еще фигуры можно задавать массивами координат, но высчитать подобный массив – задача не намного легче.</p>
<p>Как поступает студент в таком случае? Он использует 3D-редакторы для отрисовки сложных 3D-объектов. 3D-редакторы обладают удобным графическим интерфейсом, интуитивно понятным даже для новичка, и научиться создавать с их помощью достаточно сложные объекты, а затем переводить их в понятные для OpenGl списки координат, не составит для увлеченного человека особого труда. И вот тут разработчика ожидает серьезная проблема: к сожалению, OpenGl не содержит встроенных средств для чтения 3D-моделей. Поэтому  реализовывать такое приложение приходится самому.</p>
<p>Нет, с одной стороны, координаты – это всегда координаты, и вроде бы ничего сложного в переносе нет. В крайнем случае, можно взять массив координат, полученный в редакторе, и вручную вставить его в код. Можно даже перенести 10 тысяч полигонов из 3D-редактора в код. Но сколько времени займет данная операция?</p>
<p>Для решения этой проблемы можно избрать следующий путь:  привлечь «автозамену», встроенную в любой текстовый редактор, и с помощью неё постараться подогнать форматы. Но это тоже не избавит вас от огромной ручной работы. Да и «автозамена» никогда не была интеллектуальным алгоритмом, и гарантии, что после такой длительной работы у вас все заработает, никто не даст.</p>
<p>Следовательно, скажет пытливый читатель, процесс преобразования надо автоматизировать. И, разумеется, будет в чем-то прав. Такой вывод напрашивается сам собой, поэтому обойти стороной такое решение мы не могли. Вот только реально эта задача труднореализуема: в интернете с большим трудом, но все-таки можно найти весьма сложные встраиваемые комплексы, которые после включения в ваш программный код динамически загружают и обрабатывают модели. Так вот же решение, скажете вы: и код компилируется быстро (массив координат содержится вне кода, и в компиляции не участвует), и новую модель подключить не сложно. И будете не совсем правы. Потому как данный подход  обладает рядом довольно весомых недостатков. Самый важный из них – сложность данного способа. Для человека, который не слишком хорошо разбирается в объектно-ориентированном стиле программирования  (т.к. большинство этих способов реализованы именно в виде подключаемых классов), понять, что делает подобный загрузчик, чрезвычайно трудно. Да и объем у подобного загрузчика весьма велик. А если я просто хочу сделать вращающийся стул? При этом код всей программы будет раз в 10 меньше кода загрузки модели, и это ставит под серьезные сомнения возможность применения такого подхода. И для начинающих его вряд ли можно посоветовать.</p>
<p>Поэтому мы пойдем другим путем. Мы разработаем несложный алгоритм преобразования нашего файла с координатами в код, спокойно читаемый OpenGl. И лучше всего будет оформить данный алгоритм в отдельную программу, которая будет конвертировать необходимые модели для реализации их с помощью графической библиотеки OpenGl.</p>
<p>Рассмотрим процесс создания алгоритма для конвертирования 3D-моделей из 3D-редактора в программный код. Для начала выберем исходный формат файла-источника. Предлагаю использовать OBJ-формате, и для этого есть две веские причины. Во-первых, это один из самых распространённых форматов хранения данных, а во-вторых (и это главное в нашем случае), он текстовый и, как следствие, более понятный для восприятия.</p>
<p>Но для начала немного уточним терминологию. Как в OpenGl, так и в OBJ есть координаты и индексы [3]. Координата – это расположение точки на виртуальной координатной плоскости в программе (по трем измерениям). Тут все просто. А вот с понятием «индекс» могут возникнуть сложности.  В нашем случае «индекс» – это номер координаты в массиве координат. Поясним ситуацию на примере: допустим, дан массив из 4-х наборов координат по трем осям X, Y, Z:</p>
<p align="center">          (x, y, z)</p>
<p align="center">    1)    1,  3, 5</p>
<p align="center">   2)   -2, 7, 9</p>
<p align="center">    3)   -5, 4, -7</p>
<p align="center">     4)    8, -6, -1</p>
<p>И координата некоторой точки, указанная в индексах:</p>
<p align="center">Точка 1: 4, 3, 2</p>
<p>В этом случае значения индексов точки означают номер ряда из массива, по соответствующей оси. В нашем случае, индекс по оси X равен 4, следовательно, необходимо взять координату оси Х из четвертого ряда (у нас это 8). Точно так же восстанавливаем координаты по оси Y (третий ряд, вторая цифра &#8211; 4) и Z (второй ряд, третья цифра – 9).</p>
<p>В итоге получаем, что координаты точки, заданной с помощью индексов будут следующие:</p>
<p align="center">Точка 1: 4, 8, 9</p>
<p>Подобный метод индексации необходим для сокращения количества координат. Ведь у многогранных фигур очень часто встречаются либо общие точки, когда совпадают все три координаты, либо точки, находящиеся на одной линии, у которых общие одна из координат.</p>
<p>Также необходимо учитывать, что для описания модели используют три типа координат: координаты модели (то есть самого объекта), координаты нормалей (необходимы для распределения освещенности в сцене) и координаты текстур (при наличии текстур в модели).</p>
<p>Теперь пару слов непосредственно про формат OBJ. Информация в нем хранится в текстовом виде, что позволяет ее просмотреть с помощью любого текстового редактора. Во многих подобных файлах помимо координат хранятся еще и ссылки к материалам, текстурам и др. Стандартный вид obj-файла следующий:</p>
<p># Max2Obj Version 4.0 Mar 10th, 2001</p>
<p>v  10.4335  217.914  7.80485</p>
<p>v  -8.02548  219.079  6.90515</p>
<p>v  -8.22437  219.042  6.90515</p>
<p>v   4.414604  70.340584  7.308666</p>
<p># 4 vertices</p>
<p>vn  0.000000 0.000002 -1.000000</p>
<p>vn  -1.000000 0.000000 0.000000</p>
<p>vn  0.000000 0.000000 1.000000</p>
<p># 3 vertex normal</p>
<p>vt  0.47683 0.51250</p>
<p>vt  0.46556 0.50879</p>
<p>vt  0.46335 0.50876</p>
<p># 3 texture vertices</p>
<p>f  1/1/1  1/2/1  2/3/1</p>
<p>f  4/2/1  3/1/3  4/1 1</p>
<p>f 3/1/3  2/3/1  3/1/2</p>
<p># 3 faces</p>
<p>Разберем данный пример подробнее. Первая строка представляет собой комментарий, содержащий не интересующую нас общую информацию. Начиная со второй строки располагается массив координат модели (обозначается латинской V).</p>
<p>v  10.4335  217.914  7.80485</p>
<p>v  -8.02548  219.079  6.90515</p>
<p>v  -8.22437  219.042  6.90515</p>
<p>v   4.414604  70.340584  7.308666</p>
<p>Это описание каркаса нашей модели (точнее, массив координат каркаса, помним про индексы). Он есть в любом файле.</p>
<p>Затем указаны координаты нормалей:</p>
<p>vn 0.000000 0.000002 -1.000000</p>
<p>vn -1.000000 0.000000 0.000000</p>
<p>vn 0.000000 0.000000 1.000000</p>
<p>Координаты нормалей никогда не принимают значение большее единицы и указывают направление света. Указываются в файлах далеко не всегда: нет освещенности, нет и нормалей.</p>
<p>Далее перечисляются координаты текстуры:</p>
<p>vt 0.47683 0.51250</p>
<p>vt 0.46556 0.50879</p>
<p>vt 0.46335 0.50876</p>
<p>Поскольку текстура сама по себе двухмерная, третья координата обычно либо не указывается, либо равна 0 (vt 0.46335 0.50876 0). Данного блока может не быть, если у модели нет текстур.</p>
<p>Зачастую между блоками встречаются комментарии с указанием количества этих самых блоков ( # 3 texture vertices). Также можно уточнить, что количество точек каркаса, текстур и нормалей не всегда соответствует друг другу. Это совершенно нормально и  приводится в соответствие с помощью индексов.</p>
<p>Какую же полезную информацию может почерпнуть разработчик из представленных массивов данных?</p>
<p>1. В пределах одной модели порядок массивов координат всегда сохраняется: сначала указывается блок V (координаты моделей), потом блок VT (текстуры), затем блок VN (нормали). Блоки никогда не перемешиваются и не меняются местами (то есть, блока текстур может не быть вообще, но если он есть, то идет всегда после массива координат каркаса).</p>
<p>2. Между собой данные разделяются пробелом.</p>
<p>Эти два факта мы будем активно использовать  для реализации конвертера 3D-моделей.</p>
<p>Но это еще не все содержимое obj-файла. За блоком текстур располагается блок, строки которого начинаются с буквы f:</p>
<p>f  1/1/1  1/2/1  2/3/1</p>
<p>f  4/2/1  3/1/3  4/1 1</p>
<p>f  3/1/3  2/3/1  3/1/2</p>
<p>Это массив индексов. И составные элементы этого блока очень важны для понимания работы алгоритма конвертера, поэтому мы рассмотрим их подробнее. Буква f, как уже было сказано,  обозначает начало строки с индексами. Далее идут числа с разделителями, значения которых расшифровываются следующим образом: пробелом разделяются оси (соответственно, блоков чисел всегда 3: ось х, ось y, ось z), а внутри каждого блока допускается существование от 1 до 3 цифр, разделенных знаком «/» (или «//»):</p>
<p>f  1//1//1  1//2//1  2//3//1</p>
<p>f  4 3 4</p>
<p>f  3/1  2/2  3/1</p>
<p>Каждая тройка чисел несет следующую информацию: индекс каркаса//индекс текстуры//индекс нормали. Соответственно, если у модели нет текстур или нормалей, то и соответствующих индексов в блоке не будет.</p>
<p>Например,  рассмотрим одну из точек, строка индексов которой указана последней в блоке f:  f  3/1/3  2/3/1  3/1/2. Индекс координат данной точки: 3, 2, 3 (первые цифры каждого блока), следовательно, значения её координат мы выбираем из массива координат модели v из третьего, второго и снова третьего ряда: -8.22437,   219.079, 6.90515. Индекс текстур точки: 1, 3, 1 (вторые цифры блока). Следовательно, текстурные координаты данной точки 0.47683, 0.50876. Нормали выбираются по тому же принципу.</p>
<p>Также важно помнить,  что в одном файле могут быть указаны описания нескольких моделей, каждое из которых состоит из вышеперечисленных блоков.</p>
<p>Рассмотрим  теперь способ записи координат в OpenGl проекте.  В общем виде описание изображения с использованием массивов выглядит, например, так:</p>
<p>glEnableClientState(GL_VERTEX_ARRAY);</p>
<p>glEnableClientState(GL_NORMAL_ARRAY);</p>
<p>glEnableClientState(GL_TEXTURE_COORD_ARRAY);</p>
<p>GLfloat pVerts1[]= {</p>
<p>-610.2380, 0.0000, 1368.7837,</p>
<p>-610.2380, 0.0000, 504.9502</p>
<p>};</p>
<p>GLfloat pNorm1[]= {</p>
<p>0.0000, -1.0000, -0.0000,</p>
<p>0.0000, 1.0000, -0.0000,</p>
<p>0.0000, 0.0000, 1.0000</p>
<p>};</p>
<p>GLfloat pTexCoord1[]= {</p>
<p>1.0000, 1.0000,</p>
<p>0.0000, 0.0000,</p>
<p>};</p>
<p>glVertexPointer(3, GL_FLOAT, 0, pVerts1);</p>
<p>glNormalPointer(GL_FLOAT, 0, pNorm1);</p>
<p>glTexCoordPointer(2,GL_FLOAT, 0,  pTexCoord1);</p>
<p>glDrawArrays(GL_TRIANGLES,0,3);</p>
<p>glDisableClientState (GL_VERTEX_ARRAY);</p>
<p>glDisableClientState (GL_NORMAL_ARRAY);</p>
<p>glDisableClientState (GL_TEXTURE_COORD_ARRAY);</p>
<p>Первые три строки необходимы для указания того, что будут использоваться 3 массива: массив вершин (GL_VERTEX_ARRAY),массив  нормалей (GL_NORMAL_ARRAY) и массив текстур (GL_TEXTURE_COORD_ARRAY). Далее указывается непосредствнно массив координат модели pVerts1[], который, в отличие от блока в OBJ, хранит уже готовые координаты, по которым строится каркас (напомним, что в OBJ каркас модели строился по индексам). При этом координаты в массиве pVerts1[] разделяются не пробелом, как в obj-файле, а запятыми. Затем инициализируются массив нормалей pNorm1[] и массив текстур pTexCoord1[].</p>
<p>Следующие три строки необходимы для указания, во-первых, какой из массивов содержит какие конкретно значения, а, во-вторых, каким способом эти значения из массива надо брать:</p>
<ul>
<li>glVertexPointer(3, GL_FLOAT, 0, pVerts1) &#8211;  определяем, что массивом вершин будет именно массив pVerts1, определяем тип значений этого массива «float», и количество координат на одну вершину (по три, то есть три оси);</li>
<li> glNormalPointer(GL_FLOAT, 0, pNorm1) &#8211;  массив нормалей называется pNorm1 и также хранит значения типа «float»;</li>
<li> glTexCoordPointer(2,GL_FLOAT, 0,  pTexCoord1) &#8211; текстурный массив с именем pTexCoord1 и количеством переменных на точку – 2 (текстуры у нас двумерные).Далее переходим к отрисовке самой модели: glDrawArrays (GL_TRIANGLES,0,3). Здесь GL_TRIANGLES указывает, что рисовать будем треугольники; 0 – выборку координат из массива начнем  с нулевого элемента; 3 – на одну вершину будем считывать по три значения. Данная команда выводит треугольники по нашим координатам, пока они (координаты) не кончатся. Последние три строки примера необходимы для отключения установленных режимов обработки массивов. Эту функцию  необходимо  задавать в конце всего процесса вывода, но не обязательно для каждой модели.Перейдем теперь непосредственно к процессу перевода одного формата в другой. При этом при создании OBJ файла по умолчанию считаем, что отрисовывать будем треугольники. Не будем останавливаться на таких проблемах, как разные разделители координат (в файлах пробелы, в коде запятые), или отличающийся вид самих массивов (в файле каждая строка обозначается буквами, в коде достаточно фигурной скобки в начале блока), и прочем. Это можно достаточно просто исправить простейшими текстовыми преобразованиями (типа «автозамены»). Но вот об одной проблеме поговорим подробнее.
<p>Как уже говорилось выше, в obj-формате все точки хранятся не в чистых координатах, а в массивах индексов. Библиотека OpenGl такого описания не понимает. Вернее, понимает, но массив индексов при построении фигуры можно использовать только один – координат каркаса, а вот нормали и текстуры будут проигнорированы.  Как следствие, если нам нужен только каркас без всего остального, работа сильно упрощается. Но мы сейчас говорим о полноценном построении трехмерной модели, поэтому нам важны все три массива значений.</p>
<p>Итак, для начала нам требуется считать файл. Чтение файла происходит построчно. При этом индексы в конце файла указывают на массив координат в его начале. Появляется проблема: или перечитывать файл на каждый индекс (что не слишком эффективно, учитывая, что точек – тысячи), либо сначала считывать и обрабатывать файл (и распределять по массивам в памяти), а потом уже формировать код. Поэтому выбираем второй способ. Так же необходимы места для хранения считанного массива. Будем использовать двухмерные массивы (код на Си):</p>
<p>float coord_vert [1000000][2];</p>
<p>float coord_ norm [1000000][2];</p>
<p>float coord_ tex [1000000][2];</p>
<p>Здесь мы объявили три массива типа «float», в которых будем хранить массивы вершин, нормалей и текстур соответственно. Количество элементов в массиве: миллион строк (что для высокополигональных моделей имеет смысл) и по 3 элемента в каждой строке (оси X,Y,Z). По умолчанию будем считать, что первая цифра – это номер самого массива, вторая – номер элемента в этом массиве.</p>
<p>Таким же образом создаем массивы для хранения трех индексов, но с учетом того, что индексы у нас целочисленные (тип int):</p>
<p>int  ind_vert [1000000][2];</p>
<p>int  ind _ norm [1000000][2];</p>
<p>int  ind _ tex [1000000][2];</p>
<p>Тогда конвертация трехмерной модели будет проходить в два этапа:</li>
</ul>
<ol>
<li>считывание и обработка исходного файла;</li>
<li>построение файла с кодом.На первом этапе мы считываем одну модель и распределяем её по массивам. Далее осуществляем обработку массивов по отдельности: массивов координат и массивов индексов. Сначала ищем в строке символы “v”, “vt”, “vn”,  и, в случае обнаружения, следующие 3 координаты записываем в соответствующий массив под соответствующими номерами. И увеличиваем номер этого массива на 1.Когда мы доходим до массива индексов (символ “f”), мы должны отключить поиск координат (если этого не сделать, то к нам может попасть массив координат от следующей модели). Считывание индексов происходит по следующему алгоритму:</li>
</ol>
<ol>
<li>читаем первое число за пробелом, вносим его в массив индексов  каркаса (под соответствующим номером) как первый элемент массива (координата Х);</li>
<li>проверяем на наличие знака разделителя: «/» или «//» (т.к.  мы не знаем вид исходного файла);</li>
<li>если знак разделителя найден, то проверяем, есть ли у нас структура с координатами текстур (как  уже говорилось ранее, в индексах координаты идут по порядку (вершины/текстуры/нормали), но если текстур нет, то и текстурных индексов соответственно не будет, и без этой проверки мы можем выполнить запись индексов «не по адресу»);</li>
<li>записываем число после знака разделителя в массив с индексами текстур (или нормалей, если текстур нет) в первый элемент массива;</li>
<li>снова проверяем на наличие разделителя, и, при его обнаружении,  формируем массив нормалей;</li>
<li>выполняем поиск пробела;</li>
<li>число, следующее за пробелом, записываем в массивы с тем же номером и в том же порядке (сначала вершины, потом текстуры, потом нормали), но уже во второй элемент массива (т.е. формируем координаты оси Y);</li>
<li>повторяем те же действия для оси Z.Выполняем вышеуказанные действия до обнаружения знака начала комментариев (#), новых координат вершин (v) или конца файла. Затем  осуществляем  вывод нужного кода в следующем порядке:</li>
</ol>
<ul>
<li>сначала выводим оформление кода: GLfloat pVerts1[]= {</li>
<li>затем выводим координаты (по три в строке,  что удобнее для восприятия).Вывод координат осуществляется следующим образом: запускаем цикл (от нуля до того количества индексов, которое мы записали); выводим первый элемент массива; в качестве номера самого массива берем значение из массива индексов:for (int i=0; i&lt;kol_vo_indexov_vert; i++)
<p>coord_vert [(ind_vert[i][0])-1] [0] «,»</p>
<p>coord_vert [(ind_vert[i][1])-1] [1] «,»</p>
<p>coord_vert [(ind_vert[i][2])-1] [2]  «,»</p>
<p>В качестве индекса текущего элемента указываем формулу, с помощью которой можно будет сортировать значения: второй индекс равен 0, следовательно,  мы работаем с осью Х;  для оси Y второй индекс будет равен 1, а для оси Z &#8211; 2. Вычитание же единицы из индекса производится потому, что в Си индексация элементов массива начинается с нуля,  а в ob- формате – с единицы. Таким образом, происходит построение нового файла с кодом, включая вывод блоков текстур и  нормалей.</p>
<p>Затем в конвертер 3D-моделей добавляется вывод:</p>
<p>glVertexPointer(3, GL_FLOAT, 0, pVerts1);</p>
<p>glNormalPointer(GL_FLOAT, 0, pNorm1);</p>
<p>glTexCoordPointer(2,GL_FLOAT, 0,  pTexCoord1);</p>
<p>glDrawArrays(GL_TRIANGLES,0,3);</p>
<p>И осуществляется проверка достижения конца файла. В случае неуспеха, означающего, что в файле есть описания других моделей, все действия повторяются для остальных моделей.</p>
<p>Подытоживая вышесказанное, можно сказать, что предложенный способ конвертации 3D-моделей из 3D-редакторов в программу с использованием Opengl имеет некоторые недостатки. Самый существенный из них – описание модели непосредственно в программном коде.  В результате, если моделей много (или они высокополигональные), то компиляция кода может быть очень долгой, что очень сильно затрудняет отладку. Но для небольших студенческих проектов, ориентированных на изучение возможностей визуализации с помощью графической библиотеки Opengl, данный вариант решения эффективен, понятен и удобен в применении.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>https://technology.snauka.ru/2014/01/2965/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Алгоритм программы для расчета припусков</title>
		<link>https://technology.snauka.ru/2014/08/4314</link>
		<comments>https://technology.snauka.ru/2014/08/4314#comments</comments>
		<pubDate>Thu, 07 Aug 2014 13:56:07 +0000</pubDate>
		<dc:creator>Дима Манзюк</dc:creator>
				<category><![CDATA[Общая рубрика]]></category>
		<category><![CDATA[алгоритм]]></category>
		<category><![CDATA[программа для расчета припусков]]></category>

		<guid isPermaLink="false">https://technology.snauka.ru/?p=4314</guid>
		<description><![CDATA[Данная программа расчетов припусков и межоперационных размеров при обработке точных деталей приборов будет организована в диалоговом режиме. Запустив программу, пользователь будет иметь возможность внести следующие исходные данные, такие как: - Вид детали; - Способ получения заготовки; - Точный размер обрабатываемой поверхности (согласно чертежа); - Маршрут обработки данной поверхности; - Способ крепления и базирования для каждой [...]]]></description>
			<content:encoded><![CDATA[<p>Данная программа расчетов припусков и межоперационных размеров при обработке точных деталей приборов будет организована в диалоговом режиме. Запустив программу, пользователь будет иметь возможность внести следующие исходные данные, такие как:</p>
<p>- Вид детали;</p>
<p>- Способ получения заготовки;</p>
<p>- Точный размер обрабатываемой поверхности (согласно чертежа);</p>
<p>- Маршрут обработки данной поверхности;</p>
<p>- Способ крепления и базирования для каждой операции металлообработки.</p>
<p>После ввода исходных данных программой будет проведен выбор из базы данных таких параметров как:</p>
<p>- Высота неровности профиля обрабатываемой поверхности (шероховатость) для каждого перехода;</p>
<p>- Глубина дефектного поверхностного слоя для каждого перехода;</p>
<p>- Наибольшая величина кривизны (ρк);</p>
<p>- Значение смещения оси заготовки при погрешности центрирования (ρц);</p>
<p>- Значение погрешности базирования (εб);</p>
<p>- Величина погрешности закрепления (εз).</p>
<p>Выбрав вышеуказанные данные, программа производит расчет суммарного значения пространственного отклонения и погрешность установки заготовки при выполнении каждого перехода.</p>
<p>Получив все необходимые данные,  производится расчет припусков и межоперационных размеров расчетно-аналитическим методом. Полученные данные формируются в информационную таблицу и выводятся на экран, также есть возможность записать результаты расчета в файл.</p>
<p align="center">Алгоритм работы программы</p>
<p style="text-align: center;"> Страница 1</p>
<p style="text-align: center;"><a href="https://technology.snauka.ru/2014/08/4314/2014080707414030-page-001" rel="attachment wp-att-4315"><img class="size-full wp-image-4315 aligncenter" src="https://technology.snauka.ru/wp-content/uploads/2014/08/2014080707414030-page-001.jpg" alt="" width="892" height="1263" /></a></p>
<p style="text-align: center;">Страница 2</p>
<p style="text-align: center;"><a href="https://technology.snauka.ru/2014/08/4314/2014080707414030-page-002" rel="attachment wp-att-4316"><img class="size-full wp-image-4316 aligncenter" src="https://technology.snauka.ru/wp-content/uploads/2014/08/2014080707414030-page-002.jpg" alt="" width="892" height="1263" /></a></p>
<p style="text-align: center;">Страница 3</p>
<p style="text-align: center;"><a href="https://technology.snauka.ru/2014/08/4314/2014080707414030-page-003" rel="attachment wp-att-4317"><img class="size-full wp-image-4317 aligncenter" src="https://technology.snauka.ru/wp-content/uploads/2014/08/2014080707414030-page-003.jpg" alt="" width="892" height="1263" /></a></p>
<p style="text-align: center;">Страница 4</p>
<p style="text-align: center;"><a href="https://technology.snauka.ru/2014/08/4314/2014080707414030-page-004-2" rel="attachment wp-att-4319"><img class="size-full wp-image-4319 aligncenter" src="https://technology.snauka.ru/wp-content/uploads/2014/08/2014080707414030-page-0041.jpg" alt="" width="892" height="1263" /></a></p>
<p style="text-align: center;">Страница 5</p>
<p style="text-align: center;"><a href="https://technology.snauka.ru/2014/08/4314/2014080707414030-page-005" rel="attachment wp-att-4320"><img class="aligncenter size-full wp-image-4320" src="https://technology.snauka.ru/wp-content/uploads/2014/08/2014080707414030-page-005.jpg" alt="" width="892" height="1263" /></a></p>
]]></content:encoded>
			<wfw:commentRss>https://technology.snauka.ru/2014/08/4314/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Разработка программного продукта компрессии данных</title>
		<link>https://technology.snauka.ru/2015/10/8029</link>
		<comments>https://technology.snauka.ru/2015/10/8029#comments</comments>
		<pubDate>Tue, 20 Oct 2015 12:28:46 +0000</pubDate>
		<dc:creator>Заргарян Елена Валерьевна</dc:creator>
				<category><![CDATA[Общая рубрика]]></category>
		<category><![CDATA[алгоритм]]></category>
		<category><![CDATA[архиватор]]></category>
		<category><![CDATA[информация]]></category>
		<category><![CDATA[компрессия данных]]></category>
		<category><![CDATA[программное обеспечение]]></category>

		<guid isPermaLink="false">https://technology.snauka.ru/?p=8029</guid>
		<description><![CDATA[При эксплуатации компьютера по самым разным причинам возможны порча или потеря информации на магнитных дисках. Это может произойти из-за физической порчи магнитного диска, неправильной корректировки или случайного уничтожения файлов, разрушения информации компьютерным вирусом и т.д. Для того чтобы уменьшить  потери в таких ситуациях, следует иметь архивные копии используемых файлов и систематически обновлять копии изменяемых файлов [...]]]></description>
			<content:encoded><![CDATA[<p>При эксплуатации компьютера по самым разным причинам возможны порча или потеря информации на магнитных дисках. Это может произойти из-за физической порчи магнитного диска, неправильной корректировки или случайного уничтожения файлов, разрушения информации компьютерным вирусом и т.д. Для того чтобы уменьшить  потери в таких ситуациях, следует иметь архивные копии используемых файлов и систематически обновлять копии изменяемых файлов [1-3].</p>
<p>В последних десятилетиях мы наблюдали беспрецедентный взрыв количества оцифрованной информации в связи с бурным развитием Всемирной Паутины (WWW). Поэтому, одной из основных проблем современной информатики является эффективное сжатие данных для передачи их по сравнительно медленным каналам связи. Также в связи с усложнением современных программных средств, их дистрибутивы занимают все большие объемы памяти.</p>
<p><strong>Алгоритм, лежащий в основе архиватора. </strong>Ядром архиватора является метод BWT лексикографической сортировки матрицы циклических перестановок входной строки, который позволяет эффективно раскрывать энтропийные взаимозависимости входных данных. Для устойчивости сортировщика на высокоизбыточных данных ведущими специалистами в области сжатия предложен алгоритм сортировки удвоением, который на данный момент используется в большинстве современных архиваторов. После глубоких теоретических и практических исследований данного алгоритма, было установлено, что он достаточно неэффективен на типичных данных. Поэтому нами был разработан уникальный в своем роде метод позволяющий эффективно сортировать типовые файлы и не теряющий своей эффективности на вырожденных данных. Он основан на сортировке Бентли-Седжвика с использованием авторской технологии Pixar. Отличительной его особенностью является интенсивное использование сверхбыстрой кэш-памяти CPU, что обуславливает высокую скорость сортировки, несмотря на нелинейную зависимость последней от размера блока. Важным преимуществом выбранного метода является высокий потенциал в поддержке современных аппаратных инноваций, таких как 64-битность архитектуры процессоров и Hyper-Threading .</p>
<p>В решении проблемы эффективного сжатия BWT-выхода ключевым моментом является LUP (List Update Problem). Эта проблема заключается в выборе способа эффективного обновления списка символов для лучшего предсказания однородности контекстов в исходном файле. Нами было разработано собственное решение, gmtf, которое сочетает в себе простоту алгоритма и сложное моделирование. Для улучшения энтропийных характеристик выхода gmtf был предложен специализированный метод кодирования длин повторов, который позволяет более эффективно использовать контекстную избыточность в преобразованном файле.</p>
<p>Последним этапом BWT-преобразования является использование энтропийного order-0 кодера, который в отличие от традиционных кодировщиков избыточности позволяет наиболее близко подойти к идеальному кодеру Шеннона. По результатам наших последних исследований именно он позволяет наилучшим образом интерпретировать выявленные BWT логические взаимозависимости данных.</p>
<p>Последним рубежом в борьбе за лучшее сжатие между архиваторами является построение алгоритмов, использующих особенности типовых данных, например, текстов или исполнимых файлов, алгоритмов предобработки или препроцессинга. На данном этапе реализованы словарные алгоритмы преобразования текстов, алгоритмы модификации труднопредсказуемых символов и моделирование логики компилятора. Эти методы позволяют достичь 5-15% улучшения сжатия на типовых файлах, что позволяет на равных конкурировать с современными программами сжатия данных.</p>
<p>Нами были разработаны и реализованы авторские решения проблем высокоэффективного сжатия контекстно-избыточных данных, а также проведены теоретические исследования, доказывающие их эффективность. Как результат, на данный момент создана бета-версия полноценного компрессора, результаты которой в сравнении с другими программами сжатия данных подтверждают теоретические оценки. Тем не менее, остаются потенциальные возможности улучшения производительности.</p>
<p><strong>Описание реализованных алгоритмов</strong>. <em></em></p>
<ul>
<li>HydraY codename “Windforce” &#8211; BWT processor:</li>
</ul>
<p>В отличие от большей части современных BWCA архиваторов мы не используем преимущества концепции сортировки удвоением. В результате её глубокого исследования был обнаружен серьёзный недостаток &#8211; она не позволяет использовать следующее важное свойство BWT: для получения последнего столбца не обязательно иметь всю матрицу перестановок. Другими словами, нам не обязательно упорядочивать набор рядом стоящих строк(группу), если все они заканчиваются одним и тем же символом &#8211; это не повлияет на выход BWT. Это положение легло в основу нашей технологии PiXar. Она позволяет значительно ускорить обработку высоко избыточных данных, предоставляя возможность использовать алгоритм Бентли-Седжвика для сортировки строк матрицы перестановок. Предварительно список строк сортируется расстановкой по первым 4-м символам.</p>
<ul>
<li>Lynx &#8211; gmtf+grle processor</li>
</ul>
<p>В качестве подходящего решения LUP был разработан собственный метод gmtf. Он заключается в том, что найденный символ перемещается не в начало списка, а к ближайшей границе. Массив границ был подобран экспериментально и является константой алгоритма, хотя возможность его динамической адаптации к входному потоку имеет большие перспективы для улучшения сжатия. Тестирование показало явное превосходство данного метода над известными решениям List Update Problem: MTF,MTF0 и др. Длинные последовательности нулей выхода gmtf эффективно кодируются grle. Этот метод, отдалённо напоминающий RLE – кодирование длин повторов, позволяет наиболее эффективно кодировать так называемые &#8220;хорошие&#8221; фрагменты gmtf-выхода.</p>
<ul>
<li>Order0 &#8211; arithmetic coder</li>
</ul>
<p>В результате вышеописанных преобразований получаются два потока разной статистики: gmtf и grle ранги. Заключительной стадией сжатия является их обработка энтропийным кодером. В качестве такового был выбран адаптивный арифметический кодер Дмитрия Субботина и Владимира Семенюка.</p>
<ol>
<li>Ptax &#8211; distance coder</li>
</ol>
<p>Этот метод не вошел в текущую реализацию, но был активно используемым нами ранее. Он был реализован в высокоэффективном двухпроходном варианте. Асимптотическая сложность порядка O(N). Для непосредственного кодирования расстояний использовалась техника представления числа в виде суммы некоторых элементов последовательности Фибоначчи. Метод был отстранён на второй план в связи с малой эффективностью с точки зрения степени сжатия.</p>
<ul>
<li>Warden/Sylph – Intel 32 Architecture Preprocessor (7-15% compression gain).</li>
</ul>
<p>Общая идея данного метода состоит в переходе от относительных адресов к абсолютным, например, при кодировании команд E8h и E7h (“CALL” и “JUMP” соответственно). Таким образом, слабо предсказуемые относительные смещения в коде программы преобразуются в абсолютные адреса в данном сегменте кода, что позволяет предсказывать старшие байты смещения. По теоретическим оценкам и практическим выводам аналогичное кодирование для команды “JUMP” проводить не стоит. Важное практическое применение имеет разработка технологии вычленения команд из сегмента кода для более точного определения команд, подлежащих кодированию. Эта технология в данный момент находится в альфа-тестировании.</p>
<p>Lich/Vampire/Wraith – Length-Index Preserving Transformation (5-10% compression gain)</p>
<p>Связка данных программ реализует LIPT-препроцессор для улучшения сжатия текстовых файлов. Основная идея заключается в построении словаря некоторого языка на основании анализа множества файлов на определенном языке, причем внутри словаря фразы разбиты на группы по длине, а внутри каждой такой группы отсортированы по частоте использования в языке (эту часть метода осуществляет Wraith). Далее слова обрабатываемого файла заменяются на строки следующего вида: &lt;escape&gt;&lt;word length&gt;&lt;word index&gt;&lt;flags&gt;, где длина слова и его индекс в словаре кодируются с помощью записи в позиционной системе счисления, цифрами которой являются фиксированные символы, а флаги обозначают начинается ли слово с большой буквы или состоит из произвольно капитализированных символов (в последнем случае нужно записывать маску капитализации), определяющую какие из символов слова капитализированы).</p>
<p>Таким образом, в файле создаются искусственные, но стабильные контексты, что обуславливает высокий прирост сжатия. Важно отметить, что словарь является фиксированным и в архиве не передается, т.е. словарь задается заранее.</p>
<p><strong>Алгоритм программы</strong>. Показан на рис.1.</p>
<p align="center"><a href="https://technology.snauka.ru/2015/10/8029/1-125" rel="attachment wp-att-8030"><img class="alignnone size-full wp-image-8030" src="https://technology.snauka.ru/wp-content/uploads/2015/10/1.png" alt="" width="568" height="446" /></a></p>
<p align="center">Рис. 1. Алгоритм программы</p>
<p>&nbsp;</p>
<p><strong>Интерфейс программы.</strong> Интерфейс программы довольно прост и эргономичен. В оболочке программы отсутствуют пестрые краски что положительно сказывается на глазах и не вызывает усталость (Рис. 2).</p>
<p align="center"><a href="https://technology.snauka.ru/2015/10/8029/2-104" rel="attachment wp-att-8031"><img class="alignnone size-full wp-image-8031" src="https://technology.snauka.ru/wp-content/uploads/2015/10/2.png" alt="" width="410" height="363" /></a></p>
<p align="center">Рис 2. Интерфейс программы</p>
<p>В статье были разработаны и реализованы решения проблем высокоэффективного сжатия контекстно-избыточных данных, а также проведены теоретические исследования, доказывающие их эффективность. Как результат, на данный момент создана программа полноценного компрессора, результаты которой в сравнении с другими программами сжатия данных подтверждают теоретические оценки. Тем не менее, остаются потенциальные возможности улучшения производительности. В перспективе все исполняемые файлы будут заменены динамическими библиотеками, которые будут обмениваться данными с интерфейсом через стандартные функции операционной системы. Также в виде динамических библиотек будет реализована поддержка других форматов архивов (но только на чтение).<strong></strong></p>
]]></content:encoded>
			<wfw:commentRss>https://technology.snauka.ru/2015/10/8029/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Проектирование алгоритмов функционирования информационной системы безопасного движения «Антисон»</title>
		<link>https://technology.snauka.ru/2015/12/8925</link>
		<comments>https://technology.snauka.ru/2015/12/8925#comments</comments>
		<pubDate>Fri, 25 Dec 2015 13:39:10 +0000</pubDate>
		<dc:creator>Исянова Эльмира Шамилевна</dc:creator>
				<category><![CDATA[Общая рубрика]]></category>
		<category><![CDATA[diagrams algorithm]]></category>
		<category><![CDATA[information system safety]]></category>
		<category><![CDATA[neural networks]]></category>
		<category><![CDATA[алгоритм]]></category>
		<category><![CDATA[безопасность движения]]></category>
		<category><![CDATA[диаграммы]]></category>
		<category><![CDATA[информационная система]]></category>
		<category><![CDATA[нейронные сети.]]></category>

		<guid isPermaLink="false">https://technology.snauka.ru/2015/12/8925</guid>
		<description><![CDATA[Утверждение о том, что человеческий фактор определяет почти полное безопасное функционирование технических средств, представляющих потенциальную опасность, стало общеизвестным. Речь идет об автомобилистах, диспетчерах, рулевых, операторах атомных электростанций и т.д. Каждый человек должен спать не менее 5 – 8 часов в сутки. Сегодня это является большой проблемой. По статистике дорожно-транспортных происшествий, фактором большого количество аварий является [...]]]></description>
			<content:encoded><![CDATA[<p>Утверждение о том, что человеческий фактор определяет почти полное безопасное функционирование технических средств, представляющих потенциальную опасность, стало общеизвестным. Речь идет об автомобилистах, диспетчерах, рулевых, операторах атомных электростанций и т.д.</p>
<p>Каждый человек должен спать не менее 5 – 8 часов в сутки. Сегодня это является большой проблемой. По статистике дорожно-транспортных происшествий, фактором большого количество аварий является физиологическое состояние автомобилиста.</p>
<p>Вождение в утомленном состоянии чревато как минимум экономическими потерями, а часто и человеческими жертвами. Введение в широкую практику устройств, обеспечивающих мониторинг бодрствования автолюбителей, стало актуальной задачей. Условием эффективности применения таких средств является мониторинг состояния человека в каждый момент времени нахождения за рулем [1].</p>
<p>Есть достаточно много устройств, в том или ином уровне решающих трудности контролирования состояния человека. Эти концепции базируются на исследовании одного или нескольких физических и/или поведенческих параметров.</p>
<p>На современном рынке можно найти устройства контроля состояния водителя разных объемов, характеристик, ценовых групп. Все они в той или иной мере контактируют с пользователем (кольцо, крючок на ухо), что может вызвать некий дискомфорт. Наша система лишена этого.</p>
<p>Устройство нацелено на дальнобойщиков, водителей различного транспорта и т.д., не исключает эксплуатацию на серьезной деятельности в ночное время, однотонной обстановке. Описываемая система безопасного движения «Антисон» основана на  определении степени закрытости глаза, что обозначает, на сколько открыт глаз пользователя от его привычного состояния.</p>
<p>Перемена освещения, тип лица не  влияют на степень распознавания. Она подстраивается под определенное лицо. Имеет инфракрасную подсветку, что позволит отслеживать состояние пользователя и в ночное время. Уведомление о засыпании может производиться звуковым, световым знаком.</p>
<p>Для описания общих требований к системе, а так же для минимизации появления ошибок при проектировании и моделировании системы используется унифицированный язык моделирования UML, применение данного языка более полно описано в [4-7]. Более широкое представление построения и действия информационной системы рассмотрим на UML – диаграммах.</p>
<p>Для предоставления процессов, происходящих  в предметной области, рассмотрим диаграмму последовательности (Рисунок 1).</p>
<p align="center"><img class="alignnone size-full wp-image-8926" title="ris1" src="https://technology.snauka.ru/wp-content/uploads/2015/12/ris14.png" alt="" width="521" height="277" /></p>
<p align="center">Рисунок 1 – диаграмма последовательности</p>
<p>Основными элементами диаграммы являются: видеорегистратор, ЦОС, нейронная сеть. Видеорегистратор непрерывно получает сигнал, который передает следующему объекту (ЦОС). Тот в свою очередь его обрабатывает (находит область интересов, производит фильтрацию) и передает нейронную сеть, где происходит идентификация. В случае, если нейросетевая идентификация выявила момент засыпания, то пользователю подается сигнал.</p>
<p>Для проектирования процедуры хода операций рассмотрим диаграмму деятельности (Рисунок 2).</p>
<p style="text-align: center;" align="center"><img class="alignnone size-full wp-image-8927" title="ris2" src="https://technology.snauka.ru/wp-content/uploads/2015/12/ris22.png" alt="" width="361" height="560" /></p>
<p align="center">Рисунок 2 – диаграмма деятельности</p>
<p>На разработанной диаграмме деятельности отражается логичность и очередность перехода от одной работы к другой, при этом внимание закрепляется на результате.</p>
<p>Сам же результат может привести к изменению состояния системы или возвращению некоторого значения.</p>
<p>В диагpaммe деятельностей испoльзуeтся cocтояние, связаннoe с принятием решения<em>.</em> Решение применяется в тех случаях, когда в зависимости от требования перехода, может быть выбран тот или иной переход на диаграмме. В нашем случае решение заключается в «&gt;50%» и «≤50%». В случае, когда отклонения ≤50%., система продолжает видеофиксировать данные. Если система зафиксировала отклонения &gt;50%, то подается сигнал без прекращения видеофиксации.</p>
<p>На рисунке 3-7 показаны входные кадры разных уровней состояния глаз (соответственно): открытые, прищуренные, закрытые.</p>
<p align="center"><img class="alignnone size-full wp-image-8928" title="ris3" src="https://technology.snauka.ru/wp-content/uploads/2015/12/ris31.png" alt="" width="217" height="95" /></p>
<p align="center">Рисунок 3 – входной кадр открытых глаз</p>
<p align="center"><img class="alignnone size-full wp-image-8929" title="ris4" src="https://technology.snauka.ru/wp-content/uploads/2015/12/ris41.png" alt="" width="229" height="96" /></p>
<p align="center">Рисунок 4 – входной кадр открытых глаз</p>
<p align="center"><img class="alignnone size-full wp-image-8930" title="ris5" src="https://technology.snauka.ru/wp-content/uploads/2015/12/ris5.png" alt="" width="217" height="90" /></p>
<p align="center">Рисунок 5 – входной кадр прищуренных глаз</p>
<p align="center"><img class="alignnone size-full wp-image-8931" title="ris6" src="https://technology.snauka.ru/wp-content/uploads/2015/12/ris6.png" alt="" width="221" height="97" /></p>
<p align="center">Рисунок 6 – входной кадр закрытых глаз</p>
<p align="center"><img class="alignnone size-full wp-image-8932" title="ris7" src="https://technology.snauka.ru/wp-content/uploads/2015/12/ris7.png" alt="" width="235" height="101" /></p>
<p align="center">Рисунок 7 – входной кадр закрытых глаз</p>
<p>Результат работы системы представлен в таблице 1.</p>
<p>Таблица 1 – Соответствия показаний дисплея и величины отклонения</p>
<table width="638" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="213">
<p align="center">№ сигнала</p>
</td>
<td valign="top" width="213">
<p align="center">Показание дисплея</p>
</td>
<td valign="top" width="213">
<p align="center">Величина отклонения</p>
</td>
</tr>
<tr>
<td valign="top" width="213">
<p align="center">1</p>
</td>
<td valign="top" width="213">
<p align="center">0</p>
</td>
<td valign="top" width="213">
<p align="center">0%</p>
</td>
</tr>
<tr>
<td valign="top" width="213">
<p align="center">2</p>
</td>
<td valign="top" width="213">
<p align="center">0,2</p>
</td>
<td valign="top" width="213">
<p align="center">20%</p>
</td>
</tr>
<tr>
<td valign="top" width="213">
<p align="center">3</p>
</td>
<td valign="top" width="213">
<p align="center">0,3</p>
</td>
<td valign="top" width="213">
<p align="center">30%</p>
</td>
</tr>
<tr>
<td valign="top" width="213">
<p align="center">4</p>
</td>
<td valign="top" width="213">
<p align="center">0,1</p>
</td>
<td valign="top" width="213">
<p align="center">10 %</p>
</td>
</tr>
<tr>
<td valign="top" width="213">
<p align="center">5</p>
</td>
<td valign="top" width="213">
<p align="center">1</p>
</td>
<td valign="top" width="213">
<p align="center">100%</p>
</td>
</tr>
</tbody>
</table>
<p>Таким образом, по величине отклонения мы можем судить, в какой стадии бодрствования находится пользователь. Если отклонение меньше 50%, то перед нами относительно бодрый человек, больше – уровень утомляемости критичен.</p>
<p>По нашим показаниям видно, что первый сигнал принадлежит бодрому человеку, третий сигнал говорит о том, что пользователь засыпает или уже спит. Результат распознавания достигает 99,8%.</p>
]]></content:encoded>
			<wfw:commentRss>https://technology.snauka.ru/2015/12/8925/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Объекты с переменной прозрачностью</title>
		<link>https://technology.snauka.ru/2016/01/9172</link>
		<comments>https://technology.snauka.ru/2016/01/9172#comments</comments>
		<pubDate>Wed, 20 Jan 2016 09:51:14 +0000</pubDate>
		<dc:creator>Кузьмин Дмитрий Андреевич</dc:creator>
				<category><![CDATA[Общая рубрика]]></category>
		<category><![CDATA[algorithm]]></category>
		<category><![CDATA[computer graphics]]></category>
		<category><![CDATA[translucency]]></category>
		<category><![CDATA[variable transparency]]></category>
		<category><![CDATA[visualization]]></category>
		<category><![CDATA[алгоритм]]></category>
		<category><![CDATA[визуализация]]></category>
		<category><![CDATA[компьютерная графика]]></category>
		<category><![CDATA[переменная прозрачность]]></category>
		<category><![CDATA[полупрозрачность]]></category>

		<guid isPermaLink="false">https://technology.snauka.ru/?p=9172</guid>
		<description><![CDATA[Одной из известных проблем компьютерной графики реального времени является визуализация полупрозрачных объектов. В настоящее время области применения систем визуализации охватывают самые различные сферы деятельности человека – от отображения виртуальных миров в компьютерных играх и системах виртуальной реальности до визуализации результатов компьютерного моделирования в серьезных научных и военных приложениях, а также в системах автоматизированного проектирования. Полупрозрачность [...]]]></description>
			<content:encoded><![CDATA[<p>Одной из известных проблем компьютерной графики реального времени является визуализация полупрозрачных объектов.</p>
<p>В настоящее время области применения систем визуализации охватывают самые различные сферы деятельности человека – от отображения виртуальных миров в компьютерных играх и системах виртуальной реальности до визуализации результатов компьютерного моделирования в серьезных научных и военных приложениях, а также в системах автоматизированного проектирования. Полупрозрачность используется при визуализации стеклянных поверхностей, природных явлений (применяются системы частиц), а также в системах автоматизированного проектирования (САПР). В САПР полупрозрачность позволяет наглядно представить внутреннюю структуру проектируемого изделия [1,2].</p>
<p>Под визуализацией в общем смысле понимается процесс получения изображения по модели с помощью компьютерной программы, представление информации в виде оптического изображения (например, в виде рисунков и фотографий, графиков, диаграмм, структурных схем, таблиц, карт и т. д.) (рис.1).</p>
<p align="center"><a href="https://technology.snauka.ru/2016/01/9172/1-138" rel="attachment wp-att-9213"><img class="aligncenter size-full wp-image-9213" src="https://technology.snauka.ru/wp-content/uploads/2016/01/1.jpg" alt="" width="275" height="280" /></a></p>
<p align="center">Рисунок 1. Комплексное использование  опций ContourStyle и Opacity для функции ContourPlot3D:</p>
<p>Достаточно эффективно визуализация используется для представления информации, которая зрительно не воспринимается, либо воспринимается опосредованно через приборы, приспособления или вычисления (напр. температуры, плотности населения, распределения уровней электромагнитных полей и т.д.). В современной науке и технике визуализация — неотъемлемый элемент обработки сложной информации о пространственном и пространственно-временном строении и изменении объектов [3].</p>
<p>Визуализация в компьютерной технике в настоящее время описывается словом рендеринг (от англ. rendering — изображение, перевод, переложение, интерпретация). В зависимости от цели, различают пре-рендеринг, как достаточно медленный процесс визуализации, применяющийся в основном при создании статических изображений и анимаций, и рендеринг в реальном режиме, применяемый в компьютерных играх, который, как правило, использует специальное оборудование – 3D-ускорители.</p>
<p>Под визуализацией в режиме реального времени понимается процесс отображения трёхмерных данных при интерактивной частоте кадров (более 15-20 кадров в секунду) [4], в котором соблюдаются жёсткие ограничения на временные характеристики функционирования. Обычно изображение выводится на двухмерный экран, дисплей компьютера, но также широко применяется стереоскопическая визуализация, и в последнее время получают распространение трёхмерные дисплеи.</p>
<p>Для достижения необходимой для отображения в режиме реального времени частоты кадров и получения качественных изображений приходиться прибегать к компромиссам. Сейчас самым быстрым способом получения изображений является заполнение полигонов с интерполяцией атрибутов пикселей между вершинами графического примитива (rasterization, polygonfilling). При этом получаемое изображение не является полностью фотореалистичным, гораздо лучших результатов можно достичь, применяя более приближенные к реальности физические модели распространения света, которые и требуют гораздо больше вычислительных ресурсов (globalillumination, radiosity, pathtracing, photonmapping и т.д.) [4, 5]</p>
<p>Сегодня разработано и реализовано множество алгоритмов визуализации, а существующее программное обеспечение может использовать некий набор алгоритмов для получения конечного изображения в режиме реального времени.</p>
<p>Для получения почти мгновенного результата в области визуализации прозрачности объекта, причем качество картинки должно быть наилучшим, было разработано четыре группы эффективных методов визуализации объектов. Эти методы считаются наиболее эффективными. В общем случае говорят о следующих группах методов визуализации объектов:</p>
<p>1.      Растеризация (англ. rasterization) и метод сканирования строк (англ. scanlinerendering). Данных подход подразумевает проецирование всех объектов моделируемой сцены на экран, при этом эффект перспективы относительно наблюдателя не учитывается. На сегодня растеризация является основным способом визуализации в режиме реального времени.</p>
<p>Метод не имеет каких-либо строго определенных путей для вычисления цвета пикселей. Процесс растеризации 3D модели в двумерное пространство часто выполняется с помощью специальных функций аппаратного обеспечения в графическом конвейере (graphic pipeline).</p>
<p>2.      Метод бросания лучей (рейкастинг) (англ. ray casting). Алгоритмы этой группы рассматривают сцену из одной точки, которая является и источником лучей, направляемых на объект для определения цвета пикселя. Отличие от метода трассирования заключается в том, что данные лучи прекращают своё распространение как только достигают любой объект сцены либо же её фона. При этом есть возможность использования простейших техник добавления оптических эффектов в отрисовываемую сцену. А эффект перспективы возникает естественным образом при запуске лучей под углом, зависящим от положения пикселя на экране и максимального угла обзора камеры.</p>
<p>3.      Трассировка лучей (англ. raytracing). Метод очень похож на начальном этапе на рейкастинг, однако, лучи, с помощью которых определяется цвет пикселя на двумерном экране, при достижении объекта останавливаются. В общем виде идея метода трассировки лучей незамысловата: к каждому пикселю на дисплее проводится прямой луч от глаза наблюдателя или камеры к элементу выводимой сцены. В результате мы имеем несколько типов лучей [6]. Первичные лучи используются как определители видимости объекта и являются своего рода Z-буфером, который используется в растеризации. Что же касается вторичных лучей, то они разделяются на следующие (рис.2):</p>
<p>•        лучи тени/освещения;</p>
<p>•        лучи отражения;</p>
<p>•        лучи преломления.</p>
<p align="center"><a href="https://technology.snauka.ru/2016/01/9172/2-122" rel="attachment wp-att-9214"><img class="aligncenter size-full wp-image-9214" src="https://technology.snauka.ru/wp-content/uploads/2016/01/2.jpg" alt="" width="591" height="265" /></a></p>
<p align="center">Рисунок 2. Классический алгоритм трассировки лучей</p>
<p>Несомненным преимуществом метода трассировки лучей является качественная обработка эффектов прозрачности.</p>
<p>Каждый из этих компонент вносит свой вклад в цвет пикселя: теневой, отражённый и преломленный. При этом глубина трассирования определяется как раз количеством таких разделений, что, в конечном счете, определяет качество и фотореалистичность изображения. Данный метод наиболее эффективен и позволяет получить максимально реалистичные изображения. Однако, качественный результат предполагает серьезные затраты: метод требует очень больших ресурсов и временных затрат.</p>
<p>4.      Трассировка пути. Одна из разновидностей трассировки лучей, а точнее &#8211; метод просчёта глобального освещения brute-force. Методику рендеринга в компьютерной графике можно охарактеризовать как, стремящуюся имитировать физическое поведение светового луча максимально близко к реальному. Трассировка пути является обобщением теории традиционной трассировки лучей (англ. ray tracing), алгоритм которой как бы отправляет лучи света в от виртуальной камеры вперед, сквозь пространство; луч же как бы отскакивает (отражается) от предметов пока полностью не рассеется или не поглотится [7]. Что касается качества изображений, которые получены при помощи этого метода, зачастую, лучше, чем изображения, полученные при использовании других методов рендеринга, правда именно трассировка пути наиболее затратная методика.</p>
<p>Необходимо также отметить, что трассировка пути &#8211; это наиболее простой, наиболее точный с физической стороны и наиболее медленный по производительности метод рендеринга. Методика трассировки пути наиболее естественным образом позволяет воспроизводить большинство оптических эффектов, тогда как при использование других методик рендеринга либо вовсе невозможно получение желаемых эффектов, либо весьма сложно [8].</p>
<p>Именно исходя из уникальной  точности передачи изображений при помощи использовании данной методики, да еще благодаря отсутствию аппроксимаций и допущений, именно трассировка пути используется для создания изображений, которые после станут используются как образцы для сравнения (почти эталонные изображения) для оценки качества рендеринга других алгоритмов. Разумеется, что для получения картинки высокого качества, необходимо провести трассировку огромного количества лучей; в противном случае могут возникнуть графические артефакты, именуемых шумом.</p>
<p align="center"> <a href="https://technology.snauka.ru/2016/01/9172/3-87" rel="attachment wp-att-9215"><img class="aligncenter size-full wp-image-9215" src="https://technology.snauka.ru/wp-content/uploads/2016/01/3.jpg" alt="" width="591" height="443" /></a></p>
<p align="center">Рисунок 3. Чтобы получить фотореалистичный рендеринг, необходимо сочетать несколько технологий. Трассировка лучей сама по себе недостаточна для симуляции сложных взаимодействий между материалами разных типов и света.</p>
<p> Но, кроме перечисленных основных четырех методик, существуют и другие.</p>
<p>Например, два метода порядко-независимой прозрачности, которые обеспечивают правильную визуализацию полупрозрачных объектов. При этом непрозрачные объекты визуализируются отдельно, и значения цвета и глубины после этого применяются для отсечения невидимых полупрозрачных пикселей и в формуле альфа-смешивания [9, 10]. Для этого используется чтение буфера глубины, либо отдельной текстуры, заполненной соответствующими значениями. Важной деталью обоих методов является сортировка слоев прозрачности на графическом процессоре.</p>
<p>1. Метод трафаретных масок Основная идея метода заключается в использовании маскирования пикселей для разделения их на слои прозрачности [11]. При этом применяется тест и буфер трафарета. В буфер предварительно записываются номера выделяемых слоев прозрачности, а на этапе визуализации выполняется проверка текущих значений на равенство нулю. Если тест пройден, то значение перезаписывается на 255, если нет – уменьшается на единицу. Таким образом, в буфер цвета попадают только пиксели, соответствующие маскам слоев прозрачности. Пиксели различных слоев при этом записываются по соседству и образуют группы. В итоге, разрешение получаемого изображения получается меньше. Дополнительно используется еще один буфер. В него производится запись значения z-координаты (в пространстве наблюдателя) соответствующего пикселя.</p>
<p>Сохранение разрешения финального изображения обеспечивается за счет использования буферов большего размера, чем размеры формируемого кадра (применяется supersampling). В этом случае, N-кратное увеличение буфера результата растеризации позволяет выделять до N слоев прозрачности без потери разрешения. Далее, отдельным проходом постобработки, выполняется его чтение и сортировка. Полученные слои прозрачности упорядочиваются по z-координате, и значения их цветов смешиваются по формуле альфа-смешивания [12].</p>
<p>Расчет слоев прозрачности по группе пикселей в общем случае приводит к появлению визуальных дефектов. Устранение дефектов производится путем фильтрации областей финального изображения, где потенциально могло произойти неправильное альфа-смешивание.</p>
<p>2. Метод динамических списков слоев прозрачности Рассматриваемый далее метод является более универсальным по сравнению с методом трафаретных масок [13]. Он не требует дополнительной фильтрации и использует меньше памяти под хранение слоев прозрачности. Экономия памяти достигается благодаря построению динамических списков поверх линейной памяти. Ее заполнение выполняется на этапе визуализации полупрозрачных объектов и реализует концепцию А-буфера (рис.4).</p>
<p align="center"><a href="https://technology.snauka.ru/2016/01/9172/4-68" rel="attachment wp-att-9216"><img class="aligncenter size-full wp-image-9216" src="https://technology.snauka.ru/wp-content/uploads/2016/01/4.jpg" alt="" width="532" height="368" /></a></p>
<p align="center">Рисунок 4. Правильная обработка эффектов прозрачности с помощью растеризатора требует использования сложных алгоритмов, например, A-буферов</p>
<p>Далее, отдельным проходом постобработки, элементы каждого списка сортируются и используются для расчета правильного альфа-смешивания значений цветов.</p>
<p>Общая схема работы алгоритма построения динамических списков описывается следующими шагами:</p>
<p>• Атомарно увеличить счетчик занятой памяти.</p>
<p>• Атомарно обновить текущую ячейку буфера индексов начал списков предыдущим значением счетчика.</p>
<p>• Записать в память цвет, глубину и адрес следующего элемента, который соответствует предыдущему значению в текущей ячейке буфера индексов начал списков.</p>
<p>В качестве оптимизаций, используется один дополнительный буфер для хранения длины списка и память под требуемые буферы выделяется на видеокарте в виде объектов 2D- текстур [14]. Для доступа на запись используется технология UAV (unordered access view), входящая в состав DirectX версии 11. Кроме этого, для синхронизации операций между потоками, применяются атомарные операции. Использование метода на современном аппаратном обеспечении позволяет эффективно обрабатывать до 64 слоев прозрачности. В большинстве случаев этого более чем достаточно.</p>
<p>Теперь немного о методике смешивания. Ведь если объект является полупрозрачным, то он не полностью закрывает объекты, находящиеся за ним, как будто зритель смотрит через замутненное стекло. Понятие прозрачности в данном случае отвечает за то, насколько же хорошо через данное стекло видно.</p>
<p>Raycasting широко использовался в старинных играх в эру, предшествующую широкому распространению графических ускорителей.</p>
<p>Среди игр, использующих рейкастинг, следует отметить Comanche 3 (1997), DeltaForce (1998) и Outcast (1999).</p>
<p align="center"><a href="https://technology.snauka.ru/2016/01/9172/5-45" rel="attachment wp-att-9217"><img class="aligncenter size-full wp-image-9217" src="https://technology.snauka.ru/wp-content/uploads/2016/01/5.jpg" alt="" width="353" height="264" /></a></p>
<p align="center">Рисунок 5 – Снимок экрана игры Outcast. Изображение получено</p>
<p align="center">с помощью raycasting без использования графического акселератора</p>
<p style="text-align: left;" align="center">Только через несколько лет в играх, использующих растеризацию, стали возможны эффекты, которые присутствовали в Outcast: bump-mapping, shadows, depthoffield, reflections, self-occlusion, bloom.</p>
<p>Raytracing, несмотря на свою трудоёмкую с вычислительной точки зрения природу, сегодня переходит в разряд интерактивных методов визуализации [15]. Существуют рендеры, работающие в реальном или почти в реальном времени. Он всегда являлся одним из самых популярных методов, используемых в демосцене. В лабораториях Intel и NVidia созданы многопроцессорные машины, позволяющие достичь интерактивной частоты смены кадров при трассировке лучей.</p>
<p align="center"><a href="https://technology.snauka.ru/2016/01/9172/6-32" rel="attachment wp-att-9218"><img class="aligncenter size-full wp-image-9218" src="https://technology.snauka.ru/wp-content/uploads/2016/01/6.jpg" alt="" width="549" height="346" /></a></p>
<p align="center">Рисунок 6. Изображение с полупрозрачными объектами, полученное с помощью Araunareal-timeraytracer</p>
<p>В настоящее время изобретаются новые, гибридные техники визуализации, которые пытаются достичь эффектов глобального освещения (globalilluminationwithlightpropagationvolumes).</p>
<p>Начиная еще с 2009 года, поскольку развитие  графических процессоров было поистине феноменальным, а точнее многократно увеличилась их многофункциональность и гибкость, стали разрабатываться и использоваться графические библиотеки &#8220;реального времени&#8221;, благодаря которым успешно используются мощности GPU для необходимых профильных расчётов. Обычно, такие визуализаторы реализуют освещение посредством метода трассировки лучей, а сама геометрия бывает представлена  не полигонами, а вокселями. Эти библиотеки предназначены для работы не только в компьютерных играх, но и в других весьма серьезных интерактивных и неинтерактивных приложениях, в том числе и для научных расчётов.</p>
<p>OptiX — это графические библиотеки &#8220;реального времени&#8221;, разработаны nVidia, и использующие CUDA, работающие только на графических процессорах производства nVidia и предназначены для различных исследований, вычислений и моделирований. «OptiX» &#8211; это гибридный рендер — основноее отличие которого &#8211; не только  использование трассировки лучей, но, также, присутствует и растеризация.</p>
<p>OctaneRender — графическая библиотека реального времени, разработанная компанией RefractiveSoftwareLTD, использующая CUDA и работающая на всех графических процессорах nVidia, начиная с 8Х00. Использует трассировку лучей idTech 6 будет использовать трассировку лучей и воксели.</p>
]]></content:encoded>
			<wfw:commentRss>https://technology.snauka.ru/2016/01/9172/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Кинетический расчет колонны синтеза метанола под средним давлением</title>
		<link>https://technology.snauka.ru/2016/10/10646</link>
		<comments>https://technology.snauka.ru/2016/10/10646#comments</comments>
		<pubDate>Wed, 26 Oct 2016 13:30:39 +0000</pubDate>
		<dc:creator>Концевой Сергей Андреевич</dc:creator>
				<category><![CDATA[Общая рубрика]]></category>
		<category><![CDATA[algorithm]]></category>
		<category><![CDATA[kinetic calculation]]></category>
		<category><![CDATA[material balance]]></category>
		<category><![CDATA[mathematical model]]></category>
		<category><![CDATA[methanol synthesis]]></category>
		<category><![CDATA[program]]></category>
		<category><![CDATA[алгоритм]]></category>
		<category><![CDATA[кинетический расчет]]></category>
		<category><![CDATA[математическая модель]]></category>
		<category><![CDATA[материальный баланс]]></category>
		<category><![CDATA[программа]]></category>
		<category><![CDATA[синтез метанола]]></category>

		<guid isPermaLink="false">https://technology.snauka.ru/?p=10646</guid>
		<description><![CDATA[Введение Современные технологии производства метанола (СМ) основываются на его синтезе, главным образом, из смеси СО + СО2 + Н2  + инертные компоненты, на оксидных медьсодержащих низкотемпературных катализаторах при 200 &#8211; 290 °С под давлением 5,0 &#8211; 10,0 МПа. Синтез проводят в проточных многополочных реакторах, которые располагают в циркуляционных схемах [1]. Сложность процесса синтеза, наличие нескольких возможных механизмов и многих [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Введение</strong></p>
<p style="text-align: justify;">Современные технологии производства метанола (СМ) основываются на его синтезе, главным образом, из смеси СО + СО<sub>2</sub> + Н<sub>2</sub>  + инертные компоненты, на оксидных медьсодержащих низкотемпературных катализаторах при 200 &#8211; 290 °С под давлением 5,0 &#8211; 10,0 МПа. Синтез проводят в проточных многополочных реакторах, которые располагают в циркуляционных схемах [1]. Сложность процесса синтеза, наличие нескольких возможных механизмов и многих кинетических уравнений обусловливают альтернативные подходы к виду математической модели и способов ее решения.</p>
<p><strong>Анализ литературы</strong></p>
<p style="text-align: justify;">На протяжении длительного времени считалось, что углерод в молекуле CH<sub>3</sub>ОН происходит из молекулы оксида углерода (II) [2]. Однако в 1975 году Розовским А. Я. и Лин Г. И. [3] на основе фундаментальных исследований с помощью методов относительных селективности, меченых атомов, а также прямого эксперимента установлен иной макромеханизм процесса образования метанола, который не предусматривался классическими концепциями. Этими учеными доказано, а затем другими исследователями подтверждено: на оксидных катализаторах собственно СМ протекает путем гидрирования СО<sub>2</sub> (а не СО, как это считалось ранее) с образованием метанола и воды:</p>
<p><a href="https://technology.snauka.ru/2016/10/10646/r01" rel="attachment wp-att-10647"><img class="size-full wp-image-10647 aligncenter" src="https://technology.snauka.ru/wp-content/uploads/2016/10/r01.jpg" alt="" width="337" height="31" /></a></p>
<p><a href="https://technology.snauka.ru/2016/10/10646/r02" rel="attachment wp-att-10648"><img class="size-full wp-image-10648 aligncenter" src="https://technology.snauka.ru/wp-content/uploads/2016/10/r02.jpg" alt="" width="286" height="26" /></a></p>
<p style="text-align: justify;">Наиболее популярными направлениями моделирования СМ является оптимизация работы реакторов, модернизация технологических схем и разработка систем управления промышленным процессом. Так, в работах зарубежных авторов [4 – 6] моделируется работа многотрубного и радиального реакторов СМ и изучается влияние изменения структуры потоков на производительность по целевым компонентом. Отметим также разработку системы управления процессом синтеза метанола с комбинированной моделью для внедрения на ОАО «Северодонецкое объединение Азот» [7].</p>
<p style="text-align: justify;">Более близкими к нашему исследованию являются работы [8 – 11]. Работы [8 –10] содержат информацию об адаптации и использования одной из кинетических моделей образования CH<sub>3</sub>OH из СО и данные о составе промышленного технологического газа. Кроме того, в работе [9] предложены варианты учета степени дезактивации катализатора и реконструкции установки с внедрением в технологическую схему реактора предкатализа. Авторы статьи [11] для расчетов использовали кинетическую модель, предусматривающую образование метанола из СО<sub>2</sub>. Ими предложены и математически подтверждены незначительные модернизации технологической схемы и изменения направлений газовых потоков.</p>
<p><strong>Постановка задачи</strong></p>
<p style="text-align: justify;">Наши расчеты основаны на модели авторов [3], что предусматривает образование метанола из СО<sub>2</sub>. Уравнения скоростей СМ и конверсии СО в СО<sub>2</sub> имеют вид, соответственно:</p>
<p><a href="https://technology.snauka.ru/2016/10/10646/r0102" rel="attachment wp-att-10649"><img class="alignnone size-full wp-image-10649" src="https://technology.snauka.ru/wp-content/uploads/2016/10/r0102.jpg" alt="" width="889" height="280" /></a><br />
где  <em>W<sub>M </sub></em>– скорость синтеза метанол, моль/(т∙с);</p>
<p><em>W<sub>K </sub></em>– скорость образования диоксида углерода, моль/(т∙с);</p>
<p><em>m<sub>кam </sub></em>– масса катализатора, т;</p>
<p><em>τ</em>– время, с;</p>
<p><em>n<sub>CH3OH </sub></em>, <em>n<sub>CO2 </sub></em> – количество вещества СН<sub>3</sub>ОН и СО<sub>2</sub>, соответственно, моль;</p>
<p><em>k<sub>M </sub></em>, <em>k<sub>K </sub></em> – константы скоростей реакций образования метанола и диоксида углерода, моль/(т∙с∙МПа);</p>
<p><em>K<sub>1</sub></em>, <em>K<sub>2 </sub></em> – константы равновесия стадий адсорбции СО<sub>2</sub> и H<sub>2</sub>O, соответственно, МПа<sup>‑1</sup>;</p>
<p><em>P<sub>i </sub></em>– текущие парциальные давления участников реакций, МПа.</p>
<p><strong>Материалы исследований</strong></p>
<p>Задачей осуществляемого расчета является определение объема катализатора, необходимого для получения заданного выхода метанола. Первым шагом к решению этой задачи является определение времен контакта газовой смеси со слоями катализатора, необходимых для достижения определенного значения содержания метанола на выходе каждой из четырех полок. Эта цель достигается путем решения системы дифференциальных уравнений (1) и (2). Для проведения численного интегрирования этой системы необходимо осуществить математические преобразования с правыми и левыми частями этих уравнений таким образом, чтобы остались только два неизвестных (не считая время τ).</p>
<p style="text-align: justify;">Одним из вариантов такого преобразования есть такой, при котором левые части составят выражения  <em>dxCO2/dτ</em> и <em>dxCO/dτ</em>, а все парциальные давления после знаков «равно» будут выражены через эти две степени превращения по диоксиду <em>xCO2</em> и оксиду углерода <em>xCO</em>, соответственно.</p>
<p>Для реализации этого замысла выполняются следующие шаги:</p>
<p>- обе части уравнения (1) умножаются на массу катализатора <em>m<sub>кaт</sub></em>;</p>
<p>- из выражения текущего количества метанола, моль:</p>
<p><a href="https://technology.snauka.ru/2016/10/10646/p0107-2" rel="attachment wp-att-10695"><img class="alignnone size-full wp-image-10695" src="https://technology.snauka.ru/wp-content/uploads/2016/10/p01071.jpg" alt="" width="204" height="38" /></a>получаем: <a href="https://technology.snauka.ru/2016/10/10646/p0108" rel="attachment wp-att-10696"><img class="alignnone size-full wp-image-10696" src="https://technology.snauka.ru/wp-content/uploads/2016/10/p0108.jpg" alt="" width="162" height="38" /></a>.</p>
<p><span style="text-align: justify;">После подстановки полученного выражения в уравнение скорости образования метанола и деления обеих его частей на исходную концентрацию <em>n<sup>0</sup>CO<sub>2</sub></em><em> </em>получаем искомую левую часть:</span></p>
<p><a href="https://technology.snauka.ru/2016/10/10646/r03-2" rel="attachment wp-att-10651"><img class="alignnone size-full wp-image-10651" src="https://technology.snauka.ru/wp-content/uploads/2016/10/r031.jpg" alt="" width="889" height="149" /></a></p>
<p>Аналогичным образом проводим преобразования с кинетическим уравнением (2) образования СО<sub>2</sub>. В результате получаем:</p>
<p style="text-align: justify;"><a href="https://technology.snauka.ru/2016/10/10646/r04" rel="attachment wp-att-10652"><img class="alignnone size-full wp-image-10652" src="https://technology.snauka.ru/wp-content/uploads/2016/10/r04.jpg" alt="" width="889" height="164" /></a><br />
Текущие парциальные давления участников преобразований, если пренебречь изменением объема газовой смеси, выражаются через степени превращения СО<sub>2</sub> и СО следующим образом:</p>
<p>&nbsp;</p>
<p><a href="https://technology.snauka.ru/2016/10/10646/r0509" rel="attachment wp-att-10653"><img class="alignnone size-full wp-image-10653" src="https://technology.snauka.ru/wp-content/uploads/2016/10/r0509.jpg" alt="" width="889" height="264" /></a><br />
где  <em>N<sub>i</sub><sup>0</sup></em>– молярные доли участников процесса в исходной смеси;</p>
<p><em>P</em>– давление процесса, МПа.</p>
<p style="text-align: justify;">Величины, фигурирующие в уравнениях (1) и (2), представляют собой количества (моль) СО<sub>2</sub> и СО, соответственно, контактирующих с катализатором в каждый момент времени  τ для заданного расхода газовой смеси и значений начальных концентраций:</p>
<p align="center"><a href="https://technology.snauka.ru/2016/10/10646/r0103" rel="attachment wp-att-10654"><img class="alignnone size-full wp-image-10654" src="https://technology.snauka.ru/wp-content/uploads/2016/10/r0103.jpg" alt="" width="329" height="58" /></a>,</p>
<p>где  <em>R<sup>0</sup>CO<sub>2</sub></em>, <em>R</em> – расход диоксида углерода и исходной газовой смеси, соответственно, при нормальных условиях, м<sup>3</sup>/с;</p>
<p><em>V<sub>кат</sub></em>, <em>m<sub>кат</sub></em>, <em>ρ<sub>кат</sub></em> — соответственно объём, масса и насыпная плотность катализатора загруженного в реактор, м<sup>3</sup>, т, т/м<sup>3</sup>;</p>
<p><em>V<sub>т </sub></em>— молярный объём идеального газа, м<sup>3</sup>/моль (<em>V<sub>т</sub></em> = 0,0224).</p>
<p>Выражение для количества  <em>n<sup>0</sup>CO </em>получено  аналогично:</p>
<p><a href="https://technology.snauka.ru/2016/10/10646/r0104" rel="attachment wp-att-10655"><img class="size-full wp-image-10655 aligncenter" src="https://technology.snauka.ru/wp-content/uploads/2016/10/r0104.jpg" alt="" width="286" height="56" /></a></p>
<p style="text-align: justify;">После соответствующих замен в уравнениях (3) и (4) и несложных упрощений получаем окончательный вариант системы, который можно использовать непосредственно для расчетов:</p>
<p>&nbsp;</p>
<p><a href="https://technology.snauka.ru/2016/10/10646/r1011" rel="attachment wp-att-10656"><img class="alignnone size-full wp-image-10656" src="https://technology.snauka.ru/wp-content/uploads/2016/10/r1011.jpg" alt="" width="902" height="514" /></a></p>
<p>где                                                          <a href="https://technology.snauka.ru/2016/10/10646/r0105" rel="attachment wp-att-10657"><img class="alignnone size-full wp-image-10657" src="https://technology.snauka.ru/wp-content/uploads/2016/10/r0105.jpg" alt="" width="524" height="33" /></a></p>
<p><a href="https://technology.snauka.ru/2016/10/10646/r0106-2" rel="attachment wp-att-10659"><img class="alignnone size-full wp-image-10659" src="https://technology.snauka.ru/wp-content/uploads/2016/10/r01061.jpg" alt="" width="236" height="30" /></a>.</p>
<p style="text-align: justify;">Численное интегрирование полученной системы уравнений (10 – 11) с помощью функции MathCAD rkfixed дает возможность построить графики  <em>xCO<sub>2</sub> = f(τ) </em>и <em>xCO = f(τ)</em>  на одной координатной плоскости и <em>N(CO2)= f(τ)</em>, <em>N(H2) = f(τ)</em>, <em>N(CH3OH) = f(τ)</em>, <em>N(H2O) = f(τ)</em>,  <em>N(CO)= f(τ) </em>на другой. Из второго графика определяем время контакта, необходимое для обеспечения заданной объемной (молярной) доли метанола на выходе из полки.</p>
<p>По времени контакта рассчитывается объем катализатора на каждой из полок с учетом степени использования поверхности η, м<sup>3</sup>:</p>
<p><a href="https://technology.snauka.ru/2016/10/10646/r012" rel="attachment wp-att-10660"><img class="alignnone size-full wp-image-10660" src="https://technology.snauka.ru/wp-content/uploads/2016/10/r012.jpg" alt="" width="889" height="108" /></a></p>
<p style="text-align: justify;">После этого, используя уравнения (5 – 9), рассчитываем состав (% об.) газа на выходах из полок. Значения степеней превращения берутся из таблицы результатов работы функции rkfixed – соответствующие определенному из графика времени контакта. Из-за пренебрежения изменением объема системы рассчитанная молярная доля метанола на выходе из полки может отличаться от ожидаемой концентрации. В таком случае надо корректировать значения времени и по тому же принципу найти новые значения степени превращения.</p>
<p><strong>Результаты исследований</strong></p>
<p style="text-align: justify;">Проведен расчет по следующим исходным данным, при этом состав газа (табл. 1) по полкам взят из материального баланса, составленного авторами данной статьи: давление процесса, МПа – 5; насыпная плотность катализатора, т/м<sup>3</sup> – 1,3; степень использования поверхности катализатора, доля – 0,5. Постоянные кинетических уравнений (10) и (11) при температуре синтеза 240 °С и при 30% степени дезактивации катализатора [3]:</p>
<p><em>k<sub>M </sub></em>= 4,1 мкмоль СН<sub>3</sub>ОН/(г кат-ра∙с∙МПа);</p>
<p><em>k<sub>K </sub></em>= 4,15∙ мкмоль СО<sub>2</sub>/(г кат-ра∙с∙МПа);</p>
<p><em>K<sub>1 </sub></em>= 18 МПа<sup>-1</sup>;  = 23 МПа<sup>-1</sup>.</p>
<p>Таблица 1 – Исходные данные</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="214">
<p align="center">Параметр</p>
</td>
<td width="100">
<p align="center">1 полка</p>
</td>
<td width="99">
<p align="center">2 полка</p>
</td>
<td width="107">
<p align="center">3 полка</p>
</td>
<td width="107">
<p align="center">4 полка</p>
</td>
</tr>
<tr>
<td width="214">
<p align="left">Расход газа на входе, м<sup>3</sup>/ч</p>
</td>
<td width="100">
<p align="center">891000</p>
</td>
<td width="99">
<p align="center">924200</p>
</td>
<td width="107">
<p align="center">957300</p>
</td>
<td width="107">
<p align="center">990500</p>
</td>
</tr>
<tr>
<td width="214">
<p align="left">Температура на входе <em>T<sub>вх</sub></em>, К</p>
</td>
<td width="100">
<p align="center">513</p>
</td>
<td width="99">
<p align="center">518,5</p>
</td>
<td width="107">
<p align="center">523,5</p>
</td>
<td width="107">
<p align="center">528</p>
</td>
</tr>
<tr>
<td width="214">
<p align="left">Концентрация CH<sub>3</sub>OH после полки, доля</p>
</td>
<td width="100">
<p align="center">0,01</p>
</td>
<td width="99">
<p align="center">0,016</p>
</td>
<td width="107">
<p align="center">0,022</p>
</td>
<td width="107">
<p align="center">0,027</p>
</td>
</tr>
<tr>
<td width="214">
<p align="left">Концентрация СО<sub>2 </sub>на входе, доля</p>
</td>
<td width="100">
<p align="center">0,2282</p>
</td>
<td width="99">
<p align="center">0,2291</p>
</td>
<td width="107">
<p align="center">0,2301</p>
</td>
<td width="107">
<p align="center">0,2308</p>
</td>
</tr>
<tr>
<td width="214">
<p align="left">Концентрация СОна входе, доля</p>
</td>
<td width="100">
<p align="center">0,2027</p>
</td>
<td width="99">
<p align="center">0,2011</p>
</td>
<td width="107">
<p align="center">0,2003</p>
</td>
<td width="107">
<p align="center">0,1978</p>
</td>
</tr>
<tr>
<td width="214">
<p align="left">Концентрация Н<sub>2 </sub>на входе, доля</p>
</td>
<td width="100">
<p align="center">0,4630</p>
</td>
<td width="99">
<p align="center">0,4539</p>
</td>
<td width="107">
<p align="center">0,4468</p>
</td>
<td width="107">
<p align="center">0,4357</p>
</td>
</tr>
<tr>
<td width="214">
<p align="left">Концентрация СН<sub>3</sub>ОНна входе, доля</p>
</td>
<td width="100">
<p align="center">0,0041</p>
</td>
<td width="99">
<p align="center">0,0100</p>
</td>
<td width="107">
<p align="center">0,0160</p>
</td>
<td width="107">
<p align="center">0,0210</p>
</td>
</tr>
<tr>
<td width="214">
<p align="left">Концентрация Н<sub>2</sub>Она входе, доля</p>
</td>
<td width="100">
<p align="center">0,0009</p>
</td>
<td width="99">
<p align="center">0,0030</p>
</td>
<td width="107">
<p align="center">0,0040</p>
</td>
<td width="107">
<p align="center">0,0070</p>
</td>
</tr>
<tr>
<td width="214">
<p align="left">Концентрация инертных газов на входе, доля</p>
</td>
<td width="100">
<p align="center">0,1011</p>
</td>
<td width="99">
<p align="center">0,1029</p>
</td>
<td width="107">
<p align="center">0,1028</p>
</td>
<td width="107">
<p align="center">0,1077</p>
</td>
</tr>
</tbody>
</table>
<p style="text-align: justify;">Полученные результаты сведены в табл. 2. В статье [8] авторами приведены промышленные данные и данные собственного адекватного расчета работы установки М-750 ООО «Сибметахим», г. Томск. Эти данные (табл. 3) были использованы нами для апробации созданной программы на альтернативных исходных условиях синтеза. В табл. 3 приведены результаты проведенного нами расчета по вышеприведенному алгоритму и сопоставлены с литературными и промышленными данными.</p>
<p>Таблица 2 – Результаты расчета</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="265">
<p align="center">Параметр</p>
</td>
<td width="95">
<p align="center">1 полка</p>
</td>
<td width="85">
<p align="center">2 полка</p>
</td>
<td width="93">
<p align="center">3 полка</p>
</td>
<td width="94">
<p align="center">4 полка</p>
</td>
</tr>
<tr>
<td width="265">Концентрация CH<sub>3</sub>OH на выходе полки, доля (исходные данные)</td>
<td width="95">
<p align="center">0,01</p>
</td>
<td width="85">
<p align="center">0,016</p>
</td>
<td width="93">
<p align="center">0,022</p>
</td>
<td width="94">
<p align="center">0,027</p>
</td>
</tr>
<tr>
<td width="265">Концентрация СО<sub>2 </sub>на входе, %</td>
<td width="95">
<p align="center">22,82</p>
</td>
<td width="85">
<p align="center">22,91</p>
</td>
<td width="93">
<p align="center">23,01</p>
</td>
<td width="94">
<p align="center">23,08</p>
</td>
</tr>
<tr>
<td width="265">Концентрация СО<sub>2 </sub>на выходе, %</td>
<td width="95">
<p align="center">22,49</p>
</td>
<td width="85">
<p align="center">22,70</p>
</td>
<td width="93">
<p align="center">22,84</p>
</td>
<td width="94">
<p align="center">23,11</p>
</td>
</tr>
<tr>
<td width="265">Концентрация СОна входе, %</td>
<td width="95">
<p align="center">20,27</p>
</td>
<td width="85">
<p align="center">20,11</p>
</td>
<td width="93">
<p align="center">20,03</p>
</td>
<td width="94">
<p align="center">19,78</p>
</td>
</tr>
<tr>
<td width="265">Концентрация СОна выходе, %</td>
<td width="95">
<p align="center">20,52</p>
</td>
<td width="85">
<p align="center">20,24</p>
</td>
<td width="93">
<p align="center">20,12</p>
</td>
<td width="94">
<p align="center">19,67</p>
</td>
</tr>
<tr>
<td width="265">Концентрация Н<sub>2</sub> на входе, %</td>
<td width="95">
<p align="center">46,30</p>
</td>
<td width="85">
<p align="center">45,39</p>
</td>
<td width="93">
<p align="center">44,68</p>
</td>
<td width="94">
<p align="center">43,57</p>
</td>
</tr>
<tr>
<td width="265">Концентрация Н<sub>2</sub> на выходе, %</td>
<td width="95">
<p align="center">45,01</p>
</td>
<td width="85">
<p align="center">44,24</p>
</td>
<td width="93">
<p align="center">43,56</p>
</td>
<td width="94">
<p align="center">42,67</p>
</td>
</tr>
<tr>
<td width="265">Концентрация СН<sub>3</sub>ОН на входе, %</td>
<td width="95">
<p align="center">0,41</p>
</td>
<td width="85">
<p align="center">1,00</p>
</td>
<td width="93">
<p align="center">1,60</p>
</td>
<td width="94">
<p align="center">2,10</p>
</td>
</tr>
<tr>
<td width="265">Концентрация СН<sub>3</sub>ОН на выходе, %</td>
<td width="95">
<p align="center">1,04</p>
</td>
<td width="85">
<p align="center">1,62</p>
</td>
<td width="93">
<p align="center">2,22</p>
</td>
<td width="94">
<p align="center">2,71</p>
</td>
</tr>
<tr>
<td width="265">Концентрация Н<sub>2</sub>О на входе, %</td>
<td width="95">
<p align="center">0,09</p>
</td>
<td width="85">
<p align="center">0,30</p>
</td>
<td width="93">
<p align="center">0,40</p>
</td>
<td width="94">
<p align="center">0,70</p>
</td>
</tr>
<tr>
<td width="265">Концентрация Н<sub>2</sub>О на выходе, %</td>
<td width="95">
<p align="center">0,71</p>
</td>
<td width="85">
<p align="center">0,79</p>
</td>
<td width="93">
<p align="center">0,85</p>
</td>
<td width="94">
<p align="center">0,95</p>
</td>
</tr>
<tr>
<td width="265">Концентрация инертных газов на входе, %</td>
<td width="95">
<p align="center">10,11</p>
</td>
<td width="85">
<p align="center">10,29</p>
</td>
<td width="93">
<p align="center">10,28</p>
</td>
<td width="94">
<p align="center">10,77</p>
</td>
</tr>
<tr>
<td width="265">Концентрация инертных газов на выходе, %</td>
<td width="95">
<p align="center">10,24</p>
</td>
<td width="85">
<p align="center">10,41</p>
</td>
<td width="93">
<p align="center">10,40</p>
</td>
<td width="94">
<p align="center">10,90</p>
</td>
</tr>
<tr>
<td width="265">Время контакта, с</td>
<td width="95">
<p align="center">0,038</p>
</td>
<td width="85">
<p align="center">0,042</p>
</td>
<td width="93">
<p align="center">0,048</p>
</td>
<td width="94">
<p align="center">0,059</p>
</td>
</tr>
<tr>
<td width="265">Степень превращения СО<sub>2</sub>, %</td>
<td width="95">
<p align="center">2,7</p>
</td>
<td width="85">
<p align="center">2,6</p>
</td>
<td width="93">
<p align="center">2,6</p>
</td>
<td width="94">
<p align="center">2,5</p>
</td>
</tr>
<tr>
<td width="265">Степень превращения СО, %</td>
<td width="95">
<p align="center">0,03</p>
</td>
<td width="85">
<p align="center">0,56</p>
</td>
<td width="93">
<p align="center">0,77</p>
</td>
<td width="94">
<p align="center">1,7</p>
</td>
</tr>
<tr>
<td width="265">Объём катализатора, м<sup>3</sup></td>
<td width="95">
<p align="center">18,8</p>
</td>
<td width="85">
<p align="center">21,6</p>
</td>
<td width="93">
<p align="center">25,5</p>
</td>
<td width="94">
<p align="center">32,5</p>
</td>
</tr>
<tr>
<td width="265"><em>Σ</em>, м<sup>3</sup></td>
<td colspan="4" width="367">
<p align="center">98,4</p>
</td>
</tr>
<tr>
<td width="265">Производительность по CH<sub>3</sub>OH (ректификат), т/ч</td>
<td colspan="4" width="367">
<p align="center">32,05</p>
</td>
</tr>
</tbody>
</table>
<p>Таблица 3 – Сравнение результатов собственного расчета с литературными и промышленными данными</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td rowspan="2" colspan="2" width="253">
<p align="center">Технологичный поток</p>
</td>
<td colspan="6" width="380">
<p align="center">Концентрация, %об.</p>
</td>
</tr>
<tr>
<td width="53">
<p align="center">CO</p>
</td>
<td width="60">
<p align="center">CO<sub>2</sub></p>
</td>
<td width="67">
<p align="center">H<sub>2</sub></p>
</td>
<td width="67">
<p align="center">CH<sub>3</sub>OH</p>
</td>
<td width="60">
<p align="center">H<sub>2</sub>O</p>
</td>
<td width="73">Инерты</td>
</tr>
<tr>
<td width="113">
<p align="center"><strong>Промышлен-ные данные</strong></p>
</td>
<td width="140">
<p align="center"><strong>Вход на 1 полку</strong></p>
</td>
<td width="53">
<p align="center"><strong>3,069</strong></p>
</td>
<td width="60">
<p align="center"><strong>2,000</strong></p>
</td>
<td width="67">
<p align="center"><strong>82,483</strong></p>
</td>
<td width="67">
<p align="center"><strong>0,475</strong></p>
</td>
<td width="60">
<p align="center"><strong>0,077</strong></p>
</td>
<td width="73">
<p align="center"><strong>11,896</strong></p>
</td>
</tr>
<tr>
<td width="113">
<p align="center">Расчет [8]</p>
</td>
<td width="140">
<p align="center">Выход из 1 полки</p>
</td>
<td width="53">
<p align="center">1,695</p>
</td>
<td width="60">
<p align="center">1,298</p>
</td>
<td width="67">
<p align="center">80,879</p>
</td>
<td width="67">
<p align="center">2,807</p>
</td>
<td width="60">
<p align="center">0,875</p>
</td>
<td width="73">
<p align="center">12,446</p>
</td>
</tr>
<tr>
<td width="113">
<p align="center"><em>Наш расчет</em></p>
</td>
<td width="140">
<p align="center">Выход из 1 полки</p>
</td>
<td width="53">
<p align="center">1,644</p>
</td>
<td width="60">
<p align="center">1,351</p>
</td>
<td width="67">
<p align="center">80,933</p>
</td>
<td width="67">
<p align="center">2,805</p>
</td>
<td width="60">
<p align="center">0,822</p>
</td>
<td width="73">
<p align="center">12,445</p>
</td>
</tr>
<tr>
<td rowspan="2" width="113">
<p align="center">Расчет [8]</p>
</td>
<td width="140">
<p align="center">Вход на 2 полку</p>
</td>
<td width="53">
<p align="center">2,083</p>
</td>
<td width="60">
<p align="center">1,496</p>
</td>
<td width="67">
<p align="center">81,332</p>
</td>
<td width="67">
<p align="center">2,148</p>
</td>
<td width="60">
<p align="center">0,650</p>
</td>
<td valign="top" width="73">
<p align="center">12,291</p>
</td>
</tr>
<tr>
<td width="140">
<p align="center">Выход из 2 полки</p>
</td>
<td width="53">
<p align="center">1,065</p>
</td>
<td width="60">
<p align="center">1,127</p>
</td>
<td width="67">
<p align="center">80,361</p>
</td>
<td width="67">
<p align="center">3,705</p>
</td>
<td width="60">
<p align="center">1,083</p>
</td>
<td valign="top" width="73">
<p align="center">12,659</p>
</td>
</tr>
<tr>
<td width="113">
<p align="center"><em>Наш расчет</em></p>
</td>
<td width="140">
<p align="center">Выход из 2 полки</p>
</td>
<td width="53">
<p align="center">1,019</p>
</td>
<td width="60">
<p align="center">1,188</p>
</td>
<td width="67">
<p align="center">80,427</p>
</td>
<td width="67">
<p align="center">3,690</p>
</td>
<td width="60">
<p align="center">1,022</p>
</td>
<td valign="top" width="73">
<p align="center">12,654</p>
</td>
</tr>
<tr>
<td rowspan="2" width="113">
<p align="center">Расчет [8]</p>
</td>
<td width="140">
<p align="center">Вход на 3 полку</p>
</td>
<td width="53">
<p align="center">1,569</p>
</td>
<td width="60">
<p align="center">1,346</p>
</td>
<td width="67">
<p align="center">80,894</p>
</td>
<td width="67">
<p align="center">2,893</p>
</td>
<td width="60">
<p align="center">0,830</p>
</td>
<td valign="top" width="73">
<p align="center">12,468</p>
</td>
</tr>
<tr>
<td width="140">
<p align="center">Выход из 3 полки</p>
</td>
<td width="53">
<p align="center">0,543</p>
</td>
<td width="60">
<p align="center">0,908</p>
</td>
<td width="67">
<p align="center">79,821</p>
</td>
<td width="67">
<p align="center">4,538</p>
</td>
<td width="60">
<p align="center">1,336</p>
</td>
<td width="73">
<p align="center">12,854</p>
</td>
</tr>
<tr>
<td width="113">
<p align="center"><em>Наш расчет</em></p>
</td>
<td width="140">
<p align="center">Выход из 3 полки</p>
</td>
<td width="53">
<p align="center">0,518</p>
</td>
<td width="60">
<p align="center">0,92</p>
</td>
<td width="67">
<p align="center">79,826</p>
</td>
<td width="67">
<p align="center">4,552</p>
</td>
<td width="60">
<p align="center">1,324</p>
</td>
<td width="73">
<p align="center">12,859</p>
</td>
</tr>
<tr>
<td rowspan="2" width="113">
<p align="center">Расчет [8]</p>
</td>
<td width="140">
<p align="center">Вход на 4 полку</p>
</td>
<td width="53">
<p align="center">1,076</p>
</td>
<td width="60">
<p align="center">1,138</p>
</td>
<td width="67">
<p align="center">80,382</p>
</td>
<td width="67">
<p align="center">3,681</p>
</td>
<td width="60">
<p align="center">1,070</p>
</td>
<td width="73">
<p align="center">12,653</p>
</td>
</tr>
<tr>
<td width="140">
<p align="center">Выход из 4 полки</p>
</td>
<td width="53">
<p align="center">0,321</p>
</td>
<td width="60">
<p align="center">0,724</p>
</td>
<td width="67">
<p align="center">79,461</p>
</td>
<td width="67">
<p align="center">4,994</p>
</td>
<td width="60">
<p align="center">1,538</p>
</td>
<td width="73">
<p align="center">12,962</p>
</td>
</tr>
<tr>
<td width="113">
<p align="center"><em>Наш расчет</em></p>
</td>
<td width="140">
<p align="center">Выход из 4 полки</p>
</td>
<td width="53">
<p align="center">0,346</p>
</td>
<td width="60">
<p align="center">0,777</p>
</td>
<td width="67">
<p align="center">79,547</p>
</td>
<td width="67">
<p align="center">4,907</p>
</td>
<td width="60">
<p align="center">1,481</p>
</td>
<td width="73">
<p align="center">12,942</p>
</td>
</tr>
<tr>
<td width="113">
<p align="center"><strong>Промышлен-ные данные </strong></p>
</td>
<td width="140">
<p align="center"><strong>Выход из 4 </strong><strong>полки</strong></p>
</td>
<td width="53">
<p align="center"><strong>0,410</strong></p>
</td>
<td width="60">
<p align="center"><strong>0,706</strong></p>
</td>
<td width="67">
<p align="center"><strong>79,472</strong></p>
</td>
<td width="67">
<p align="center"><strong>4,898</strong></p>
</td>
<td width="60">
<p align="center"><strong>1,565</strong></p>
</td>
<td width="73">
<p align="center"><strong>12,949</strong></p>
</td>
</tr>
</tbody>
</table>
<p><span style="text-align: justify;">Сравнение результатов расчета с промышленными и литературными данными [8] показывает возможность адекватного использования созданных нами алгоритма и программы.</span></p>
<p><strong>Выводы</strong></p>
<p style="text-align: justify;">Разработаны алгоритм и программа для расчета синтеза метанола в многополочном реакторе на основе современных представлений о механизме его образования на медь-цинк-алюминиевом катализаторе. Адекватность программы проверена на двух существенно отличающихся наборах промышленных данных. Полученные результаты подтверждают возможность использования алгоритма и разработанной программы в среде MathCAD для многовариантных расчетов времени контакта, объема катализатора и содержания компонентов на выходе каждой полки.</p>
]]></content:encoded>
			<wfw:commentRss>https://technology.snauka.ru/2016/10/10646/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Разработка и описание алгоритмов мониторинга и оперативного оповещения о тепловом состоянии трансформаторов и работе охладителей</title>
		<link>https://technology.snauka.ru/2017/05/13390</link>
		<comments>https://technology.snauka.ru/2017/05/13390#comments</comments>
		<pubDate>Sun, 21 May 2017 11:08:01 +0000</pubDate>
		<dc:creator>Гераськин Никита Александрович</dc:creator>
				<category><![CDATA[Общая рубрика]]></category>
		<category><![CDATA[алгоритм]]></category>
		<category><![CDATA[ГЭС]]></category>
		<category><![CDATA[оперативное оповещение]]></category>
		<category><![CDATA[система мониторинга]]></category>
		<category><![CDATA[система охлаждения]]></category>
		<category><![CDATA[тепловой контроль]]></category>
		<category><![CDATA[трансформатор]]></category>

		<guid isPermaLink="false">https://technology.snauka.ru/2017/05/13390</guid>
		<description><![CDATA[В связи с увеличением потребления электрической мощности в России, повышением автоматизации отрасли и увеличению надежности и долговечности эксплуатации основного оборудования электростанций требуется разработка и внедрение автоматизированных систем мониторинга и технической диагностики основного и вспомогательного оборудования электроустановок. Ввод системы оперативного мониторинга не заменяет традиционные методы защиты основного и вспомогательного оборудования, а дополняет их, в значительной мере [...]]]></description>
			<content:encoded><![CDATA[<p>В связи с увеличением потребления электрической мощности в России, повышением автоматизации отрасли и увеличению надежности и долговечности эксплуатации основного оборудования электростанций требуется разработка и внедрение автоматизированных систем мониторинга и технической диагностики основного и вспомогательного оборудования электроустановок.</p>
<p>Ввод системы оперативного мониторинга не заменяет традиционные методы защиты основного и вспомогательного оборудования, а дополняет их, в значительной мере повышая их надёжность.</p>
<p>В данной работе рассматривается возможность разработки алгоритмов для реализации оперативного контроля за работой маслоохладителей и мониторинга за тепловым состоянием обмотки трансформаторов. В качестве примера взяты охладители трансформаторов ОРЦ-533000/500, используемые энергетической компанией на гидроэлектростанции.</p>
<p>Работа алгоритмов основана на анализе тенденции изменения исследуемого параметра.</p>
<p>Система охлаждения типа OFWF предназначена для отвода тепловых потерь трансформатора блока и состоит (на каждой фазе) из:</p>
<ul>
<li>
<div>3-х маслоохладителей (2 рабочих, 1 резервного);</div>
</li>
<li>
<div>3-х электронасосов (2 рабочих, 1 резервного);</div>
</li>
<li>
<div>пускового электронасоса;</div>
</li>
<li>
<div>патрубков забора горячего масла из верхней части бака трансформатора;</div>
</li>
<li>
<div>патрубков нагнетания охлажденного масла в нижнюю часть бака трансформатора.</div>
</li>
</ul>
<p>Для обеспечения работоспособности и обслуживания системы охлаждения имеются:</p>
<ul>
<li>
<div>термометры и манометры для определения температуры и давления воды и трансформаторного масла на входе и выходе каждого маслоохладителя;</div>
</li>
<li>
<div>абсорбционные фильтры для регенерации трансформаторного масла;</div>
</li>
<li>
<div>фильтр очистки масла от механических примесей;</div>
</li>
<li>
<div>шкафы питания и управления охлаждением (ШПОТ, ШОТ, ШОМ).</div>
</li>
</ul>
<p>Рассмотрим работу системы охлаждения трансформаторного оборудования. Горячее масло из верхней части бака трансформатора  перекачивается насосом через маслоохладитель, охлаждается циркулирующей в нем водой и возвращается через пластинчатый фильтр  в нижнюю часть бака. Циркуляция воды через охладитель осуществляется с помощью водяного центробежного насоса.</p>
<p>В данной работе представлено три алгоритма оперативного мониторинга и контроля:</p>
<ul>
<li>
<div>мониторинг за рабочим состоянием маслоохладителей;</div>
</li>
<li>
<div>мониторинг за состоянием температуры обмотки трансформатора;</div>
</li>
<li>слежение за состоянием давления воды и масла в каждом маслоохладителе.</li>
</ul>
<p>Во всех алгоритмах величины уставок и задержек необходимо уточнить по результатам опытной эксплуатации.</p>
<p><strong>Разработка алгоритма оперативного мониторинга за рабочим состоянием маслоохладителей.<br />
</strong></p>
<p style="text-align: center;"><img class="alignnone size-full wp-image-13395" title="а" src="https://technology.snauka.ru/wp-content/uploads/2017/05/a.png" alt="" width="852" height="717" /></p>
<p style="text-align: center;">Рисунок 1. Схема алгоритма оперативного мониторинга за рабочим состоянием маслоохладителей</p>
<p>Показания датчиков температуры нижних слоёв масла в баке трансформатора (Т<sub>a</sub>) сравниваются с температурой уставки (Т<sub>уст</sub>), которая выбирается из диапазона температуры масла при нормальном режиме работы системы охлаждения трансформатора. Температура масла у трансформаторов (с системой охлаждения OFWF) не должна превышать 70ºС [1, с. 8]. Ввод этой уставки необходим для реализации мониторинга тенденции изменения температуры в пределах нормальной работы, что позволит вовремя обнаружить зарождение дефекта и запланировать ремонт, предотвратив аварийный и внеплановый вывод оборудования. При превышении уставки проверяется наличие нагрузки на трансформаторах. При присутствии таковой, сравнивается температура на входе в маслоохладитель и выходе из него. По полученным результатам производится либо сброс сигнала, либо вывод его на монитор АРМ в виде сигнала «Неисправная работа маслоохладителей». Этот сигнал не является аварийным. Он предназначен для того, чтобы обслуживающий персонал обратил внимание на проблему в работе системы охлаждения трансформатора и успел вовремя разработать и предпринять ряд определённых действий, не допускающих перехода оборудования в предаварийное и аварийное состояние.</p>
<p>Принцип работы алгоритма изложен ниже. Для примера выберем фазу А. Показания датчика температуры Т<sub>а</sub> сравниваются с температурой уставки Т<sub>уст а</sub>. Если значение температуры, снятое с датчика не превышает уставку (логический «0»), сигнал сбрасывается через логический элемент «ИЛИ» в начало алгоритма. Если значение температуры выше или равно температуре уставки (логическая «1»), сигнал проходит к сумматору. Затем проводится проверка нагрузки трансформатора. Значение с датчика нагрузки (Р) сравнивается со значением уставки (Р<sub>уст</sub>). Р<sub>уст</sub> принимаем равное нулю. Если Р=Р<sub>уст</sub>, сигнал сбрасывается через логический элемент «ИЛИ» в начало цикла. Если Р&gt;Р<sub>уст</sub>, сигнал проходит к сумматору.</p>
<p>Если выявлено, что трансформатор находится под нагрузкой и температура масла после прохождения маслоохладителей выше принятой уставки, проверяется разность температур масла на входе и выходе каждого маслоохладителя. Критерием нормальной работы маслоохладителя является снижение в нем температуры на 10ºС при номинальной нагрузке трансформатора [1, с. 15]. Исходя из этого, уставку принимаем равную 10ºС. При |ΔТ| ниже установленного критерия у всех охладителей подаётся сигнал «Неисправная работа маслоохладителей» на АРМ обслуживающего персонала, при учёте исправности всех датчиков. Если хотя бы один охладитель имеет приемлемое значение температуры охлаждающего масла, сигнал сбрасывается в начало алгоритма.</p>
<p><strong>Разработка алгоритма мониторинга за состоянием температуры обмотки трансформатора.<br />
</strong></p>
<p style="text-align: center;"><img class="alignnone size-full wp-image-13397" title="б" src="https://technology.snauka.ru/wp-content/uploads/2017/05/b.png" alt="" width="911" height="480" /></p>
<p style="text-align: center;">Рисунок 2. Схема алгоритма мониторинга за состоянием температуры обмотки трансформатора</p>
<p>Данный алгоритм подразумевает введение дополнительной уставки температуры обмоток трансформатора. Её выбирают из диапазона нормальной работы контролируемого оборудования. Представленный алгоритм может быть использован для проведения оперативного мониторинга за состоянием температуры обмотки трансформатора в нормальном режиме работы, наблюдения за наличием скорости роста исследуемого параметра и тенденции её изменения. Это поможет выявить дефект на ранней стадии его развития и заблаговременно оповестить обслуживающий персонал о его наличии, не доводя оборудование до предаварийного и аварийного состояния. Тем самым повышается эффективность управления и исключается работа оборудования в неблагоприятных режимах (перегрев). У персонала будет достаточно времени для осуществления необходимых мер для обнаружения и устранения дефекта до срабатывания предупредительной сигнализации.</p>
<p>Принцип работы предложенного алгоритма представлен ниже. Температура обмоток трансформатора не должна превышать 100ºС. На каждой фазе блочных трансформаторов имеются индикаторы температуры (2 шт.) наиболее горячей точки обмоток, которые при достижении обмоткой температуры 105ºС действуют на сигнал, а при достижении обмоткой температуры 115ºС – на отключение трансформатора через МП защиты. Предлагается ввести уставку 80ºС.</p>
<p>Показания датчика температуры Т<sub>об</sub> сравниваются с температурой уставки Т<sub>уст</sub>. Если значение температуры, снятое с датчика не превышает уставку (логический «0»), сигнал сбрасывается через логический элемент «ИЛИ» в начало алгоритма. Если значение температуры выше или равно температуре уставки (логическая «1»), сигнал проходит к сумматору. Затем проводится проверка нагрузки трансформатора. Значение с датчика нагрузки (Р) сравнивается со значением уставки (Р<sub>уст</sub>). Р<sub>уст</sub> принимаем равное нулю. Если Р=Р<sub>уст</sub>, сигнал сбрасывается через логический элемент «ИЛИ» в начало алгоритма. Если Р&gt;Р<sub>уст</sub>, сигнал проходит к сумматору.</p>
<p>Если температура обмотки, снятая с индикатора температуры, превысила уствку и трансформатор находится под нагрузкой, проверяется наличие изменения исследуемого параметра и определяется скорость этого изменения. Если скорость роста температуры меньше скорости уставки, сигнал сбрасывается через логический элемент «ИЛИ» в начало алгоритма. Если скорость изменения температуры больше или равна скорости уставки, импульс направляется к сумматору. Вместе с тем анализируется изменение контролируемого параметра. Текущее значение (Т<sub>t.об</sub>) сравнивается с сохранённым значением (Т<sub>с.об</sub>), выданным с задержкой по времени. Если разница температур превышает установленную ∆Т<sub>об</sub> или равна ей, импульс проходит к сумматору. При ∆Т&lt;∆Т<sub>уст</sub> происходит сброс через логический элемент «ИЛИ» в начало алгоритма. Процесс сравнения повторяется заданное количество раз (n) с определённой задержкой по времени. Если данный процесс выявил рост скорости нагрева обмотки или рост температуры с постоянной скоростью, то с учётом исправности датчиков Т<sub>об</sub> и Р подаётся сигнал «Ненормальное изменение температуры в маслоохладителе» на пульт управления. Это необходимо для того, чтобы обслуживающий персонал обратил на это внимание и успел разработать ряд действий для устранения неисправности, пока она не переросла в аварийный дефект.</p>
<p><strong>Алгоритм слежения за состоянием давления воды и масла в каждом маслоохладителе.<br />
</strong></p>
<p style="text-align: center;"><strong><img class="alignnone size-full wp-image-13396" title="с" src="https://technology.snauka.ru/wp-content/uploads/2017/05/s.png" alt="" width="608" height="542" /><br />
</strong></p>
<p style="text-align: center;">Рисунок 3. Схема алгоритма слежения за состоянием давления воды и масла в каждом маслоохладителе</p>
<p>В системе охлаждения трансформаторного оборудования имеются барометры, предназначенные для измерения давления воды и трансформаторного масла на входе и выходе каждого маслоохладителя. При масловодяном охлаждении трансформаторов давление масла в маслоохладителях должно превышать давление циркулирующей в них воды не менее чем на 0,1 кгс/см<sup>2</sup> (10 кПа) при минимальном уровне масла в расширителе трансформатора [2, с. 93]. Исходя из этих требований и для обнаружения несоответствия до аварийного срабатывания системы защиты, примем уставку разности давлений равную 0,2 кгс/см<sup>2</sup> (20 кПа). При необходимости значение задаваемой уставки корректируется.</p>
<p>Превышение давления трансформаторного масла в маслоохладителе необходимо для того, чтобы исключить подсосы воды в масло  в случае образования неплотностей и трещин в трубах, по которым циркулирует вода. С этой же целью маслонасосы установлены перед маслоохладителями. Алгоритм предназначен для оперативного оповещения обслуживающего персонала о ненормальном изменении давления охлаждающих сред в маслоохладителях.</p>
<p>Работа алгоритма заключается в следующем. Значения с барометров Р<sub>1м</sub> (давление масла) и Р<sub>1в</sub> (давление воды) сравниваются в реальном времени. Затем полученную разность параметров сравнивают с ∆Р<sub>уст</sub> (уставка превышения). Если разница между снятыми показаниями превышает уставку, сигнал сбрасывается в начало алгоритма. Если разница между снятыми показаниями меньше или равна уставке и датчики Р<sub>1м</sub> и Р<sub>1в</sub>исправны, тогда после временной задержки подаётся сигнал на монитор АРМ «Ненормальное изменение давления в маслоохладителе».</p>
<p>Данный алгоритм можно применять как для контроля давления охлаждающих сред на входе в маслоохладитель, так и на выходе из него.</p>
<p><strong>Выводы.<br />
</strong></p>
<p>Для реализации предложенной системы мониторинга нет необходимости вложения крупных денежных средств. Вся информация для обработки и анализа поступает с датчиков, которые установлены на оборудовании и имеют связь с АСУ ТП станции.</p>
<p>Предложенные алгоритмы нуждаются в корректировке, которые учитывают особенности оборудования и условия его эксплуатации. Также нужно учитывать, что применение алгоритмов оперативного мониторинга не заменяет используемые методы технологических защит, а дополняет их.</p>
<p>Применение предложенных алгоритмов позволит:</p>
<p>1) Повысить эффективность управления и исключить работу оборудования в режимах с перегревом масла или обмотки;</p>
<p>2) Выявлять дефекты системы охлаждения на начальных стадиях развития не доводя до предаварийного и аварийного состояния оборудования;</p>
<p>3) Уменьшить количество аварийных отключений оборудования.</p>
]]></content:encoded>
			<wfw:commentRss>https://technology.snauka.ru/2017/05/13390/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Программная реализация алгоритма прямого вейвлет-преобразования в MathCad</title>
		<link>https://technology.snauka.ru/2017/09/13773</link>
		<comments>https://technology.snauka.ru/2017/09/13773#comments</comments>
		<pubDate>Sat, 30 Sep 2017 04:44:51 +0000</pubDate>
		<dc:creator>Короткова Неля Николаевна</dc:creator>
				<category><![CDATA[Общая рубрика]]></category>
		<category><![CDATA[алгоритм]]></category>
		<category><![CDATA[вейвлет - преобразование]]></category>
		<category><![CDATA[программное обеспечение]]></category>

		<guid isPermaLink="false">https://technology.snauka.ru/?p=13773</guid>
		<description><![CDATA[Вейвлет-преобразование является новым этапом развития преобразования Фурье, которое используется для разложения функций в ряды. Вейвлеты появились для разложения нестационарных функций. Существуют самые разнообразные вейвлеты, которые применяются для решения различных задач: обработка экспериментальных данных, обработка изображений, удаление шума (фильтрация), сжатие данных, сжатие файлов с изображением, реставрация и идентификация изображений.  Вейвлет-разложение очень трудоемко,  поэтому появилось быстрое вейвлет-преобразование. [...]]]></description>
			<content:encoded><![CDATA[<p>Вейвлет-преобразование является новым этапом развития преобразования Фурье, которое используется для разложения функций в ряды. Вейвлеты появились для разложения нестационарных функций. Существуют самые разнообразные вейвлеты, которые применяются для решения различных задач: обработка экспериментальных данных, обработка изображений, удаление шума (фильтрация), сжатие данных, сжатие файлов с изображением, реставрация и идентификация изображений.  Вейвлет-разложение очень трудоемко,  поэтому появилось быстрое вейвлет-преобразование.</p>
<p>Данная статья посвящена реализации алгоритма прямого вейвлет-преобразования, приведенного, например в работах [1-2], средствами пакета MathCad.</p>
<p>Сначала задано количество реализаций сигнала N и реализован &#8220;зашумленный&#8221; сигнал f, как показано на рисунке 1 .</p>
<p><a href="https://technology.snauka.ru/2017/09/13773/ris-signal" rel="attachment wp-att-13775"><img class="aligncenter size-full wp-image-13775" src="https://technology.snauka.ru/wp-content/uploads/2017/09/Ris-Signal.png" alt="" width="220" height="184" /></a></p>
<p style="text-align: center;">Рис.1. Задание исходного сигнала.</p>
<p>Затем задан порядок фильтра n. Так как были выбраны вейвлеты Добеши, в функции Dobesh_hg(n), присваиваются коэффициенты h и g, в зависимости от порядка фильтра n.   Далее, для ускорения расчетов при прямом вейвлет-преобразовании, коэффициенты делятся на √2. Это реализовано в MathCad, как показано на рисунке 2.</p>
<p><a href="https://technology.snauka.ru/2017/09/13773/ris-dobeshi" rel="attachment wp-att-13776"><img class="aligncenter size-full wp-image-13776" src="https://technology.snauka.ru/wp-content/uploads/2017/09/Ris-Dobeshi.png" alt="" width="342" height="649" /></a></p>
<p style="text-align: center;">Рис.2. Задание коэффициентов Добеши.</p>
<p>Затем в нулевую строку матрицы a1 заносим сигнал f, переменной kk, в которой хранится количество столбцов, присваиваем значение N, уровню m присваиваем значение 0.</p>
<p>Для случая n=2, пока элемент столбца 4n не равен нулю (это определяет наименьший размер сигнала, который можно восстановить), в цикле уменьшаем количество столбцов в два раза, в цикле по k находим коэффициенты аппроксимирующего сигнала a1 и детализирующего сигнала d1 (от 0 до kk-2 столбца) этого уровня разложения, в двух циклах по l находим последние элементы и увеличиваем номер уровня разложения. Реализация в MathCad приведена на рисунке 3.</p>
<p><a href="https://technology.snauka.ru/2017/09/13773/ris-t2" rel="attachment wp-att-13777"><img class="aligncenter size-full wp-image-13777" src="https://technology.snauka.ru/wp-content/uploads/2017/09/Ris-t2.png" alt="" width="450" height="566" /></a></p>
<p style="text-align: center;">Рис.3. Разложение сигнала при порядке вейвлета Добеши  n=2.</p>
<p>Если же n=4, аналогично в цикле уменьшаем количество столбцов,  в цикле по k находим элементы от 0 до kk-4 столбца, затем  находим последние три элемента и увеличиваем номер уровня разложения.</p>
<p>Возвращаются из функции коэффициенты a1,d1 и номер максимального уровня разложения m.</p>
<p><a href="https://technology.snauka.ru/2017/09/13773/ris-t4" rel="attachment wp-att-13778"><img class="aligncenter size-full wp-image-13778" src="https://technology.snauka.ru/wp-content/uploads/2017/09/Ris-t4.png" alt="" width="903" height="501" /></a></p>
<p style="text-align: center;">Рис.4. Разложение сигнала при порядке вейвлета Добеши  n=4.</p>
<p>Разложения на более высоких уровнях получается более сглаженными, то есть сигнал фильтруется от шумов.</p>
<p><a href="https://technology.snauka.ru/2017/09/13773/ris-n4" rel="attachment wp-att-13774"><img class="aligncenter size-full wp-image-13774" src="https://technology.snauka.ru/wp-content/uploads/2017/09/Ris-n4.png" alt="" width="1411" height="401" /></a></p>
<p style="text-align: center;">а) исходный сигнал                                                                                                    б) разложение на уровне 1                                                        в) разложение на уровне 3</p>
<p style="text-align: center;">Рис.5. Разложение исходного сигнала на различных уровнях</p>
<p>К достоинствам данного алгоритма относится экономия памяти, так как нт необходимости хранить для вейвлет-преобразования всю разреженную матрицу, как это предлагается в [2] .  А также достоинством является решение задачи стандартными средствами MathCad, без использования расширения Wavelet Extension Pack этого пакета, предназначенного для работы с вейвлетами.</p>
]]></content:encoded>
			<wfw:commentRss>https://technology.snauka.ru/2017/09/13773/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
