Сосонкин_Системы_ЧПУ (1087166), страница 41
Текст из файла (страница 41)
выполняются в разных процессах). Достоинство такой связи в высокой устойчивости к ошибкам. При ошибке в сервере, приводящей к завершению серверного процесса, клиент продолжит работу. Недостатком локального сервера можно посчитать низкую скорость: информация от одDisp-интерфейсИнтерфейс IDispatchDISPIDИмяIUnknown::QueryInterface ()1"Start"IUnknown::AddRef()2"Stop"IUnknown::Release ()3"Self Test"IDispatch: :GetTypeInfoCount()IDispatch-.-.GetTypelnfoODISPIDIDispatch: :GetIDsOfNames()1Start()IDispatch:.Invoike()2Stop()3SelfTestOУказатель на функциюРис. 136.
Обобщенный интерфейс управления приводом на базе IDispatchГлава 4. Технологии разработки программного обеспечения систем управленияТаблица виртуальныхфункций объектов синтерфейсом IDriveControl225Таблица виртуальных функцийобъектов с дуальным интерфейсомIDriveControlIUnknown::QueryInterface ()(Unknown::QueryInterface ()IUnknown::AddRef()IUnknown::AddRef()IUnknown::Release ()IUnknown::Release ()IDriveControl::Start()IDispatch:: GetTypelnfoCountQIDriveControl::Stop()IDispatch: :GctTypeInfoQI DriveContro!:: Sel fTest()I Dispatch: :GetI DsOfNamesQРис.
137. Таблицы виртуальныхфункций объектов с интерфейсомIDriveControlIDriveControl::Start()IDispatch::Invoike()I Drive-Control: :StopOIDriveControl::SelfTest()ного процесса к другому должна быть запакована, передана и распакованана границе процессов.
СОМ берет этот сервис на себя.Удаленный сервер расположен на другом компьютере по отношению кклиенту. Эта клиент-серверная связь наиболее медленная, поскольку здесьоказывают влияние пропускная способность и задержки в сети. Удаленнаясвязь устанавливается с помощью протокола удаленного вызова процедурв распределенной модели COM (DCOM).Объект СОМ может создавать и использовать другие СОМ-объекты,при этом клиенту не известно, является ли СОМ-сервер составным илимонолитным.
Использование одного компонента другим возможно посредством включения или агрегации.Включение (containment) предполагает, что внешний компонент предоставляет интерфейс включаемому компоненту и обращается к нему дляорганизации интерфейса. Создадим, например, компонент геометрическогоканала системы ЧПУ и вместо реализации функций управления приводомвоспользуемся включенным компонентом управления приводом. Если клиент обращается к интерфейсу IDriveControl (рис.
138), компонент геометрического канала CMachineChannelServer переправляет вызов компонентуlUnknown1.• CMachine • .ChannelServerCDriveServerОIDriveControlIChannelControlIDriveControlРис. 138. Включение компонентовСОМклиент226В. Л. Сосонкин. Г.М. Мартинов. Системы числового программного управленияCDriveServer. Внешний компонент может специализировать этот интерфейс,добавив свой код перед вызовом внутреннего компонента или после этого.Агрегация (aggregation) означает, что внешний компонент агрегируетинтерфейс внутреннего компонента, не создавая интерфейс заново и непередавая вызов этого интерфейса явно, как при включении. Вместо этоговнешний компонент передает клиенту указатель на интерфейс внутреннего компонента.Агрегация интерфейса IDriveControl компонентом геометрического канала показана на рис. 139.
Она применяется тогда, когда реализация интерфейса устраивает разработчика полностью.lUnknown/ • CMachine.ChannelServerCDriveServerIChannelControlО-ОIDriveControlРис. 139. Агрегация компонентов4.4.4. Область использования СОМПреимущества компонентного подхода обеспечили широкую сферу егоприменения.Во-первых, это повторное использование компонентов. СОМ позволяет однажды создать программный код, а потом использовать его во многихприложениях. Через какое-то время в компонент можно вносить коррекции и усовершенствования, что не повлечет необходимости менять любоеиспользующее его приложение.Во-вторых, это параллельная разработка. Обычно начинают с разработки интерфейсов компонента, что определяет корректность совместной раlUnknownРазработчикипервой группыlUnknownРазработчикивторой группыРазработчикутретьей группыРис. 140.
Параллельная разработка программного обеспеченияГлава 4. Технологии разработки программного обеспечения систем управления"2.2.7боты всего программного обеспечения (рис. 140). Последующую разработку функциональных возможностей компонентов можно распараллеливать.В-третьих, это унификация прикладного программного обеспечения.Речь идет о производстве, в котором собраны несовместимые системы управления разного типа и от разных производителей. Пусть нужно создатьприложение, осуществляющее измерение сигналов для диагностики следящих приводов.
Создают обобщенный СОМ-интерфейс и разрабатываютСОМ-сервер для каждого контроллера управления приводами. Прикладное приложение обращается через обобщенный СОМ-интерфейс к любому СОМ-серверу контроллера, при этом протокол управления конкретнымконтроллером привода полностью прозрачен (рис. 141).SiemensBoschRockwellПриложениеРис. 141. Унификация программного обеспеченияСуществуют некоторые особенности использования СОМ.
Например,необходимо тщательно планировать интерфейсы, потому что опубликованный интерфейс нельзя менять. Если нужно изменить или расширить функциональные возможности интерфейса, то выпускают его новую версию сновым GUID. В новой версии компонента необходимо поддерживать всестарые интерфейсы для обеспечения совместимости.4.4.5. Инструментальная поддержкакомпонентного проектированияПрименение инструментальных средств существенно ускоряет процесспроектирования и разработки компонентного программного обеспечения.CASE-система Rational Rose 2001 ориентирована на разработку СОМ набазе библиотеки активных шаблонов ATL и использование только дуальных интерфейсов.
Ниже приведено альтернативное решение проектирования СОМ-сервера для управления приводом с использованием стандартной нотации Буча [70].Создадим абстрактный класс стандартного интерфейса IUnknown, который не будем генерировать (рис. 142). Объявим знакомые нам методыIUnknown как чистые виртуальные функции (pure function), т. е. не имеющие реализации.228В.Л. Сосонкин, Г.М.
Мартинов. Системы числового программного управления^SetCorortiandPosittonOV5elAc(ualePD3itionO•SetConligParameterO•GetConfigParameterOI,- •selfTCDnve Server,m xDriveConlrol. XDriveConlStopOsetCommandPositionOGetAduaiePosrtionO*SetConfigParameter()elConligPPuc. 142. Проектирование компонента в нотации Буча с помощьюCASE-системы Rational RoseНазначим расположение IUnknown в заголовочном файле предварительной компиляции. Создадим абстрактный класс интерфейсаIDriveControl, унаследованный от IUnknown, в котором методы StartO,StopO, SetCommandPositionO, GetActualPositionO, SetConfigParameterO,GetConfigParameter() и SelfTestQ объявлены как чисто виртуальныефункции.Прототипом сервера служит класс CDriveServer, в котором объявленвложенный класс XDriveControl,реализующий функциональность интерфейса IDriveControl.
Построение интерфейса осуществляется путем переопределения в классе XDriveControl виртуальных функций Start(),StopO, SetCommandPositionO, GetActualPositionO, SetConfigParameterO,GetConfigParameterO и SelfTestO- Сам класс компонента CDriveServer должен быть унаследован от стандартного MFC класса CCmdTarget или егопотомка.Сгенерировав C++ проект с помощью Rational Rose, получим каркас,который остается заполнить функциями компонента, реализующими функциональность СОМ-интерфейса.Глава 4. Технологии разработки программного обеспечения систем управления2294.4.6.
Пример реализации ATL СОМ-сервераРассмотрим задачу верификации рабочего процесса в рабочем пространстве станка с ЧПУ с помощью твердотельного графического моделирования. Графический эмулятор работает совместно с ЧПУ-эмулятором в виртуальном времени, поскольку их скорости несопоставимы.
Это означает,что можно запустить ЧПУ-эмулятор (включая процесс интерполяции) наопределенное время, после чего он приостановит свою работу, пока не получит очередную порцию времени от графического эмулятора. Графические эмуляторы распространяются как коммерческие продукты.
ЧПУ-эмуляторы разрабатываются производителями систем ЧПУ для своих целей.Проблема заключается в организации совместной работы эмуляторов, располагающих собственными интерфейсами. Для ее решения необходим модуль сопряжения на основе компонентного подхода.В силу необходимости конвертировать форматы данных, перемещаемых между двумя приложениями (графическим и ЧПУ), предпочтительней использовать библиотеку шаблонов ATL, способную создавать компактный код.Компонентная модель показана нарис. 143.