Современные станки с числовым программным управлением представляют собой сложные мехатронные системы. Для обслуживания подобной техники необходимы высококвалифицированные специалисты, как во время наладки и запуска оборудования, так и на этапе эксплуатации. Специалисты такого уровня, обычно находятся в удаленных сервисных центрах. Таким образом, потребность в диагностическом программном обеспечении, с помощью которого возможно заниматься дистанционным анализом входных и выходных сигналов электроавтоматики, располагая конфигурацией и результатами измерений, достаточно велика. Система диагностики должна уметь считывать сигналы, запоминать результаты измерений вместе с результатами конфигурации измерений, выполнять разнообразные операции над измеренными сигналами, распечатывать в удобном виде осциллограммы измерений. В данной статье будет рассмотрен вопрос генерации отчетов для печати сигналов и конфигураций измерений системы диагностики.
Использование XML как формата хранения информации и обмена данными в последнее время стало общепринятой практикой. И на это есть множество причин, таких как, легкость использования, независимость от аппаратных и программных платформ, простота интеграции разных приложений. К тому же выразительная мощность XML довольно велика для того, чтобы описать данные практически любой сложности, а информация, оформленная в виде XML, может обрабатываться не только машинами, но и человеком, что значительно облегчает отладку.
На рисунке показана упрощенная схема преобразования информации, хранящейся в виде XML-документа. Процесс обработки делится на 3 стадии:
XSLT-процессор разбирает входящий документ и документ преобразования, создавая для них древовидные структуры данных, этот этап называется этапом парсинга документа (англ.: parse - разбирать). Поэтому XSLT-процессор обычно называют парсером. Выходящий документ может быть представлен не только в различных форматах, таких как HTML, PDF, RTF и проч.
К дереву входящего документа применяются правила, описанные в XSLT-преобразовании. В итоге процессор создает дерево выходящего документа. Этот этап называется этапом преобразования.
Для созданного дерева генерируется физическая сущность. Этот этап носит название - сериализация.
Преобразование XML данных
В XML-документе хранятся данные о сигналах измерений, конфигурационные данные. На выходе преобразования мы хотим получить HTML документ с нужной нам информацией и сигналами измерений. По ходу статьи будут рассмотрены способы получения текстовых и графических данных из XML-документа.
Выбор инструментария
Выбор XSLT-процессора
При выборе XSLT-процессора будем учитывать следующие характеристики:
производительность
популярность
поддерживаемые платформы
Несмотря на то, что XSLT-процессоры являются довольно сложными программами, в подавляющем большинстве они распространяются по бесплатным лицензиям. Как следствие, ценовой показатель не является определяющим.
От производительности процессора зависит реальность использования XSLT в решениях, требующих быстрого времени реакции. Производительность процессоров очень нелегко оценить. Во-первых, дело приходится иметь с различными программными и языковыми платформами, производительность которых различается уже сама по себе. Во-вторых, вследствие применения различных алгоритмов, эффективность процессоров может неодинаково проявляться на различных типах преобразований. В-третьих, не все процессоры полностью и правильно реализуют возможности XSLT, то есть далеко не все преобразования будут выполняться на всех процессорах одинаково. Вследствие этого ни одна из оценок производительности не может претендовать на абсолютную достоверность. Впрочем, этого и не требуется - нам важно сориентироваться среди существующих процессоров по скорости, а для этого будет достаточно и приблизительных данных. На диаграмме приведены данные по производительности XSLT-процессоров.
Оценка производительности XSLT-процессоров в соответствии с XSLTMark*
Немаловажным фактором при выборе XSLT-процессора является его популярность - ведь чем более распространён процессор, тем больше возможность учитывать опыт предыдущих разработок и, соответственно, надежность системы. На следующей диаграмме представлены результаты опросов русскоязычных XML-разработчиков.
MSXML Parser устраивает нас, как один из наиболее производительных, популярных, и проработанных процессоров. Поддерживаемая платформа - MS Windows. Разработчик - Microsoft Corporation.
Среда разработки
Поскольку XML представляет собой текстовый документ, то создавать XML-документы возможно в обычных текстовых редакторах. Однако, написание XML-кода значительно упрощается в случае использования специализированного XML-редактора. Ниже приводится перечень наиболее распространенных программ:
Самый мощный продукт из рассматриваемых редакторов. XMLSpy, изначально разрабатывавшийся как обычный XML-редактор, превратился в полноценную IDE (интегрированную среду разработки). В зависимости от потребностей, пользователь может выбрать нужную ему версию (Enterprise, Professional или Home) редактора. Сложно говорить о возможностях или о недостатках этого редактора. XMLSpy умеет все, а недостатков как таковых просто нет! Среди ключевых достоинств программы от компании Altova можно выделить следующие: работа со многими базами данных, поддержка XSLT 2.0, работа с системами контроля версий (CVS), встроенный дебаггер, возможность поключения XSL-FO-процессора и многие другое. Практически все дополнения, а также различную документацию можно скачать с сайта разработчика.
Xselerator отличается простым и не столь "перегруженным" интерфейсом как многие похожие программы. По умолчанию редактор использует MSXML-парсер. Кроме стандартных (валидация, подсветка синтаксиса, работа с таблицами и др.) функций работы с XML редактор имеет встроенный дебаггер, который поможет программисту проверить правильность работы логики написанной программы или найти ошибку, закравшуюся в код.
Вполне приличный XML- и XSL-редактор. Он отличается продуманностью рабочего интерфейса - всё на своих местах, удобно и ничего лишнего. Из возможностей: встроенный дебаггер, поддерка XSLT 2.0 (средствами парсера Saxon 8.1B), возможность подключения других XML-парсеров и плагинов, значительно расширяющих функциональность редактора.
XSL Maker позволяет полностью абстрагироваться от процесса ручного создания XSL-файлов. Используя интерфейс Drag&Drop можно создавать на странице различные текстовые поля, checkbox'ы, таблицы и многое другое. Также при работе над проектом, программа показывает в древовидном виде иерархическую структуру рабочих файлов.
Возможно выбрать один из двух установленных процессоров для трансформации XML-документов - Xalan или Saxon. Благодаря последнему, редактор поддерживает XSLT 2.0. Присутствует также XSL-дебаггер, который прилагается в виде отдельного приложения. В остальном Exchanger XML Editor представляет собой посредственный редактор без каких-либо отличительных возможностей.
Наиболее мощным и удобным является редактор XML Spy, ставший стандартом де-факто для разработчиков, использующих XML в своих проектах.
Векторная графика
Для вывода на печать сигналов измерения необходимо определится с форматом векторной графики.
VML (Vector Markup Language) - это XML-приложение, разработанное корпорацией Microsoft для кодирования двумерной векторной графики. Поддержка VML в настоящее время осуществляется только браузером Internet Explorer 5.x (и выше) и пакетом Microsoft Office 2000.
Microsoft передал в мае 1998 г. спецификацию этого языка W3C в качестве предложения для стандартизации, однако W3C предложил в качестве стандарта собственную спецификацию - SVG (Scalable Vector Graphics). Этот язык будет в ближайшее время поддержан многими системами. SVG схема определяет, как в XML записывается структура данных, описывающих векторную картинку. В спецификации языка SVG также описано, как создавать SVG-анимации, SVG-программы и документы. Все это делает SVG сильным конкурентом технологии Flash.
SVG-файлы представляют собой обычный текст, и они чаще всего занимают меньший объем, чем аналогичные графические образы в форматах JPEG или GIF. Другие преимущества векторной графики включают способность изменения размеров без потери качества.
В настоящее время существует множество SVG-браузеров и редакторов, позволяющих создавать и просматривать SVG-документы. Компания Adobe создала plug-in, который позволяет просматривать SVG-файлы в браузере, а также включила поддержку работы с SVG-Файлами в редактор векторной графики Illustrator. Другие компании, такие как Corel, Sun и IBM также включили в свои продукты определенную поддержку SVG. Так как схема SVG достаточно проста, вы можете без труда создать SVG-файл даже в простом текстовом редакторе.
SVG является наиболее подходящим и развитым средством для выполнения преобразования текстовых данных из XML-документа в векторный формат.
Преобразование XML данных в формат SVG
Схема преобразования ничем не отличается от обычной, кроме содержания XSL-преобразования и расширения выходящего документа (*.svg). Как уже говорилось ранее для просмотра SVG-документов в браузере необходимо установка SVG plug-in'а.
Создание преобразования XML-документа в HTML формат
XML (eXtensible Markup Language) - есть, ни что иное, как формат описания данных.
Основными классами задач XML являются:
хранение данных
обмен данными и проекты интеграции
создание новых языков
Документ XML представляет собой данные и структуру этих данных. Чтобы эффективно использовать XML, во многих случаях необходимо уметь преобразовывать структуру XML-документов. Традиционные процедурные языки программирования плохо подходят для решения этой задачи: программы преобразования структуры получаются слишком громоздкими. Решением этой проблемы стал язык XSLT (eXtensible Stylesheet Language for Transformations), т.е. расширяемый язык стилей для преобразований. Для получения информации XML-документа, в том числе информации о структуре служит язык путей - XPath (XML Path Language). XPath является лаконичным, но при этом мощным средством обращения к XML-документам.
XSLT - это XML-язык в полном смысле этого слова: программа на XSLT (преобразование) является хорошо оформленным (well-formed) XML документом. В отличие от традиционных языков программирования, преобразование в XSLT не является последовательностью действий, которую необходимо выполнить для достижения результата. Преобразование - это набор шаблонных правил, каждое из которых определяет процедуру обработки определенной части документа. XSLT декларирует правила преобразования, которые применяются к входящему XML-документу, а XSLT-процессор генерирует выходящий документ, являющийся целью преобразования.
Рассмотрим простой пример генерации текстовых данных в формате HTML из XML-документа. В качестве среды разработки воспользуемся редактором XML Spy (Altova).
<!-- С помощью данного преобразования выведем в табличном виде данные о сигналах, хранящиеся в атрибутах Text и SignalID элемента <Signal> -->
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="Measurement"> <!-- Шаблонное правило. Атрибут match указывает на то, какой элемент должен обрабатываться этим правилом -->
<xsl:if test="@Text='Neue Messung Stankin1 append'"> <!-- Выведем данные конкретного элемента Measurement -->
<html>
<head>
<title><xsl:value-of select="@Text"/></title> <!-- Вывод атрибута Text текущего элемента Measurement в заголовке html страницы -->
</head>
<body>
<table border="1"> <!-- Создаем таблицу -->
<xsl:apply-templates select="Signal"/> <!-- Вызов шаблонного правила Signal -->
</table>
</body>
</html>
</xsl:if>
</xsl:template>
<xsl:template match="Signal"> <!-- Шаблонное правило -->
<tr> <!-- Заполняем ячейки таблицы -->
<td><xsl:value-of select="@Text"/></td> <!-- Вывод атрибута Text текущего элемента Signal -->
<td><xsl:value-of select="@SignalID"/></td>
</tr>
</xsl:template>
</xsl:stylesheet>
Результат в виде HTML файла
Язык XSLT позволяет производить преобразования в разные форматы данных. Далее рассмотрим форматы векторной графики, основанные на языке XML.
Создание XSL-преобразования для вывода сигнала в формате SVG
В XML-документе хранятся данные о результатах измерений. Представим сигнал, заданный набором точек в виде графического изображения в формате SVG. Для примера работы с текстом в SVG выведем название и SignalID.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="Measurement"> <!-- Шаблонное правило -->
<svg width="21cm" height="13cm" viewBox="0 0 2100 1300" xmlns="http://www.w3.org/2000/svg"> <!-- Определяем зону выводимого изображения и пространство имен svg -->
<title>WholeSignal</title>
<rect x="0" y="0" width="2100" height="1200" fill="none" stroke="grey" stroke-width="1" /> <!-- С помощью элементов <rect> и <line> выведем на экран обрамляющий прямоугольник и оси -->
<line x1="0" y1="600" x2="2100" y2="600" stroke-width="1" stroke="grey"/>
<line x1="100" y1="1200" x2="100" y2="0" stroke-width="1" stroke="grey"/>
<xsl:if test="@Text='Neue Messung Stankin1 append'">
<xsl:apply-templates select="Signal"/> <!-- Вызов шаблона -->
</xsl:if>
</svg>
</xsl:template>
<xsl:template match="Signal"> <!-- Шаблонное правило -->
<xsl:if test="@Name='S-0-0040'">
<xsl:variable name="ScaleX" select="2000 div @XScale"/> <!-- В переменную ScaleX запишем масштаб по оси X. Аналогичные действия произведем для оси Y -->
<xsl:variable name="ScaleY" select="1200 div @YScale"/>
<!-- Цвет сигнала хранится в атрибуте color в виде 0xFFFF00, чтобы получить цвет в виде FFFF00, воспользуемся XPath функцией substring-after() -->
<g xmlns="http://www.w3.org/2000/svg" transform="translate(100, 600) scale({$ScaleX}, {$ScaleY})" stroke-width="{3*(@YScale div 1200)}" stroke=" #{substring-after(@Color,'0x')}">
<!-- Для обработки всех элементов Point воспользуемся циклом for-each -->
<xsl:for-each select="Point" >
<xsl:if test="position() < last()">
<line x1="{@X}" y1="{-1*@Y}" x2="{following-sibling::Point[1]/@X}" y2="{-1*following-sibling::Point[1]/@Y}" /> <!-- Выводим сигнал с помощью элемента <line>, последовательно соединяя точки результатов измерений --><!--С помощью оси навигации following-sibling языка XPath вычисляем значение атрибутов братских узлов, которые следуют за текущим узлом в порядке просмотра документа -->
</xsl:if>
</xsl:for-each>
</g>
<g xmlns="http://www.w3.org/2000/svg" transform="translate(250, 1206)">
<rect x="20" y="0" width="24" height="24" fill="#{substring-after(@Color,'0x')}" stroke="grey" stroke-width="1" />
<text x="50 " y="24" style="fill:black; font-family:Verdana; font-size:24; text-anchor:left;" > <!-- Выводим текст -->
<tspan>Name: <xsl:value-of select="@Name"/></tspan>
<tspan x="50" dy="28">SignalID: <xsl:value-of select="@SignalID"/></tspan>
</text>
</g>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
Результат в виде SVG файла
Интеграция SVG в HTML формат
К сожалению, стандарт HTML пока не поддерживает прямую интеграцию svg элементов в HTML файле. Чтобы вставить на страницу готовый svg документ необходимо воспользоваться тэгом <embed>: <embed src="file.svg" pluginspage="http://www.adobe.com/svg/viewer/install/" height="640" width="480" >
Если плагин для просмотра svg документов на html странице не установлен, атрибут pluginspage направляет браузер пользователя на страницу установки плагина.
Данный вариант не позволяет обойтись только XSL технологией для генерации html документа, содержащего текстовую и графическую информацию из XML файла.
С помощью пространств имен элемента object, а также XML-инструкции IMPORT можно интегрировать svg тэги прямо в html файл:
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:svg="http://www.w3.org/2000/svg">
:
<body>
<object id="AdobeSVG"
CLASSID="clsid:78156a80-c6a1-4bbf-8e6a-3cd390eeb4e2">
</object>
<?IMPORT NAMESPACE="svg" IMPLEMENTATION="#AdobeSVG">
:
<svg:svg width="100px" height="100px" viewBox="0 0 100 100"> <!-- Каждый элемент svg должен иметь префикс - в данном случае svg -->
<svg:circle cx="30" cy="30" r="20"
fill="blue" stroke="none"/>
</svg:svg>
Однако данный метод имеет несколько недостатков:
В режиме предварительного просмотра svg картинки не отображаются
Не работает масштабирование и перемещение svg картинки
Перечисленные недостатки не позволяют использовать данный метод.
С помощью JavaScript можно решить эти проблемы. Алгоритм решения следующий:
Svg элементы вставляются в html файл также, как в предыдущем примере, т.е. с префиксом.
При загрузке страницы вызывается скрипт, который подменяет все элементы svg с префиксом на элемент <embed src="file.svg" :> (file.svg должен существовать).
На месте файла file.svg с помощью JavaScript загружаем необходимые нам графические данные.
Схема преобразования выглядит следующим образом:
Преобразование XML данных в формат SVG
С помощью данного метода был получен следующий результат.
HTML файл с интегрированной SVG графикой
Список литературы
Валиков А.Н. Технология XSLT. - СПб.: БХВ-Петербург, 2002. - 544 с
Сосонкин В.Л., Мартинов Г.М. Концепция числового программного управления мехатронными системами: реализация диагностической задачи управления - Мехатроника №3 2001 с. 2-6
Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав.