Сосонкин_Системы_ЧПУ (1087166), страница 37
Текст из файла (страница 37)
Вариант потоковой модели системы PCNCне зависит от фазы подготовки кадра интерпретатором, работающим в другом потоке. Непрерывность работы интерполятора обеспечивается буферизацией кадров между интерпретатором и интерполятором. Однако привыделении большого количества потоков возрастает время на их переключение. Особенно заметен этот эффект в быстрых процессах, таких как интерполяция.Иногда следует избегать создания потоков. Потоки являются мощныминструментом, который следует применять осознанно.
Нельзя располагатьуправляющие элементы (control-элементы) MMI-интерфейса в отдельныхпотоках, например ListBox (список), сортирующий и отображающий данные системы управления. В этом случае выделение потока породитWindows-проблему синхронизации при обработке сообщений в другихпотоках. Правильным решением здесь будет закрепление за всеми управляющими элементами отдельного потока, занимающегося вычислениямии сортировкой только в фоновом режиме.Мы сталкивались с ситуацией, когда на одном из этапов проекта быливынуждены отказаться от многопоточности.
Разрабатывали прототип MMIна базе многооконного интерфейса (Multiple Document Interface, MDI). Задача состояла в управлении в рамках одного процесса (MDI-приложения)несколькими системами ЧПУ, каждая из которых была закреплена за отдельным документом. Данные систем ЧПУ отображались в отдельных окнах MDIChild, работающих в своем потоке. Статусбар (StatusBar) и тулбар(ToolBar) были контекстно-зависимы, принадлежали родительскому окнуMDIFrame и отображали состояние текущего окна MDIChild. При всякихГлава 4.
Технологии разработки программного обеспечения систем управления207изменениях система ЧПУ уведомляла свое MDIChild окно. При этом обновлялись управляющие control-элементы и перенаправлялись измененияв поток родительского окна MDIFrame. Там в свою очередь обновлялисьтулбар и статусбар.Аналогично выполнялись транзакции в обратном направлении. Команды со стороны тулбара направлялись в поток активного MDIChild окна,которое обновлялось и отправляло по сети команды в систему ЧПУ.Проблемы с вычислительными ресурсами начинались при одновременной работе более чем с тремя системами ЧПУ.
Решение состоит в отказе отмногопоточности и закреплении каждого экземпляра интерфейса оператора за отдельным процессом. В этом случае максимально используется вычислительная мощность компьютера. Переключение между отдельнымиэкземплярами интерфейса оператора осуществлялось так же, как междуприложениями.Синхронизация потоков системы PCNC с помощью объектов ядраWindows NT. Использование многопоточности требует решения таких проблем, как работа с разделяемой памятью, синхронизация потоков, работа сразделяемыми ресурсами (например, портами ввода-вывода). Решениястроятся на использовании стандартных объектов ОС (критические секции, мютексы, таймеры, семафоры, события), большая часть из которыхявляется объектами ядра.Формально потоки делятся на основные и порожденные от основных.Далее рассмотрены проблемы работы с основными потоками, посколькупорожденные могут использовать другие средства ОС для синхронизациипотоков (блокировки потоков с помощью оператора SleepO, таймерыWindows, передачи управления с помощью функции PeekMessageO).Использование критической секции в разделяемой памяти рассмотримна примере интерпретатора и интерполятора.
Интерпретатор интерпретирует кадр и записывает его в формате IPD (Interpolator Data) в кольцевойбуфер. Интерполятор считывает кадр из буфера и интерполирует его. На этапезаписи и считывания кольцевой буфер должен быть заблокирован, чтобыизбежать чтения неполного кадра или перезаписи неполностью прочитанного. Для этой цели создается критическая секция и инициализируется, например, в главном потоке процесса. В обоих потоках защищаемый код обрамлен вызовом функций EnterCriticalSectionO и LeaveCriticalSectionO вначале и конце.
Если передача управления осуществлена в критическойсекции, второй поток не сможет войти в нее и передаст управление первому потоку для выхода из критической секции.Другим объектом синхронизации потоков служит мютекс(гтиех), который позволяет синхронизировать потоки разных процессов. Рассмотримпример синхронизации данных коммуникационной среды между процес-208в л- Сосонкин, Г.М. Мартинов.
Системы числового программного управлениясами реального и машинного времени, передаваемых через разделяемуюпамять. Мютекс-объект создается в коммуникационном потоке процессареального времени с помощью функции CreateMutex(), которая сразу жевозвращает описатель (handler) объекта. \Ут32-поток получает описательмютекс-объекта с помощью функции CreateMutex() или OpenMutex(). Кодв синхронизируемых потоках обрамлен функциями WaitForSingleObject()и ReleaseMutex() в начале и конце.
Таким образом, блокируются попыткизаписи и считывания из разделяемой памяти соответственно коммуникационных потоков реального и машинного времени.Семафор используют для управления ресурсами, например портами ввода-вывода в системе PCNC. Когда запрашивается ресурс, то ОС уменьшает содержимое счетчика ресурсов. Семафор создается с помощью функции CreateSemaphor(), в которой указано количество ресурсов, подлежащих мониторингу. Описатель семафора из другого потока создается спомощью той же функции или функции OpenSemaphor(). Синхронизацияосуществляется в блоке, обрамленном функциями WaitForSingIeObject() иReleaseSemaphor(). В отличие от мютекса, освобождение которого возможнотолько занявшим его потоком, семафор может быть освобожден любымпотоком.Существует и другой объект ядра для синхронизации потоков - событие.
В системах PCNC событие можно использовать, когда код инициализации системы или код выхода из ошибки выводится в отдельном потоке.Инициализирующий поток переводит объект-событие в состояние «занято» и приступает к своим операциям. В этот момент рабочий поток приостанавливает свое исполнение и ждет. По окончании инициализации потокинициализации возвращает объект-событие в состояние «свободно». Рабочий поток активизируется и продолжает свою работу. Использование события-объекта позволяет упростить диспетчеризацию процессов реальноговремени.
Диспетчер построен на базе таймера. По сути, это отдельныйпоток с наивысшим приоритетом. При каждом срабатывании таймера вызывается его call-back функция, в которой реализована схема диспетчеризации. Согласно этой схеме управление потоками осуществляется путемизменения их приоритетов. На этом работа call-back функции таймера завершается. Останов и запуск процессов осуществляет сама ОС.4.3.5. Использование стандартных инструментальныхсредств поддержания открытой архитектурыПо оценкам специалистов, создание продвинутой системы ЧПУ на базеодного компьютера занимает порядка двухсот человеко-лет. Возникаютпроблемы методики создания системы PCNC на стадиях проектирования,отладки и внедрения, поддержки проекта релизами, сопровождения эво-Глава 4.
Технологии разработки программного обеспечения систем управления209люции проекта. Для построения открытой архитектуры объединяют стандартные инструментальные средства.Опыт показал, что интеграция инструментальных средств возможна наоснове технологии Microsoft-OLE-Automation. В качестве базы был использован Visual C++, который входит в состав наиболее мощного пакета средствразработки программного обеспечения под Windows-MSDN (MicrosoftDeveloper Network) [77]. Организации, выпускающие инструментальноепрограммное обеспечение, встраивают свои системы в MSDN, используятакие готовые компоненты пакета разработки, как текстовый редактор, система поддержки проекта Source Safe и т.д.На рис.
127 показан проект системы PCNC в среде Visual C++, где каждый модуль оформлен в виде подпроекта. Подпроекты состоят в некоторой зависимости друг от друга, которая определяет очередность компиляции. Суть в том, что во время компиляции модуль PCNC должен уже иметьте скомпилированные модули, от которых он зависит.Существует и основной проект (Master Project), компиляция которогообеспечивает перекомпиляцию всех остальных модулей. На рис. 128 в качестве примера приведена схема зависимости модулей объектно-ориентированной магистрали (ООС, object oriented channel), которая показана стрел-Рс_пс - Miciosoll Visual О * - [D:\pc_nc\CoraNcsCL\ISODATA.CPP]void CBlkGVector::UpdateData()|ip ComNcsCL classes j £" С CAComDaia" i ; CBIkAxValue" i j CBIkCurLines" С CBfcFeedrale* ! j CBIkGVecta« CBIkGVecloiO ^* SeUPDChannefф SelLineNumS»»^ m_pChannel9i> m_pLineNumF * l j CBIkLineNumbei[± " i ; CBIkSpindleSpeed.'/** begin CHJkGVr.-1-tor U^dateDataJ;?0?b36514 1 .i t ( !it_pChannel) r e t u r n :long nLineNum = 1;if <«i_pLineNvra '• HULL)—JnLineNum = jn_pLineHurt->GetVaiue( ) .CStrmg strGV.m pChannel -> G e t I s o P r o c e s s o r ( ) —> GetCurrent(if (m_strValue '= strGV)m_strValue - strGV.DispatchEvent().t» etid36514void CBlkGVector-.
5et.LineHu*SourcE(CLongData»Tre_pLine!Ium = pDataSource.Puc\ 127. Проект PCNC системы е среде Visualpi210В.Л. Сосонкин, Г.М. Мартинов. Системы числового программного управления1Master ProjectГAppNcsCL IГ'r1ComNcsCL jIFCplNcsCL j WeaNcsCL | DgnNcsCL j1ГCtrlGall | ViewGall 1'1ГBasNcsCL1IndNcsCLГ11NcsStdio 1Рис. 128.
Схема зависимости модулей объектно-ориентированной магистрали, определяющая очередность их компиляцииками. Каждый модуль проекта оформлен в виде динамической библиотеки и имеет свое назначение:• модуль, независимый от конкретной реализации системы PCNC(IndNcsCl);• модуль работы с файловыми потоками (NcsStdio);• галерея управляющих элементов (Ctrl Gall);• галерея элементов визуализации (ViewGall);• базовый модуль (BasNcsCL), в котором осуществляется открытиезакрытие объектно-ориентированной магистрали, а также ее начальная инициализация;• коммуникационный модуль (ComNcsCL) геометрического канала;• модуль языка УП высокого уровня (CplNcsCL);• модуль диагностики программируемого контроллера (DgnNcsCL);• модуль работы с сообщениями (WeaNcsCL);• модуль диагностики следящих приводов по типу осциллографа(OscNcsCL);• модуль прикладного уровня (AppNcsCL), поддерживающий реализацию приложений, взаимодействующих через объектно-ориентированныйканал, и т.д.Visual C++ обладает мощным механизмом настройки средств разработки, утилитами, обслуживающими проект, и механизмами встраивания внешних приложений.