Сосонкин В.Л. 2005 Системы числового программного управления (841803), страница 26
Текст из файла (страница 26)
Конфигурация контроллера для заданного типа станка, в процессе ее инициализации, состоит в создании такого набора связанных объектов, который воспроизводит конфигурацию станка. Например, если в станке имеются два шпинделя, то будут созданы два объектакласса CNcSpindle.При создании объектов осуществляется их взаимное связывание. Науровне языка C++ процесс связывания состоит в инициализации специальных указателей. Например, для привязывания патрона к шпинделю вVm_CurTool: intState: Int*OnProcessTimeSiceO*C hangeTodOT*ClampO1*UnClampOT*CheckB10l»CheckB20T*CheckB30fGetToollDOT^StartToTimerOf*StopToTimei<)CNcRagControlV m _ R e g D a t a : long**Wrie(address : long, value : long): void*Read(address : long): long«mjjRegCtrlCNcSwaflDelSysCNcTimeiClienlT*<<abstract» OnProcessTimeSlceOCNcSpindleLbrcntSvsV m State : boo IV m State : bool'StartO•stopo*OnProcessTimeSliceQV m State: intCNcChuck•startO•stopo*OnProcessTimeSlice()*OnProcessTimeSlice()"startO•StopO*StopAtAngleO^GetStateO*GetRotSpeedO*GetRotDir()*>GetAngleOCNcSlideLbrcntSysV m _ S t a t e : bool'StartO•stopO*OnProcessTimaSltce()CNcSpindleWm_State: int*»m_CurRotDir:boolUm_CuiRotSpeed : intVm_CurAngle : 'batVmJsClipped : bootV m ParentSphde : CNcSpindle*VnTsActCnt : int**m cuiCode : int*CliplntO"UnC «pinto•CIlpExtO*UnClipEMO*OnProcessTimeSlice()*CNcChuck()CNcTalstockSleeveUrn IsClipped: boott»m_ParentSpfidle: CNcSpindle*»»m_SActCnt : intVm_cuiCode: int*OnProcessTimeSlice()•Clip()*UnClip()*C NcTailstockSleeveO"GelSlataOOnProcessTimeSlicef)•StartO•stopo•startAutoO»*Start_Offrimei()**>Start_OnTimerQPuc.
89. Фрагмент диаграммы классов в нотации UML, реализующих исполняемые модули виртуального контроллераГлава 3. Задачи управления149классе CNcChuck инициализируется указатель m_ParentSpindle. Указатели инициализируются в конструкторах классов, т.е.
информация о связяхмежду объектами обновляется только при создании объектов.После создания объектов и при необходимости настройки дополнительных параметров виртуальный контроллер переходит в состояние готовности выполнения команд. Рассмотрим программную реализацию функциональных модулей, входящих в состав виртуального контроллера (рис. 90).Интерполятор вызывает анализатор IPD-кода с частотой 50 Гц, при этоманализатору передается некоторый объем IPD-кода с информацией о командах, которые контроллер должен выполнить. Анализатор описан отдельным классом CNcMParser.Приемником IPD-кода, поступающего со стороны интерполятора по указателю на массив, служит метод ParserMCommand (long len, BYTE*С NcReg Controlm_RegData: long*РегистрWrite(address : long, value : long): voidRead(address : long): longАнализаторIPD хода#m_pRegCtrlCNcMParserCNcTimerClient]ParseMCommand(len long, PCommand BYTE*): long<abstract» OnProcessTimeSliceO : voidCList(from Logical View)InterpolatorСпиоIHCOK групповыхbvTai.ймеров (100,50,), 20 Hz )Ii +m_Sync#m Timers.t«typedef>>CNcTimerListCNcSync\Sync(): voidAddfNewTimer: CNcTimer*): boolDelete(Timer: CNcTimer*): boolМодульсинхронизации<<typedef»CNcTCIientListУ-#m_Clients \CNcTimerm_EventsCnt: intm_FreqDiv : intrrTFreqDivCntr: intСписокС»,исполняемыхмодулейIOnSyncf): voidAdd(NewClient: CNcTimerClient*): boolDelete(Client: CNcTimerClient*): boolOnTimerEventf): voidCNcTimer(FreqDiv : int)Рис.
90. Диаграмма классов, реализующих основные механизмывиртуального контроллера150В.Л. Сосонкин, Г.М. Мартинов. Системы числового программного управленияPCommand). Объем кода указан в параметре «len». Метод ParserMCommand()интерпретирует IPD код, выделяя из него команды и их параметры. Послевыделения очередной команды разыскивается объект, для которого онапредназначается (шпиндель, патрон, пиноль и т.д.), затем активизируетсякоманда с заданными параметрами в соответствующем объекте. Активизация команды не означает мгновенного ее запуска: выполнение командыначнется в ближайшем кванте времени, выделенном объекту, и продолжится во всех последующих квантах вплоть до завершения реализациикоманды.Модуль синхронизации предназначен для генерации в контроллере необходимого набора внутрисистемных частот, используемых для псевдопараллельного выполнения команд с помощью механизма квантов. Модуль синхронизации представлен классом CNcSync и построен на базе списка программных таймеров m Timers.
В класс CNcSync включеныследующие методы:• Sync() вызывается с каждым тактом опорной частоты и в свою очередь периодически вызывает методы OnSync каждого таймера, осуществляющего деление опорной частоты.• Add(CNcTimer *NewTimer), предназначенный для добавления нового таймера в список. Каждый таймер содержит две переменные: времясчета и счетчик времени. Эти переменные инициализируются при создании таймера, и таймер подключается к синхронизатору при помощи метода CNcSync: :Add().Синхросигнал опорной частоты передается с помощью методаCNcSync::Sync() модуля синхронизации (рис. 91). Метод CNcSync::Sync()просматривает список программных таймеров и для каждого элемента списка осуществляет вызов метода OnSync().
В методе CNcTimer::OnSync() увеличивается содержимое счетчика времени. Если значение счетчика време-Таймер опорнойчастотыПрограммныйтаймер 2Программныйтаймер 1CNCTimerClient::OnPfocessTimeSliceQ ^^Клиент^ s ^Клиент«•»««•» _КлиентКлиент_Программныйтаймер N_I КлиентРис. 91. Схема работы модуля синхронизацииЛтл*-•КлиентГлава 3. Задачи управления•J 5 1ни становится равным времени счета, то счетчик времени обнуляется, послечего вызывается метод CNcTimer::OnTimerEvent().Синхросигнал передается всем объектам, входящим в состав контроллера. Для этого в CNcTimer, на этапе инициализации контроллера создаетсясписок всех объектов m_Clients.
Элементами списка служат указатели наобъекты класса CNcTimerClient, порождающего все классы виртуальногоконтроллера. Передача синхросигнала объекту (выделение кванта времени) осуществляется вызовом перегруженного метода OnProcessTimerSiice():из списка m_CIients последовательно извлекаются все указатели на объекты. Каждый извлеченный указатель вызывает метод OnProcessTimeSliceQ,в котором непосредственно отрабатываются команды.Регистр, представляющий собой разделяемую память, поддерживает весьинформационный обмен между аппаратными средствами и некоторымиобъектами виртуального контроллера.
Например, сигналы с датчиков отображаются в ячейках разделяемой памяти. Работа с регистром виртуальногоконтроллера абстрагирована в специальном классе CNcRegControl. Методы CNcRegControl::Read() и CNcRegControl::Write() осуществляют чтениезапись содержимого регистра. Разделяемая память состоит из набора последовательно расположенных байтов, отображающих как текущее состояние физических объектов, подключенных к виртуальному контроллеру, таки вектор управления физическими объектами. Синхронизацию процессовчтения и записи осуществляет семафор.Шлюз CAN-PLC предназначен для отображения информации, передаваемой по CAN-магистрали к регистру.
Шлюз работает с интерфейснымифункциями CAN-контроллера, считывает пакеты и направляет их в CANмагистраль. Если некоторый флаг в регистре отображает состояние конечного переключателя, то шлюз будет принимать пакеты от конечного переключателя, анализировать их и обновлять этот флаг в регистре. Если некоторый байт регистра отвечает за управление устройством, подключеннымк CAN-магистрали, то задачей шлюза будет слежение за изменениями этого байта и передача устройству значения байта.3.3.4. CAN-интерфейсCAN (Controller Area Network) представляет собой последовательнуюасинхронную шину, использующую витую пару в качестве среды передачи.Существуют две версии CAN-интерфейса: в версии A (BasicCAN) для идентификации сообщений выделены 11 битов, при этом система обсуживает до2048 сообщений; в версии В (FullCAN) для идентификации сообщений выделены 29 битов, при этом система обсуживает до 536 млн сообщений.CAN-интерфейс используют в распределенных системах для объединения интеллектуальных датчиков, интеллектуальных приводов и систем152В.П.
Сосонкин, Г.М. Мартинов. Системы числового программного управленияДрайверплатыБуферпередачиБуферприема.1ИнтерфейсплатыШлюзCAN-SoftPLCРегистрЯдро SoftPLC| SoftPLCPC• Плата CAN контроллераIРис. 92. Схема взаимодействия виртуального контроллерас CAN-магистралъюуправления. Технологию CAN поддерживает и развивает некоммерческаямеждународная группа CiA (CAN in Automation) [57]. В нашем случае CANинтерфейс осуществляет передачу данных между разделяемой памятью иустройствами станка. В состав CAN-интерфейса входят контроллер, драйверы, сеть и удаленные устройства ввода-вывода (рис.














