February 20, 2015

Роутеры AMS и роутеры ADS

ADS (Automation Device Specification) – протокол взаимодействия устройств между собой, не зависит от оборудования и не зависит от шины по которой устройства общаются.

AMS (Automation Message Specification) – содержимое и структура сообщений ADS.

Каждое устройство или программный сервис ADS имеет свой уникальный номер или номер порта (AdsPortNr). Часть номеров заранее занята стандартными и системными сервисами.

Общение между ADS-устройствами может происходить поверх любой сети, а в разных сетях – разная адресация и, вообще, все разное. Кто-то должен перебрасывать мостик между «тем и другим»; в TwinCAT этим занимается AMS Message Router (AMS-роутер, ADS-роутер или просто роутер). Для примера, возьмем ситуацию, когда контроллер извне общается через Ethernet, а внутри через EtherCAT.

Каждый контроллер шины имеет собственный ADS-роутер. В данном случае, он будет транслировать IP-адреса и пакеты Ethernet в AmsNetId-адреса и пакеты EtherCAT. Например, на EtherCAT-шине AmsNetId-адрес устройства = 5.2.100.109.1.1, это же устройство на шине Ethernet может иметь адрес = 192.168.1.100.

Часто, для удобства, начальные части адресов делают одинаковыми: 192.168.1.100.1.1 и 192.168.1.100, но совпадать они не обязаны и часто совпадают из-за того, что конфигуратор автоматически сформировал AmsNetId-адрес из IP-адреса: взял IP-адрес и приписал к нему «.1.1».
ADS и AMS - это разные вещи: один – это архитектура устройств, другой – структура сообщений. Соответственно, ADS-роутер занимается передачей пакетов и трансляцией адресов между устройствами и сервисами. Термин AMS-роутер чаще употребляется в значении трансляции адресов.
  • AMS-адреса никак не связаны с IPv6.
  • AmsNetId – это на самом деле адрес AMS-роутера, а не устройства.
  • Устройства (как и сервисы) адресуются по номеру порта: 801, 501, и т. п.



Настройка роутера




Такой диалог появляется, если потыкать курсором в системный лоток и выбрать настройки TwinCAT. Посмотрите, сколько различных транспортов можно выбрать для связи устройств.

Диалог задает Static Route. Записи такого типа существуют вечно. Точнее, до тех пор, пока пользователь ее не удалит. Вечность записи обеспечивает системный реестр операционной системы:
HKEY_LOCAL_MACHINE\SOFTWARE\Beckhoff\TwinCAT\Remote\
Ключи можно удалять и добавлять через редактор реестра: роутер продолжит работать с новой конфигурацией, перезапускать его не требуется. Кстати, Slow Connection задает очень долгое ожидание подключения устройства и никак не влияет на скорость обмена с устройством. Если галку снять, таймаут будет равен двум секундам.

Если заглянуть под капот устройств c Windows CE 5/6/7, то мы увидим похожую картину. Разве что ветка реестра… хм, она будет той же самой.

В TwinCAT System Manager можно обнаружить еще несколько разновидностей роутинга: Temporary, Current и Project:
  • Current – фикция и обман, всего лишь вкладка, отображающая на выбранном устройстве все активные на данный момент записи роутера.
  • Project – запись роутера которая пропишется при активации конфигурации. Ее очень удобно хранить вместе с конфигурацией проекта (например, когда нужно «залить» 1500 контроллеров для «кинематического дождя»).
  • Temporary – я долго искал, где она хранится, пока не обнаружил ее в памяти Windows-службы TwinCAT System Service. Соответственно, эти записи роутера живут до первого перезапуска сервиса или же перезапуска операционной системы (или контроллера).
  • …и конечно же Static – его также можно создать здесь.

Если из системного лотка создаются записи для локальной системы, то с помощью System Manager можно создавать записи роутера для удаленной системы и записи между удаленными системами.

Стоит учесть, что не все устройства содержат полноценные роутеры – некоторые формируют AmsNetId на основе IP-адреса (например, так делали графические панели Вейнтек) или каким-либо другим способом. Тем не менее, перед работой с протоколом ADS нужно каким-либо способом создать записи в роутерах: как с «этой стороны», так и с «той стороны».

February 16, 2015

Многозадачность системы реального времени


Система TwinCAT позволяет создать до четырех подсистем реального времени (Run-Time System). Они будут работать параллельно, если доступно четыре ядра процессора, или как-то делить процессорное время, если ядер меньше.

В каждом рантайме можно организовать параллельную работу четерех задач (Task), т. е. всего получается 16 параллельных задач, которые могут взаимодействовать друг с другом внутри своего рантайма. Фактически задачи работают последовательно, но внутри задачи будет казаться, что все работает параллельно. Как таковые задачи нужны для удобства задания времени цикла программы; это спорно, но похоже на правду.

Визуализация, кстати, автоматически добавляет две задаче: одна - для вывода интерфейса (рисования графики, там время цикла совсем большое), другая - для пользовательского ввода (побыстрее, но медленнее технологического цикла).



  • Переменные, имена программ, ФБ и пр. POU "принадлежат" рантайму, а не задачам (см. у них номер порта отличается от номера порта задач и совпадает с номером порта рантайма).
  • ADS.API библиотеки подключаются к рантайму (опять-таки, см. номер порта), т. к. именно образ рантайма публикуется ADS-сервером.
  • В System Manager'e переменные из разных задач отображаются в первой задаче: просто так сделано.



  • Задачи - это по сути список вызова программ или глобальных экземпляров ФБ (Program Call, см. PLC Control → Resources → Task configuration).
  • Задачи одного рантайма могут иметь разное время циклов. Это влияет на время цикла программы, назначенной задаче. Например, вызов одной и той же программы из разных задач, заставит работать программу со временем цикла вызывающей задачи.
  • При вызове одной и той же программы из разных задач, программа по прежнему существует в единственном экземпляре, с единым набором локальных переменных и состояний.
  • Порядок обработки задач в рамках рантайма задается приоритетом задачи: 0 - первая, ..., 3 - последняя.
  • В рамках одного рантайма программы могут вызывать друг-друга, передавать данные через IN/OUT и глобальные переменные/константы.
  • Если задаче назначено несколько программ, они вызываются в порядке их следования и делят между собой время цикла задачи.
  • Точки останова прерывают все задачи рантайма разом, т. е. действуют на весь рантайм сразу.

February 13, 2015

Основные функции библиотеки TcMC2


Базовые функции движения в NC PTP выполняются с помощью библиотеки TcMC2. Все единицы движения задаются в технических единицах, заданных в конфигурации. Единицы скорости/ускорения/динамики задаются относительно секунд, секунд в квадрате и т. п.
  • MC_Power - включение-выключение силового питания, разрешение движения вперед-назад, коэффициент масштабирования.
  • MC_Reset - сброс ошибок оси.

  • MC_SetPosition - задание текущей позиции, без непосредственного движения.
  • MC_ReadActualPosition - чтение текущей позиции.
  • MC_ReadActualVelocity - считать текущую скорость.

  • MC_MoveVelocity - непрерывное движение с заданной скоростью.
  • MC_MoveAbsolute - движение в заданную абсолютную позицию.
  • MC_MoveRelative - движение в заданную относительную позицию.
  • MC_MoveAdditive - закончить выполнение предыдущей команды, затем, выполнить относительное позиционирование.
  • MC_MoveModulo - модульное позиционирование.
  • MC_MoveContinuousAbsolute - относительное позиционирование с заданной скоростью, а затем непрерывное вращение на заданной скорости.

  • MC_Stop - остановка с блокировкой оси.
  • MC_Halt - приостановка оси до нулевой скорости (без блокировки).

  • MC_GearIn - сцепление мастера и ведомого, электронный редуктор
  • MC_GearOut - отцепление ведомого от мастера.
  • MC_GearInDyn - аналогично MC_GearIn, но позволяет изменять передаточный коэффициент "на ходу", без остановки оси.

  • MC_Jog - функционал ручного, дистанционного пульта управления.
  • MC_Home - поиск исходного положения, поиск нуля, referencing.

  • MC_ExtSetPointGenEnable - включить контурный режим.
  • MC_ExtSetPointGenDisable - выключить контурный режим.
  • MC_ExtSetPointGenFeed - вброс задания для контурного режима.

  • MC_TouchProbe (MC_TouchProbe_V2_00) - высокоточное определение позиции (независимо от времени цикла).
  • MC_AbortTrigger (MC_AbortTrigger_V2_00) - остановка высокоточного определения позиции.

February 12, 2015

Совместимость TwinCAT и будущей Windows 10

Тестирование на совместимость проводилось под виртуальной машиной. В эксперименте принимали участие предварительные версии (Technical Preview) Windows 10:
  • Windows10_TechnicalPreview_x32_RU-RU_9926
  • Windows10_TechnicalPreview_x64_RU-RU_9926
  • TwinCAT 2 (2110-2245)
  • TwinCAT 3 (3.1.4016.11)

Результаты: TwinCAT ведет себя аналогично поведению в Windows XP, 7, 8, 8.1.

Для установки TwinCAT 2 под x32 версию Windows 10 нужно выставить совместимость инсталлятора с Windows 7. В остальном, инженерные версии работают нормально (включая Motion Control). По естественным причинам не удалось запустить TwinCAT 3 контроллер под x64 Windows 10, т. к. виртуализация внутри виртуализации.
Обновление от 05.05.2016: В последнем билде 3.1.4020.0 все прекрасно работает.

February 11, 2015

Цифровое управление движением

NC = Numerical Control - управление осуществляется единообразно, независимо от типа привода (синхронный, асинхронный, линейный, шаговый, пр.).

NC PTP = Point-To-Point - движение точка-точка:

  • Движения непрерывные, позиционные, смешанные. Как правило, без интерполяции.
  • Электронный редуктор.
  • Контурный режим совместимый с остальными режимами.
  • Компенсации движения.
  • Линейный, автоматический переход от одного задания к другому (blending).
  • Кулачковые программы (с таблицами позиций и интерполяциями).
  • Диагональные пилы и ножи.

NC I = Interpolation - движения с интерполяциями, по программе в G-кодах:
  • До трех взаимно-интерполируемых осей.
  • Пять инструментальных осей.
  • G-кода, "как в ЧПУ".
  • Группы осей.
  • Одновременное взаимодействие с функциями NC PTP.
  • Расширяемая, настраиваемая визуализация для Windows Emb XP/7.

NC CNC = Сomputer Numerical Control (ЧПУ) - полноценная система ЧПУ.