January 31, 2017

Вебинар. Технологии измерений на базе аналоговых модулей

24 января этого года, Мартин Подрушек (Martin Podrouschek) рассказал про аналоговые модули Бекхофф, а затем обещал в следующем вебинаре рассказать про то, как их конфигурировать и наблюдать на цифровом осциллографе в их естественной среде обитания.

Когда-то давно была подборка физических интерфейсов и модулей расширения, а сейчас мы узнаем некие подробности об аналоговых модулях (как входных, так и выходных). Также можно ознакомиться с флаером Extremely accurate, fast and robust: High-end measurement technology from Beckhoff, где есть более-менее подробное изложение вебинара (правда, на английском языке).


Программная часть


Программная часть, отвечающая за обработку и настройку аналоговых модулей, условно делится на несколько частей:
  • Scope View|Server — цифровой осциллограф клиент/сервер, бесплатный в базовой поставке.
  • Bode Plot — ЛАФЧХ, диаграммы Боде.
  • Analytics — более комплексный анализ данных в совокупности и за большой промежуток времени, со сбором данных в "облаке" и т. п.
  • Configuration — настройка модулей.
  • Filter Designer — настройка цифровых фильтров Баттерворта, Чебышева, НЧ, ВЧ, и т. п. Можно настраивать параметры и рисовать кривые фильтров, затем загружать их в модули.

Ниже и ближе к железу, лежит слой обеспечения реального времени, про который мы должны помнить, что он работает с заданной цикличностью и ни микросекундой больше или меньше. Это важно помнить и знать, особенно, относительно измерительной аналоговой техники, где придется много раз делать преобразования из аналога в цифру и обратно.
Аналоговые величины существуют как бы в двух измерениях — это дискретизация по времени (TwinCAT обеспечивает синхронизацию между устройствами с точностью до ±100нс) и значение измеряемой величины. Важно помнить об этом, так как точность измерения определяется по двум координатам.
Еще ниже (но не всегда) есть дополнительные библиотеки-драйверы, которые обеспечивают работоспособность специализированных модулей. Например, библиотеки Energy Library для модулей измерения параметров электроэнергии (Energy Measurement) — модули серии EL3xxx, KL3xxx или библиотека CM library контроля состояния (Condition Monitoring) — IEPE акселерометры и другие датчики.


Пошаговый выбор модулей


Сейчас в каталоге доступно порядка 100 модулей. Чтобы не потеряться среди них, предлагается пошаговый подход к выбору.

После определения какой функционал требуется от модуля, можно выбрать тип защиты корпуса:
  • IP20 — для установки в шкафах автоматизации. Серии BK, BC, EL, KL, EM, KM, ES, JS, IPC|CX|CP.
  • IP67 — для установки под открытым небом, дождем и снегом. Серии: EP, EPP, EQ, ER, IP.

Дальше интересней, так как Beckhoff по сути не настаивает на обязательном использовании EtherCAT для подключения модулей, а предлагает на выбор различные полевые шины: Profibus, Profinet, Sercos II, много еще чего, ну и EtherCAT конечно же. Для всего этого зоопарка шин существуют соответствующие коплеры (coupler), объединяющие модули в удаленные или локальные группы.

Дальше необходимо определиться с аккуратностью или погрешностью измерения (±%) и пропускной способностью (100Гц..100кГц).

Также важным параметром являются тайминги и частота дискретизации:
  • XFC — модули умеют делать оверсамплинг, что повышает точность, за счет интерполяции дополнительных отсчетов между тиками системы реального времени. Только для шины EtherCAT.
  • DC — поддержка синхронизации распределенных часов.
  • Timestamp — фиксируется ли отпечаток времени события (важно, так как измерение может произойти в произвольный момент длительности цикла).

Также, при необходимости, можно посмотреть на:
  • фильтры входных сигналов;
  • выбор в пользу многофункциональных модулей, умеющих измерять разные величины. В настройках можно выбрать, что именно модуль будет измерять: напряжение, ток, мощность, и т. п.;
  • требуемые сертификаты на калибровку, допуски и другую технику безопасности и бюрократию.


Быстродействие и точность


Не стоит считать высокоточными — модули с высокой разрядностью оцифровки величины (hi resolution). 16 или 24 бит вовсе не означает, что эти модули точнее. Просто не имеет смысл проводить точные измерения, а затем терять эту точность из-за малой разрядности оцифровки. Выбирая модули, учитывайте обе величины — и разрядность, и погрешность измерения.

Во втором квартале 2017 года должна выйти новая серия модулей ELM в железном корпусе и для сверхточных измерений:
  • 24 разряда;
  • до 50 000 отсчетов в секунду;
  • синхронизация с точностью до ±100нс;
  • интегрированная диагностика подключений и работы функционала.

Серия модулей для шины K-bus пока еще существует — это модули KL3xxx. Следует учитывать, что из-за ограничений шины K-bus, эти модули не могут обеспечить высокое быстродействие.

January 26, 2017

Задание положения на лету

Можно ли сбросить значение текущего положения оси "на лету", во время ее движения? Не вбросить новое задание на выполнение (это совершенно другая задача "контурного режима"), а просто сказать, что в данный момент, вот это место — это позиция 3 200 851 или 0, или -600, или любое другое число.

Можно, хотя всё говорит об обратном. System Manager и XAE отказываются, сообщая: "Axis function is not allowed in motion!", — это означает, что функция недоступна во время движения.



Справочная система говорит, что для задания позиции "на лету" предназначен относительный режим (Relative), но ничего не говорит об абсолютном (Absolute) режиме. А ведь, на самом деле, всё работает, правда при условии, что вы делаете это из ПЛК-задачи и с помощью функционального блока MC_SetPosition.
Если есть вероятность что ваша программа будет работать на более ранних версиях TwinCAT, то лучше довериться System Manager и считать, что нельзя задавать позицию "на лету". Для большей уверенности стоит проверить, так как я проверял только на версиях 2.11.2254 и 3.1.4020.

Итак, сбросить позицию "на лету" в произвольное значение во время движения — можно. Рассогласование при этом не возникнет (хотя справочная неуверенно заявляет о возможности обратного). Что еще нужно знать о функции MC_SetPosition?

Существует два режима, передаваемые через параметр Mode. Абсолютный режим (Mode = FALSE) просто задает новое текущее значение позиции. Относительный же (Mode = TRUE) — задает смещение от текущего значения позиции. Например, если в относительном режиме задать отрицательное число — позиция уменьшится на заданное число, если положительное — увеличится.

В будущих версиях библиотеки (относительно версии 3.02.52 от 19.10.15) существует вероятность замены имени параметра Mode на Relative. Пока же это название остается прежним из соображения совместимости.

Когда-то давно, теперь уже в далеком 2005 году, функция MC_SetPosition называлась MC_SetActualPositionOnTheFly и ответ был сразу же понятен из ее названия.

January 24, 2017

Питание энкодерной оси

Нужно ли активировать питание энкодерной оси (Encoder Axis) с помощью функционального блока MC_Power?


Нет, не нужно. Достаточно просто регулярно читать статус переменной, связанной с осью движения. Следующего достаточно:

PROGRAM MAIN
VAR
    EncoderAxis : AXIS_REF;
END_VAR

(* Обновляем информацию об оси движения *)
EncoderAxis.ReadStatus;

(* Работаем с текущей позицией *)
IF EncoderAxis.NcToPlc.ActPos > 0 THEN
[...]
Стоит учитывать, что без вызова метода ReadStatus, автоматически обновляются только статусные поля структуры NcToPlc (поля, отвечающие за состояние оси). Поля, содержащие позицию, скорость и другое, обновляться без вызова ReadStatus не будут. Это также относится и к обычным (Continuous Axis) приводным осям.
Делаем предварительный вывод ― энкодерная ось отличается от обычной приводной (Continuous Axis) только тем, что преобразует параметры движения в цифру, но не осуществляет управление. Следовательно, силовое питание энкодерной оси не требуется.

― Хорошо, а что будет если все-таки задействовать MC_Power? Сможет ли он запретить вращение в обратную сторону или что-нибудь подобное?
― Нет, не сможет. Энкодерная ось всегда находится в неподвижном состоянии. Поля State.HasBeenStopped и .StandStill всегда равны TRUEState.MotionState также всегда равно MC_AXISSTATE_STANDSTILL. Теперь мы знаем, что MC_Power активирует и контролирует только управление движением (то есть выход), но никак не влияет на входные данные.

Что еще полезного в структуре State?

Поля .Moving / .NotMoving ― показывают, движется ли ось. Причем, ожидаемо, каламбур: .NotMoving = NOT .Moving. Направление движения помогают определить поля .NegativeDirection и .PositiveDirection.

Не ждите полезной информации от полей Error. Лучше следите за Status.IoDataInvalid. Это поле показывает валидность данных. Поле становится равным TRUE, когда данные неверны, что можно интерпретировать как ошибку энкодерной оси.

January 13, 2017

System Manager и четыре рантайма

При попытке создать несколько рантаймов и добавить несколько ПЛК-проектов, System Manager начинает капризничать, брыкаться, а в конце выдает ошибку: Runtime system is used by another project!



... и это не баг и не фича — это нюанс, который придется обойти.

Проект строится с помощью двух системных программ: System Manager — конфигуратор ПЛК и PLC Control в котором непосредственно разрабатывается программа контроллера. В какой-то момент разработки необходимо пробросить между ними мостик и познакомить их, передавать настройки из одной в другую и обратно. Для этого служат файлы с расширением .tpy, которые делает PLC Control при сборке (Project → Build) или пересборке (Project → Rebuild all) проекта.
Кроме файлов TPY, также существуют файлы TPA. Их создает System Manager, когда вы добавляете в конфигурацию новый проект или пересканируете уже существующие приекты (Rescan Project...). В эти TPA-файлы System Manager сохраняет конфигурацию переменных ввода/вывода (%I*, %Q*), заменяя звездочки (*) на реальные адреса.

При последующей пересборке проекта, PLC Control увидит файл TPA, созданный ранее System Manager'ом, и добавит в ПЛК-проект конфигурацию переменных, которую впоследствии можно увидеть в Resources → Global Variables → TwinCAT_Configuration.
В файле TPY находится полная информация о проекте, в том числе информация о рантайме, в котором планируется исполнять ПЛК-программу. К сожалению, невозможно выбрать нужный рантайм вручную, если вы разрабатываете проект без контроллера на столе и рядом с вами. По умолчанию система автоматически подставляет в проект первый рантайм, а затем сама же на это ругается, когда вы пытаетесь добавить второй, третий или четвертый проект в System Manager: ведь первый рантайм уже занят и нужно выбрать другой?

Чтобы покинуть тупиковую ситуацию, придется вручную отредактировать файл TPY, а конкретнее поле <Port> настроек роутинга <RoutingInfo> проекта <PlcProjectInfo>. Откройте в любом текстовом редакторе файл с расширением .tpy:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!--This file is created by the TCatPlcCtrl automatically. Manually changes will be overwritten!-->
<PlcProjectInfo xmlns:p="http://www.beckhoff.com/2002/01/TcPlcProjectDesc">
    <ProjectInfo>
[...]
    </ProjectInfo>
    <RoutingInfo>
        <AdsInfo>
            <NetId>0.0.0.0.0.0</NetId>
            <Port>801</Port>
            <TargetName>
                <![CDATA[Target: Local (192.168.56.1.1.1), Run Time: 1]]>
            </TargetName>
        </AdsInfo>
    </RoutingInfo>

Номера портов жестко фиксированы: 1 — 801; 2 — 811; 3 — 821; 4 — 831. Достаточно заменить номер порта на соответствующий необходимому рантайму, а все остальные упоминания о рантайме можно оставить без изменений: на них система не обращает никакого внимание. Сохраните файл и без проблем добавьте его в конфигурацию System Manager'а.