Наш магазин на eBay Наш магазин на AliExpress Наш канал в telegram

HART-протокол. Теория.

Введение и немного истории

HART (Highway Addressable Remote Transducer) — открытый промышленный протокол цифровой связи. Протокол был разработан в далёком 1980-м году фирмой Rosemount, в 1986-м стал открытым стандартом. Строго говоря, это не только протокол, но и интерфейс, поскольку описывает 3 уровня сетевой модели OSI, включая в себя как алгоритмы и логику передачи данных (уровень приложения и канальный уровень), так и параметры электрических сигналов и линий связи (физический уровень).

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

Причина этой популярности довольна проста, — один из вариантов подключения подразумевает не чисто цифровую связь, а наложение цифрового сигнала поверх стандартного токового сигнала 4-20 мА. В итоге, мы по-прежнему можем передавать важные параметры простым и надёжным как лом токовым сигналом и в тоже время с помощью HART-протокола можно по этим же проводам передавать дополнительные, менее важные для безаварийного управления, параметры или даже перепрограммировать «на лету» полевое устройство. Есть ещё вариант с подключением на одну шину несколько устройств HART, однако он намного менее популярен, поскольку в этом случае мы теряем возможность использовать для передачи данных токовый сигнал, а для чисто цифровой связи обычно используются более современные протоколы.

Как это сейчас повсеместно принято, развитием стандарта занимается «некоммерческий» фонд, поэтому скачать открытый стандарт с сайта довольно непросто, можно только читать. Меня терзают смутные сомнения, что это сделано специально чтобы люди платили «некоммерческому» фонду очень немаленькие деньги за бумажный вариант, но… Как говорится, спасибо и на этом, у многих «открытых» стандартов даже такой опции нет, а тут хотя бы так. Кому сильно нужно, тот найдёт способ скачать 🙂 Вот ссылка.

Если окунуться в историю, то можно увидеть, что сначала HART развивался довольно бурно, — с 1986-го по 1989-й каждый год выходила новая спецификация протокола, однако потом был довольно длительный перерыв, спецификация 6.0 вышла аж в 2001 году, 7.0 — в 2007-м, 7.5 — в 2012-м а действующая на сегодняшний момент спецификация 7.8 — в 2022-м. Ну то есть, сначала было бурное развитие, потом долгий перерыв и потом в нулевых — десятых годах снова пошло бурное развитие. На самом деле этот новый всплеск развития был связан по большей части не с улучшением старых технологий, а с добавлением новых: были добавлены новые способы модуляции, новые среды передачи данных, новые скорости… Однако, подавляющее большинство промышленных приборов использует всё ту же старую добрую спецификацию версии 5.0. За 20 лет в отрасли я видел очень много различных приборов, и только один с хартом 7-й версии (как раз в этом году и то это был наш, отечественный прибор). Я тоже буду в этой статье рассматривать только спецификацию 5.0, поскольку рассматривать остальные пока особого смысла нет.

Уровень физики протокола HART

В пятой версии протокола был только один способ передачи данных — с помощью FSK-модуляции, аналоговым сигналом по медным проводам. Последний вариант физики с такой модуляцией подробно описан в документе 2016-го года «FSK Physical Layer Specification». В этой доке подробно описаны уровни сигналов и шумов, время нарастания, спада, фильтры, степени усиления и ослабления, частоты среза, в общем, все подробности, поэтому за наиболее полным описанием идём туда, а ниже я опишу всё тоже самое, но в общих чертах, зато с реальными осциллограммами.

Итак, физика передачи данных устроена следующим образом: для передачи нулей и единиц в цепи генерируются периодические колебания тока с частотами 1200 и 2200 Гц, которые накладываются прямо на аналоговый токовый сигнал (картинка ниже).

Наложение цифрового сигнала на аналоговый

наложение цифрового сигнала HART на аналоговый

[свернуть]

Hart-устройства бывают главные и подчинёные, и если подчинённые устройства управляют непосредственно током в цепи, то главные устройства подключаются в цепь через нагрузочное сопротивление (резистор), которое выполняет роль преобразователя тока в напряжение и обратно (картинка ниже).

Подключение главных и подчинённых устройств

подключение главных и подчинённых устройств к шине

[свернуть]

В пятой версии протокола подчинённых устройств может быть до 15 штук, а главных — максимум 2 (Primary Master и Secondary Master). Как я уже говорил, — в случае использования нескольких подчинённых HART-устройств на одной шине, аналоговый сигнал использовать для передачи информации не получится (мы просто не смогли бы разделить аналоговые сигналы от разных устройств). При задании подчинённому устройству любого адреса, отличного от нулевого, устройство автоматически переключается в так называемый режим моноканала, при этом ток в цепи устанавливается на уровне 4 мА и перестаёт зависеть от измеряемой величины. Другими словами, когда на одной шине есть несколько HART-устройств, — нам доступна только цифровая связь.

Во многих статьях в интернете написано, что единичный бит передаётся одним периодом на частоте 1200 Гц, а нулевой бит — двумя периодами на частоте 2200 Гц и в теории это должно обеспечить нулевой итоговый вклад обоих сигналов в первичный сигнал (на который они наложены). На самом деле это пизд…ж не соответствует стандарту (хотя мне даже в институте так рассказывали) и сейчас объясню почему.

Не нужно быть крутым математиком, чтобы заметить, что частота 2200 Гц не кратна частоте 1200 Гц. Что это означает? Ну, например, это означает, что если бы нули и единицы передавались точно как написано выше, то длина передачи зависела бы от количества нулей и единиц, что было бы вообще неудобно. На практике (как и в стандарте), естественно, ничего такого и нет, все биты имеют одинаковую длительность, равную длительности единичного бита, и посылки одного размера передаются за одно и то же время. Осциллограммы реальных харт-сигналов приведены на рисунке ниже (все они сняты осциллографом в ходе одного и того же эксперимента прямо с резистора, с шины, на которой присутствуют 3 слэйв-устройства и один мастер).

Осциллограммы реальных харт сигналов

осциллограмма реальных харт-сигналов 1
осциллограмма реальных харт-сигналов 2
осциллограмма реальных харт-сигналов 3

[свернуть]

Например, по рисунку 2 отлично видно, что передача двух нулевых битов длится вовсе не четыре периода по 2200 Гц. Более того, по рисунку 3 видно, что сигналы даже не всегда гармонические. Собственно говоря, по стандарту сигналы и не обязаны быть чисто гармоническими, там написано, дословно: «предпочтительна трапециевидная или чисто синусодидальная форма сигналов», в реальности бывает и трапеция, и треугольник, и прямоугольник…

Что нам тут важно? Важно, что все переходы между частотами — гладкие, без резких фазовых переходов, то есть перед нами не просто FSK-модуляция, а CPFSK — частотная модуляция с непрерывной фазой), хотя и не совсем понятно, как при усреднении получается ноль, при том, что в нулевом бите не целое число периодов.

В целом, на низком уровне передача выглядит так:

  • сначала включается передатчик, при этом на шине появляется несущая частота (1200 Гц)
  • затем начинают передаваться байты данных, при этом нулевые биты передаются частотой 2200 Гц, единичные — частотой 1200 Гц
  • после передачи всех данных, на шине некоторое время (до выключения передатчика) продолжает висеть несущая частота

В спеках пишут, что раз передача асинхронная, то между байтами могут быть разрывы (но не более 1 бита) и в это время на шине должен висеть высокий уровень сигнала (то есть должна просто висеть несущая). На практике, я такого ни разу не видел, всегда после передачи стоп-бита сразу начинает передаваться стартовый бит следующего байта. Единственные моменты, когда на шине просто висит несущая — это сразу после включения передатчика (до начала передачи данных) и сразу после передачи всего пакета (до отключения передатчика). Тем не менее, раз написано, значит алгоритмы приёма должны это учитывать.

В протоколе есть специальный сигнал, который управляет передачей — RTS (request to send), точно как в UART. Соответственно, в подключенных через UART HART-модемах для управления передачей как раз и используется сигнал RTS от UART. К слову сказать, для питания таких HART-модемов обычно используется сигнал DTR. Кроме того, есть ещё один сигнал управления — это сигнал CD (carrier detect), — этот сигнал формируется приёмником при обнаружении несущей частоты.

Ниже приведены таблички с разными параметрами физики:

Уровни сигналов
Сигнал от главного устройства (на резисторе 500 Ом), mVpp 400-600
Сигнал от подчинённого устройства, мА размах 0,8-1,2 мА
Минимальный уровень сигнала, при котором гарантированно должна определяться несущая, mVpp 120
Максимальный уровень сигнала, при котором гарантированно не должна определяться несущая, mVpp 80
Нагрузочное сопротивление, Ом 230-1100
Параметры передатчика
Максимальный рассинхрон по фазе при переключениях 1<->0, градусов 20
Carrier Start Time — максимальное время от подачи на передатчик сигнала RTS до момента, когда выходной сигнал передатчика вырастет до уровня выше 120 mVpp, бит 5
Carrier Stop Time — максимальное время от выключения сигнала RTS до момента, когда выходной сигнал передатчика упадёт до уровня ниже 80 mV, бит 3
Carrier Decay Time — максимальное время от выключения сигнала RTS до момента, когда выходной сигнал передатчика упадёт до уровня, сравнимого с уровнем помех, бит 6
Максимальное время от включения сигнала RTS до начала передачи первого бита (то есть до первого нулевого бита, поскольку стартовый бит всегда 0), бит 5
Максимальное время от передачи последнего бита до выключения несущей, бит 11

Каждый байт пакета предаётся с помощью фрейма из 11 бит: стартовый бит (всегда 0), 8 бит данных (от младшего бита к старшему), бит чётности (используется дополнение до нечётного) и один стоповый бит (всегда 1).

Формат байта в пакете HART

формат байта в пакете HART

[свернуть]

Канальный уровень протокола HART

Ну, немного мы про канальный уже поговорили, например, про то, что есть главные устройства (Master) и подчинённые (Slave). Cоответственно, обмен данными происходит в формате запрос-ответ. Главное устройство посылает запрос (команда + данные), подчинённое устройство на этот запрос присылает ответ (данные), — всё просто. Запросы от мастера в HART-протоколе принято обозначать как STX, а ответы слэйва — как ACK.

Есть одно исключение — так называемый пакетный режим (Burst-mode), который поддерживают все устройства, начиная с 5-й версии протокола. В этом режиме подчинённое устройство самостоятельно, без участия мастера, с определённой периодичностью посылает в шину пакеты с данными. Такие пакеты принято обозначать как BACK (Burst ACK) и на самом деле они не являются ответами, поскольку формируются без наличия запросов от мастера, хотя в них и указывается какому именно мастеру они предназначены. В этом режиме слэйв делает паузы между передачами, ожидая команды от мастера (для возможности выхода из пакетного режима).

Сами пакеты данных HART оформлены в PDU-фреймы (process data unit), которые я в дальнейшем буду стараться называть просто пакетами, чтобы не путать с фреймами в которых передаются байты (но иногда могу забыть). Каждый пакет начинается с так называемой преамбулы (три и более байт 0xFF), которая позволяет произвести синхронизацию приёмника перед началом приёма полезных данных.

Формат пакета HART

формат пакета HART

[свернуть]

Обсудим каждое из полей пакета в отдельности:

  1. Стартовый символ или разделитель (delimiter). Он содержит информацию о формате адреса, физике и направлении передачи данных (тип пакета).
    Формат разделителя пакета HART

    формат стартового символа пакета HART

    [свернуть]
  2. Адрес. Размер и формат поля адреса определяются старшим битом стартового символа. Тут возможны два варианта: 1) обычный адрес опроса (polling address), размером 1 байт; 2) уникальный адрес (unique address). Пакеты с однобайтным адресом называются короткими фреймами (или короткими пакетами), а пакеты с пятибайтным адресом — длинными фреймами (длинными пакетами). Для коротких фреймов поле адреса имеет размер 1 байт, а для длинных — 5 байт. При этом, для обоих вариантов пакетов старший бит первого (или единственного) байта определяет адрес главного устройства (0 — Secondary Master, 1 — Primary Master), а второй по старшинству бит первого (или единственного) байта определяет пакетный режим (0 — выключен, то есть фрейм отправлен не в рамках пакетного режима), 1 — включен, то есть фрейм отправлен в рамках пакетного режима). Если фрейм короткий, то младшие 4 бита единственного байта адреса определяют адрес подчинённого устройства (0..15). Если фрейм длинный, то первые два байта адреса (кроме двух старших битов) обозначают код производителя, а также тип или модель устройства, а следующие три байта представляют собой идентификатор устройства (Device ID).
    Формат полей адреса для короткого и длинного пакетов HART

    формат полей адреса для короткого и длинного фреймов HART

    [свернуть]

    Обычно в начале обмена мастер опрашивает слэйвы командой 0 в формате короткого фрейма. Эту команду понимают все устройства HART версий 5-7. В ответ на команду 0 слэйв присылает код производителя и типа устройства, требуемое количество преамбул, номера ревизий команд, ПО и аппаратной части, а также идентификатор устройства. Далее из полученной информации мастер формирует адрес для связи в формате длинного фрейма и переходит на обмен данными в формате длинных фреймов.

    Длинный пакет, у которого во всех битах адреса установлены нули, называется широковещательным сообщением. Такие сообщения должны уметь распознавать все HART-устройства. В поле данных пакета при этом присылается тэг устройства, которое должно ответить (все остальные — молчат).

  3. Команда. В 5-й версии HART команды занимают 1 байт (0..253, 254 команда зарезервирована, 255 — не используется).
    Команды бывают трёх видов:

    • Универсальные (0..31) — их поддерживают все HART-устройства и они одинаковы для всех HART-устройств.
    • Общие (32..127) — эти команды не обязательно должно поддерживать каждое устройство, но они также одинаковы для всех устройст, которые их поддерживают
    • Специфические (128-253) — эти команды создаются производителем под различные специфические нужды каждого конкретного устройства, соответственно, в каждом конкретном устройстве одни и те же команды будут работать по-разному.
  4. Длина сообщения. Записанный в этом поле байт показывает количество полезных данных в передаваемом сообщении. Оно равно количеству байт данных, следующих за полем Data Size (без учёта CRC), то есть равно суммарной длине полей Status и Data.
  5. Статус. Это поле присутствует только в ответных сообщениях от слэйва к мастеру (в сообщениях от мастера его нет). Первый байт этого поля содержит статус слэйва, а второй байт — статус сеанса связи. Каждый установленный бит в этих полях сигнализирует о какой-либо ошибке. Если никаких ошибок нет, то оба байта равны нулю. Значения отдельных битов расшифровываются в приведённой ниже таблице:
  6. бит название описание
    Байт статуса слэйва
    0 Primary variable out of range Значение первичной переменной вышло за пределы диапазона измерения
    1 Secondary variable out of range Значение вторичной переменной вышло за пределы диапазона измерения (подробности можно получить командой 48)
    2 Analog output saturated Аналоговый выходной сигнал достиг насыщения и больше не отражает измеренное значение
    3 Analog output fixed На аналоговом выходе установлено фиксированное значение и он больше не отражает измеренную величину
    4 More statuses available Есть некие дополнительные статусы, которые можно вычитать командой 48
    5 Cold restart На приборе пропадало питание, которое затем было восстановлено, что привело к сбросу параметров настройки. Этот флаг может быть также установлен при самотестировании.
    6 Configuration changed Сигнализирует, что с прибором были произведены команды записи или изменения параметров.
    7 Field device failed В устройстве произошла аппаратная ошибка или сбой (подробности можно получить командой 48)
    Байт статуса связи
    0 not defined Использвание этого бита не определено спецификацией
    1 Buffer overflow При приёме сообщения от мастера произошло переполнение приёмного буфера слэйва
    2 Reserved Значение этого бита всегда равно 0
    3 Checksum error Вычисленная устройством контрольная сумма сообщения не совпала с контрольной суммой, переданной мастером (на самом деле устройство, естественно, вычисляет контрольную сумму всего сообщения, включая байт CRC и если всё в порядке, то результат должен быть ноль).
    4 Frame Error Здесь имеется ввиду не ошибка всего фрейма HART, а ошибка кадра UART при передаче байта. Она возникает, если для одного или нескольких принятых байтов приёмнику не удалось обнаружить стоповый бит.
    5 Rewrite Data Ошибка возникает, если один или несколько байт в приёмном буфере UART были перезаписаны до того, как были прочитаны.
    6 Parity Error возникает при нарушении бита чётности одного или нескольких принятых байт.
    7 Communication Error Во время сеанса связи были какие-либо ошибки

Данные. Это поле содержит информативную часть команды или ответа. Может отсутствовать как в запросе, так и в ответе. Например, запрос описания устройства (команда 0) не подразумевает отправку каких-либо дополнительных данных, кроме самой команды. Слэйв не возвращает какие-либо данные в ответе при обнаружении ошибок сеанса связи (в этом случае ответ содержит только два байта статуса).

CRC. Контрольная сумма обеспечивает дополнительную защиту от ошибок передачи. Она вычисляется простым суммированием по XOR всех байтов пакета, начиная со стартового символа (преамбула в вычислении CRC не участвует).

Ну и напоследок немного о логике разделения шины.

На каждой шине HART может быть до трёх устройств, инициирующих передачу данных: первичный мастер, вторичный мастер и устройство в пакетном режиме (такое устройство на шине может быть только одно). При этом все три устройства должны делить шину таким образом, чтобы друг другу не мешать.

Для эфективного разделения шины между различными устройствами используется, так называемый «виртуальный маркер», который определяет, кто именно должен быть активен в каждый момент времени. При этом все устройства на шине анализируют трафик и исходя из этого трафика понимают, у кого в данный момент находится «виртуальный маркер». На рисунках ниже показаны диаграммы передачи пакетов и переходов «виртуального маркера» в зависимости от наличия или отсутствия на шине устройств в пакетном режиме.

Диаграммы передачи виртуального маркера между устройствами на шине HART

Диаграммы передачи виртуального маркера между устройствами на шине HART

[свернуть]

Для обычного слэйв устройства, которое не находится в пакетном режиме, в обоих случаях всё довольно просто, — устройство постоянно слушает шину и если обнаружит предназначенный для него пакет — считает, что получило маркер. После этого устройство должно ответить не позднее, чем через время STO (Slave Time-Out), равное 28 кадрам UART (1 кадр UART = 11 бит данных на скорости 1200 Бод).

Теперь переходим к мастеру. При подключении к шине оба мастера должны выдержать время RT1 (Link Quiet Time), равное 33 кадра UART для первичного мастера или 41 кадр UART для вторичного мастера. Если за это время они не увидели на шине никакой активности, то считается, что шина находится в режиме тишины и они могут начать свою передачу. Это время специально сделано разным для первичного и вторичного мастеров, чтобы при первом включении или восстановлении после сбоя первичный мастер имел преимущество. Если за время RT1 мастер увидел на шине какую-либо активность, то он синхронизирует своё состояние в соответствии с этой активностью.

Если на шине нет устройств в пакетном режиме, то мастер получает маркер одновременно с ответом слэйв-устройства другому мастеру. То есть мастер анализирует все пакеты на шине и если видит, что в очередном принятом пакете направление стоит от слэйва к мастеру, а адрес мастера не совпадает с его собственным — мастер понимает, что он получил маркер. Теперь, не ранее времени HOLD (2 кадра UART), но не позднее времени RT2 (Link Grant Time), равного 8 кадров UART, он может начать передачу данных.

С Burst Mode всё несколько сложнее, фактически шиной управляет устройство, находящееся в пакетном режиме. Оно посылает пакеты, поочерёдно меняя адрес мастера. При этом тот мастер, адрес которого не совпадает с адресом в очередном пакете от устройства в пакетном режиме, получает маркер и может не ранее времени HOLD и не позднее времени RT2 начать передачу. Если в течении времени RT2 устройство в пакетном режиме не увидело пакет от мастера или в течении времени STO после пакета мастера не увидело пакет от слэйва, то оно занимает шину.

Параметр Описание Длительность
UART frame Время передачи одного байта данных по UART (11 бит на скорости 1200) 9,167 мс = 11*1000/1200
STO — Slave Time Out Время, в течении которого слэйв должен начать отвечать мастеру 256,676 мс = 28 кадров UART
HOLD Время, в течении которого нельзя занимать шину после предыдущей активности 18,334 мс = 2 кадра UART
RT2 — Link Grand Time Время, в течении которого мастер должен занять шину после получения маркера 73,336 мс = 8 кадров UART
RT1 — Link Quiet Time Время, в течении которого на шине не должно быть активности, чтобы мастер решил, что шина находится в режиме тишины (на ней нет никакого обмена) 302,511 мс = 33 кадра UART — для Primary Master
375,847 мс = 41 кадр UART — для Secondary Master

Вот и всё на сегодня. Как уже было сказано ранее, — более полную информацию со всеми подробностями можно прочитать в самой спецификации (ссылки я дал выше).

Добавить комментарий