HART протокол в C++ Builder и 'Метран-150

HART протоол в C++ Builder и Метран-150HART протокол в C++ Builder редко встречаемая в сети тема. Управление датчиком абсолютного давления "Метран-150" по HART протоколу реализовано многими программистами в виде OPC серверов и программы "HART master". Но для частного случая применения датчика "Метран-150", например в составе какого-либо изделия такие варианты не подходят.

Тестовый частный случай вполне можно реализовать на C++ Builder. Допустим нам необходимо по HART протоклу читать данные с "Метран-150" об абсолютном давлении при этом имея возможность изменять нижний и верхний диапазон измерения датчика. Вначале необходимо определить команды HART протокола которые для этого понадобятся. Итак для чтения данных об абсолютном давлении необходимо послать датчику команду "Считать первичную переменную" (команда 1 - в Hex виде 0x01), а для изменения диапазона необходимо послать команду "Записать значения диапазона" (команда 35 - в Hex виде 0x23). Не будем останавливаться на особенностях HART протокола, все необходимое можно изучить в документе по представленной чуть выше ссылке.

В соответствии с вышеизложенными требованиями была написана тестовая программа в C++ Builder которая читает с датчика "Метран-150" первичную переменную, тоесть в нашем случае абсолютное давление и дает возможность оператору менять верхний и нижний диапазоны измерения плюс чтение некоторой служебной информация, без которой невозможен обмен с датчиком, как например его идентификатор. Кроме того программа отображает в HEX виде управляющие и ответные слова в двух разных окнах, что наглядно показывает как работает HART протокол. Обмен с прибором осуществляется посредством порта COM1 персонального компьютера через HART модем "Метран-681".

HART протокол в Метран-150

В проекте, который выполнен на C++ Builder 5 были использованы дополненные и подправленные функции OPC сервера. В частности функция cFloatCtoIEEE754 преобразования данных из float в стандарт IEEE754 содержала серъезную ошибку - возвращаемый, локально созданный указатель, который создается фактически в стеке, который в свою очередь, при выходе их функции, раскручивается в обратную сторону, указывал не на вычисленные данные, а на случайное число. В проекте функция подправлена таким образом, чтоуказатель привносится в нее из вне, занимая жесткое положение в памяти (функция cFloatCtoIEEE754new). Саме неприятное, что Метран в своих ответных словах не всегда посылает синхронизирующие байты 0xFF (подтверждающий скриншот ниже по тексту) количеством больше 3_х. Функции OPC сервера начинают учитывать принятые данные при количестве принятых синхробайт 0xFF больше трех.

Ответные слова с Метран-150

Это пришлось учитывать в функциях OPC запроса-приема. Думаю именно эта особенность прибора не учтена в широко известной программе "HART-MASTER", поскольку надежность ее общения с Метраном оставляет желать лучшего. Поскольку проект, ссылка на который выше по тексту, а точнее его исходники, снабжены комментариями то наверняка он будет полезен тем, кто сталкивается с проблемой освоения HART протокола в части управления датчиком абсолютного давления "Метран-150" и частных случаев его применения.

Top.Mail.Ru