Showing posts with label Tc2_MC2. Show all posts
Showing posts with label Tc2_MC2. Show all posts

July 1, 2020

Параметры NC осей

Параметры приводных проектов специально разнесены по нескольким местам. Во первых, они разбиты по слоям или, иначе говоря, по месту применения: железо (сервоусилитель) + NC + софт (PLC). Во вторых, так безопаснее: железо имеет свои железные настройки, а все остальное и мягкое — располагает своими собственными "крутилками" и "показометрами".

Изображение: Beckhoff Automation

Тем не менее из ПЛК-проекта можно программно изменить любые настройки любого слоя. Это не всегда очевидно, но добраться все-таки можно.


Железо


Я буду упрощать. Традиционно сервоусилитель разбит на три контура: контур тока, контур скорости и контур положения. Первый контур опирается на физические характеристики мотора и сервоусилителя. Второй и третий — это контуры, построенные вокруг тех или иных регуляторов скорости, положения, момента и тому подобное. Регуляторы типа ПИД, его модификации и возможно что-то экспериментальное. Что и как они регулируют и чем управляют, попробуйте догадаться по их названиям. После их настройки сервоусилитель готов принимать команды и крутить мотор в нужном направлении.


Унификация и абстракция


Моторы и сервоусилители бывают разные. А бывают не только моторы, но и просто исполнительные механизмы к которым прилеплена обратная связь. И такую штуку тоже желательно причесать под одну гребенку. В общем нам нужно абстрагироваться от конкретики исполнительного механизма. Поэтому дальше идет слой NC-сервиса. Он абстрагирует исполнительную систему так, что программе технологического процесса не нужно ничего знать о конкретике физических процессов в исполнительной системе. У NC есть свой набор настроек.

Кроме собственныъ настроек у NC-системы есть свой собственный контур управления, который может... делайте выводы сами:



Технологический процесс


Процессом управляет программа. Управление она делает с помощью исполнительных механизмов. Получается, что программа дергает за ручки и кнопки слоя абстракции NC. У программы есть какие-то свои пожелания, которые она передает в слой NC.
 
Приводную часть настраивает "приводник" - специалист своего дела, а программы пишет "программист" - он тоже специалист, но уже своего дела. Хорошо когда это один человек: сам настроил, сам запрограммировал. Тем не менее, после тонкой настройки железа, эти настройки лучше оставить в покое и больше не трогать. Правда бывает, что нужно и что-то подкрутить программно.


Крутим параметры


Предположим, изменился коэффициент масштабирования энкодера инкрементов-на-миллиметр. В лексиконе приводника - это Nc feed constant. На самом деле это настройка не слоя железа, а настройка слоя NC. Такое смешение сделано для удобства: приводник настраивает все низко-уровневые и средне-уровневые параметры движения и железа в одном месте. Программист же может управляет параметрами движения типа скорость-ускорение и подрегулировать динамику через NC. Опять-таки удобно.

На картинке как раз кусок железа Drive Manager'a, где смешались в кучу слои:


Привод можно донастраивать через SoE, CoE и пр. В параметры NC можно залезть через функциональные блоки типа MC_WriteParameter, предоставляемой библиотекой Tc2_MC2. Эти настройки не навсегда — при следущей загрузке параметры откатятся до значений заданных в конфигурации. Так сделано для безопасности.

Список всех доступных настроек содержится в перечисляемом типе MC_AxisParameter. Его интересно полистать пару минут, вчитываясь в комментарии типа: (* new since 1/2012 *) или ...- available in Tc3 *) — история как она есть.

Чтобы как-то повлиять на значение параметров в конфигурации, можно при каждом старте ПЛК-программы задавать новые коэффициенты. Так и приходилось делать в TwinCAT 2. Теперь уже не обязательно — в TwinCAT 3 появились функции типа MC_WriteParameterPersistent. Через них достаточно задать параметр один раз и его значение легко переживет перезапуск ПЛК. При активации новой конфигурации, эти значения будут заменены на значения из новой конфигурации.

Небольшой пример как пользоваться, но там и так все понятно:

October 24, 2019

Ручной тормоз AM8000

У моторов AM8000 есть опция в виде тормоза. Наличие тормоза указывает единичка в заказном номере мотора AM8000-xxx1-... (и ноль когда тормоз отсутствует). Тормоз управляется отдельной цепью 24 В и срабатывает (накладывается) автоматически при отключении модуляции: тупо прижимается пружиной. И наоборот, при работе оттягивается электромагнитом, освобождая вал двигателя. Намертво тормоз вал не вклинит, но аварийно затормозит (это чтоб не порвало всё к ... и не намотало железо на вал).

В новой прошивке сервоусилителей версии 2.10 появилась возможность подключить внешний тормоз к двигателю без тормоза. Включается через параметр P-0-0060 = 2 (External motor brake: currentless locked).

Редко-редко, а иногда и когда-как, тормоз нужно отключить почти вручную, то есть программно. Управление производится через параметр P-0-0060. Подробнее можно прочитать в Configuration and control of the motor brake, но я туда не полезу, а воспользуюсь удобным функциональным блоком FB_SoEAX5000SetMotorCtrlWord.
Внимание! Не стойте, и не прыгайте, не пойте, не пляшите там, где идет строительство, или подвешен груз. Ручная работа с тормозом чревата отрыванием конечностей и зажевыванием туловища механическими руками. Повязывайте банданы, носите бронекепки и соблюдайте ТБ.
Для работы с ФБ необходимы библиотеки Tc2_MC2 и Tc2_MC2_Drive. В остальном все просто, кроме тристабильного состояния тормоза: вручную наложен, вручную разблокирован и автомат (как повезет):

PROGRAM MAIN
VAR
    {attribute 'TcNcAxis' := 'Axis 1'}
    axis1: AXIS_REF;
    
    EN, SET, LOCK, UNLOCK: BOOL;
    
    mcSetMotorCtrlWord: FB_SoEAX5000SetMotorCtrlWord;
    mcPower: MC_Power;
END_VAR

mcSetMotorCtrlWord(
    Axis := axis1,
    Execute := SET,
    ForceLock := LOCK,
    ForceUnlock := UNLOCK
);

SET R= NOT mcSetMotorCtrlWord.Busy;

mcPower(
    Axis := axis1, 
    Enable := EN, 
    Enable_Positive := TRUE, 
    Enable_Negative := TRUE
);

Для работы с тремя состояними выделено два управляющих бита: ForceLock и ForceUnlock. Сочетанием этих флагов устанавливается текущее состояние тормоза. Вброс значений производится по переднему фронту входа Execute. Я свел все возможные значения в табличку:


Например, возврат тормоза в автоматический режим осуществляется одновременным сбросом флагов ForceLock|Unlock в FALSE и последующей установкой Execute в TRUE. После этого состояние тормоза будет определяться или наличием модуляции, или на уровне NC состоянием флага разрешения Enable в MC_Power, что, впрочем, одно и то же.

Если сервопривод обесточить, то при следующем включении режим тормоза автоматически возвращается к автоматическому. Это поведение по умолчанию. Поэтому еще точнее — его режим после включения определяется значением параметра P-0-0060 в стартап листе. В параметр P-0-0072 транслируются параметры тормоза из мотор-пула двигателей. Значение параметра P-72 можно перезаписать и заменить на другие, но свойства тормоза от этого не изменятся: параметры нужны только для автоматических расчетов внутри программы.