TE-GORYNYCH трёхточечный термометр с интерфейсом rs485 и протоколом modbus.
Описание TE-GORYNYCH трёхточечный термометр с интерфейсом rs485 и протоколом modbus.
Устройство TE - ГОРЫНЫЧ.
Предназначено для контроля температуры с помощью трёх датчиков ds18b20 и считывания показаний через интерфейс rs485 по протоколу modbus.
Характеристики применённых датчиков.
Диапазон измеряемых температур от -55 до +125 градусов Цельсия.
Точность ± 0.5 градуса.
Разрешение 0.0625 градуса.
Подключение устройства. Назначение контактов.
RS485 |
|
1 |
Линия A |
2 |
Линия B |
Питание |
|
3 |
GND |
4 |
+9 +24 V |
Датчик 1 |
|
5 |
VDD |
6 |
DATA |
7 |
GND |
Датчик 2 |
|
8 |
VDD |
9 |
DATA |
10 |
GND |
Датчик 3 |
|
11 |
VDD |
12 |
DATA |
13 |
GND |
Элементы настройки и индикации.
Джамперы |
|
1 |
Джампер включающий резистор подтяжки 1.2k на линии B. |
2 |
Джампер включающий резистор подтяжки 1.2k на линии A. |
3 |
Джампер включающий терминатор 120 Ом между линиями A и B. |
4 |
Джампер сброса устройства к настройкам по умолчанию. |
Светодиоды. |
|
5 |
Красный светодиод. |
6 |
Зелёный светодиод. |
Устройство поставляется с установленными джамперами. В случае необходимости их нужно снять.
На плате расположены красный и зелёный светодиоды. Ими удобно пользоваться при монтаже и проверке новых устройств. Зелёный светодиод начинает мигать сразу после подачи питания, показывая, что устройство работает. Красный светодиод вспыхивает на короткое время если устройство получило команду со своим ID и верной контрольной суммой.
Механические характеристики.
Корпус устройства выполнен из пластика, допускает как установку на DIN рейку так и крепление саморезами через сквозные отверстия на стену.
Габаритные размеры устройства с учётом выступающих разъёмов 8.5 х 4.5 х 3 сантиметра.
Для разборки корпуса, нужно сжать пальцами его нижнюю часть и другой рукой отделить верхнюю часть.
Интерфейс.
Считывание показаний и настройка осуществляются через интерфейс rs485 по протоколу modbus.
Поддерживаются следующие настройки.
Скорость 1200/24004800/9600/19200/28400/57600/115200 бит/c.
8 бит данных.
Режимы чётности NONE/EVEN/ODD.
Количество стоповых бит 0.5/1/1.5/2
Настройки по умолчанию.
MODBUS ID 0x01
Параметры порта 9600, 8, None, 1
Для сброса настроек необходимо переставить перемычку с контактов 4-3 гребёнки J7 на контакты 3-2.
Красный и зелёный светодиоды загорятся одновременно.
Вернуть перемычку в прежнее положение на контакты 4 - 3.
Устройство будет сброшено к настройкам по умолчанию.
Устройство имеет встроенный отключаемый резистор - терминатор 120 Ом.
Также имеются отключаемые резисторы 1.2k подтяжки линий A и B к питанию.
Подключение / отключение этих резисторов осуществляется перемычками - джамперами расположенными на плате устройства.
Устройство поставляется с перемычками в положении ВКЛЮЧЕНО.
Карта регистров modbus.
Регистры только для чтения. Команда 0x03.
Адрес десятичный. |
Адрес шестнадцатеричный |
Описание регистра. |
0 |
0x0000 |
Датчик 1. Целая часть значения температуры. |
1 |
0x0001 |
Датчик 2. Целая часть значения температуры. |
2 |
0x0002 |
Датчик 3. Целая часть значения температуры. |
3 |
0x0003 |
Датчик 1. Значение температуры с максимальным разрешением. |
4 |
0x0004 |
Датчик 2. Значение температуры с максимальным разрешением. |
5 |
0x0005 |
Датчик 3. Значение температуры с максимальным разрешением. |
6 |
0x0006 |
Датчик 1. Значение температуры с одним десятичным знаком. |
7 |
0x0007 |
Датчик 2. Значение температуры с С одним десятичным знаком. |
8 |
0x0008 |
Датчик 3. Значение температуры с одним десятичным знаком. |
9 |
0x0009 |
Зарезервировано. |
10 |
0x000A |
Зарезервировано. |
11 |
0x000B |
Зарезервировано. |
12 |
0x000C |
Зарезервировано. |
13 |
0x000D |
Зарезервировано. |
14 |
0x000E |
Версия прошивки. |
15 |
0x000F |
Датчик 1. Код текущей ошибки 0x01 - 0x08. |
16 |
0x0010 |
Датчик 2. Код текущей ошибки 0x01 - 0x08. |
17 |
0x0011 |
Датчик 3. Код текущей ошибки 0x01 - 0x08. |
18 |
0x0012 |
Датчик 1. Всего ошибок с момента включения. |
19 |
0x0013 |
Датчик 2. Всего ошибок с момента включения. |
20 |
0x0014 |
Датчик 3. Всего ошибок с момента включения. |
Регистры для чтения/записи. Команды 0x03 / 0x06
Адрес десятичный |
Адрес шестнадцатеричный |
Описание регистра. |
Значение по умолчанию |
21 |
0x0015 |
Modbus ID устройства. Допустимые значения 0x0001 - 0x00F7. |
0x0001 |
|
22 |
0x0016 |
Скорость. Допустимые значения 0x0001 – 0x0008. |
0x0004 |
|
Код |
Скорость |
|||
0x0001 |
1200 |
|||
0x0002 |
2400 |
|||
0x0003 |
4800 |
|||
0x0004 |
9600 |
|||
0x0005 |
19200 |
|||
0x0006 |
28400 |
|||
0x0007 |
57600 |
|||
0x0008 |
115200 |
|||
23 |
0x0017 |
Чётность NONE/EVEN/ODD. Допустимые значения 0x0001 – 0x0003. |
0x0001 |
|
Код |
Чётность |
|||
0x0001 |
NONE |
|||
0x0002 |
EVEN |
|||
0x0003 |
ODD |
|||
24 |
0x0018 |
Стоп биты 1/0.5/2/1.5 Допустимые значения 0x0001 – 0x0004. |
0x0001 |
|
Код |
Количество |
|||
0x0001 |
1 |
|||
0x0002 |
0.5 |
|||
0x0003 |
2 |
|||
0x0004 |
1.5 |
|||
25 |
0x0019 |
Управление индикацией. Допустимые значения 0x0000 – 0x0001. |
0x0001 |
|
0x0000 |
Индикация выключена. |
|||
0x0001 |
Индикация включена. |
|||
26 |
0x001A |
Датчик 1. Коэффициент коррекции. Допустимые значения 0xFF60 – 0x00A0. |
0x0000 |
|
27 |
0x001B |
Датчик 2. Коэффициент коррекции. Допустимые значения 0xFF60 – 0x00A0. |
0x0000 |
|
28 |
0x001C |
Датчик 3. Коэффициент коррекции. Допустимые значения 0xFF60 – 0x00A0. |
0x0000 |
|
29 |
0x001D |
Интервал опроса датчиков. Допустимые значения 0x0001 – 0x001E. |
0x0005 |
|
30 |
0x001E |
Зарезервировано |
|
Регистры только для чтения.
Регистры 0x0000 - 0x0002.
В данных регистрах хранится целочисленное значение температуры в градусах Цельсия. Эти данные можно использовать как есть просто переведя из шестнадцатеричного представления в десятичное.
Пример получения температуры от датчика 1.
Для чтения регистра 0x0000 отправляем запрос 01 03 00 00 00 01 84 0A
Получаем в ответ 01 03 02 00 1A 39 8F
Значение регистра 0x0000 равно 001A.
Переводим шестнадцатеричное 001A в десятичный вид и получаем 26 градусов Цельсия.
Ещё один пример, получим отрицательное значение температуры от датчика 1.
Отправляем запрос 01 03 00 00 00 01 84 0A
Получаем в ответ 01 03 02 FF FB B8 37
Значение регистра 0x00 равно FFFB
Переводим шестнадцатеричное FFFB в десятичный вид и получаем -5 градусов Цельсия.
Если датчик неисправен, то содержимое соответствующего регистра будет равно 8000, а в десятичном виде -32768.
Регистры 0x0003 - 0x0005.
В регистрах лежат сырые данные от датчиков. Для получения полного значения с разрешением до десятитысячных долей градуса для датчика 1, нужно значение из регистра 0x0003 умножить на 625 и результат разделить на 10000.
Пример.
Запрос 01 03 00 03 00 01 74 0A
Ответ 01 03 02 01 9E 38 7C
Значение регистра 0x0003 равно 019E, что равно десятичному 414.
(414 * 625 )/10000=25.8750 градуса.
Тоже самое с отрицательными значениями температуры.
Запрос 01 03 00 03 00 01 74 0A
Ответ 01 03 02 FF 4A 78 43
Значение регистра 0x03 равно FF4A, что равно десятичному -182.
(-182 * 625 )/10000=11.3750 градуса.
Если датчик неисправен, то содержимое соответствующего регистра будет равно 8000, а в десятичном виде -32768.
Регистры 0x0006 - 0x0008.
В регистрах лежат данные с одной цифрой после запятой. Нужно считать регистр и разделить его содержимое в десятичном виде на 10.
Пример.
Запрос 01 03 00 06 00 01 64 0B
Ответ 01 03 02 00 C1 79 D4
В регистре 0x0006 лежит значение 00С1.
193/10=19.3 градуса.
С отрицательными значениями температуры.
Запрос 01 03 00 06 00 01 64 0B
Ответ 01 03 02 FF 9E 78 1C
В регистре 0x0006 лежит значение FF9E.
-98/10=9.8 градуса.
Если датчик неисправен, то содержимое соответствующего регистра будет равно 8000, а в десятичном виде -32768.
Регистр 0x000E. (Версия прошивки.)
Пример чтения.
Запрос 01 03 00 0E 00 01 E5 C9
Ответ 01 03 02 00 04 B9 87
Версия прошивки 4.
Регистры 0x000F - 0x0011. (Расшифровка кодов ошибок.)
Обмен данными у применённых датчиков ds18b20 осуществляется по цифровой шине 1wire, соответственно эта шина подвержена помехам. Отображение ошибок служит для контроля качества соединительной линии между устройством и датчиком, а также для контроля исправности самого датчика.
Код. |
Описание ошибки. |
|
0x00 0b00000000 |
Всё хорошо. |
|
0x01 0b00000001 |
Обрыв линии. |
|
0x02 0b00000010 |
Короткое замыкание на линии. |
|
0x04 0b00000100 |
Ошибка контрольной суммы. |
|
0x08 0b00001000 |
Датчику не хватило питания. |
|
Чаще всего будут встречаться комбинации ошибок. Например
обрыв линии 0b00000001 0x01 автоматически влечёт за собой ошибку контрольной суммы 0b00000100 0x04. Комбинация ошибок будет выглядеть как сумма этих ошибок 0b00000101 0x05.
Регистры 0x0012 - 0x0014. (Счётчики ошибок.)
Одиночные и даже сдвоенные ошибки не имеют значения, поскольку устройство обратится к датчику ещё раз, но сам факт будет зафиксирован счётчиком ошибок. В регистрах 0x0012, 0x0013 и 0x0014 хранится количество ошибок с момента подачи питания на устройство. После отключения питания, эти регистры сбрасываются в ноль.
Пример чтения счётчиков ошибок для всех трёх датчиков.
Запрос 01 03 00 12 00 03 A5 CE
Ответ 01 03 06 00 08 00 04 00 00 81 75
Датчик один, 8 ошибок.
Датчик два 4 ошибки.
Датчик три, ошибок не было.
Следующие регистры доступны для чтения и записи. Их значение хранится в энергонезависимой памяти и сохраняется при отключении питания.
Регистр 0x0015. (MODBUS ID)
В этом регистре хранится идентификатор устройства на шине.
Пример чтения текущего идентификатора.
Запрос 00 03 00 15 00 01 94 1F
Ответ 01 03 02 00 01 79 84
Идентификатор 1.
Пример замены идентификатора на 3.
Запрос 01 06 00 15 00 03 D8 0F
Ответ 01 06 00 15 00 03 D8 0F
По умолчанию ID равен 0x01.
Регистр 0x0016. (Скорость.)
Тут настраиваем скорость обмена по шине.
В регистре содержится код скорости.
Соответствие скорости коду.
Код |
Скорость |
0x0001 |
1200 |
0x0002 |
2400 |
0x0003 |
4800 |
0x0004 |
9600 |
0x0005 |
19200 |
0x0006 |
28400 |
0x0007 |
57600 |
0x0008 |
115200 |
По умолчанию установлена скорость 9600 бит/c.
Пример получения скорости.
Запрос 01 03 00 16 00 01 65 CE
Ответ 01 03 02 00 08 B9 82
Содержимое регистра равно 0x0008.
По таблице определяем, что скорость равна 115200.
Пример установки скорости 2400.
По таблице определяем код для скорости 2400, это 0x0002.
Запрос 01 06 00 16 00 02 E9 CF
Ответ 01 06 00 16 00 02 E9 CF
Регистр 0x0017. (Чётность.)
В этом регистре настраивается контроль чётности.
Код |
Чётность |
0x0001 |
NONE |
0x0002 |
EVENT |
0x0003 |
ODD |
По умолчанию контроль чётности отключен.
Пример чтения установленной чётности.
Запрос 01 03 00 17 00 01 34 0E
Ответ 01 03 02 00 02 39 85
Содержимое регистра равно 0x0002.
По таблице определяем, что установлен контроль чётности EVENT.
Пример настройки контроля чётности.
По таблице определяем код для отключения контроля чётности, это 0x0001.
Запрос 01 06 00 17 00 01 F8 0E
Ответ 01 06 00 17 00 01 F8 0E
Регистр 0x0018. (Количество стоповых бит)
В этом регистре настраивается количество стоповых бит.
Код |
Количество |
0x0001 |
1 |
0x0002 |
0.5 |
0x0003 |
2 |
0x0004 |
1.5 |
По умолчанию используется один стоповый бит.
Пример чтения количества стоповых бит.
Запрос 01 03 00 18 00 01 04 0D
Ответ 01 03 02 00 03 F8 45
Содержимое регистра равно 0x0003.
По таблице определяем, что передаются два стоповых бита..
Пример установки нужного количества стоповых бит.
По таблице определяем код для установки одного стопового бита, это 0x0001.
Запрос 01 06 00 18 00 01 C8 0D
Ответ 01 06 00 18 00 01 C8 0D
Регистр 0x0019. (Разрешение индикации.)
Иногда свечение светодиодов может мешать или привлекать к себе ненужное внимание.
Этот регистр позволяет отключить индикацию.
Код |
Состояние светодиодов. |
0x0000 |
Отключены. |
0x0001 |
Включены. |
По умолчанию индикация включена.
Пример чтения состояния индикации.
Запрос 01 03 00 19 00 01 55 CD
Ответ 01 03 02 00 01 79 84
Содержимое регистра равно 0x0001.
По таблице определяем, что индикация включена.
Пример отключения индикации.
По таблице определяем код для отключения, это 0x0000.
Запрос 01 06 00 19 00 00 58 0D
Ответ 01 06 00 19 00 00 58 0D
Светодиоды больше не мигают.
Регистры 0x001A - 0x001C.
(Коэффициенты коррекции показаний датчиков.)
По умолчанию коррекция отключена.
0x001A соответствует датчику 1, 0x001B датчику 2 и 0x001B датчику 3.
При необходимости показания датчиков можно сдвинуть вверх или вниз.
Допустимые пределы +- 10 градусов.
Шаг 0.0625 градуса.
Соответственно чтобы добавить к показаниям один градус, надо выполнить следующее действие 1 разделить на 0.0625 получится 16. 16 перевести в шестнадцатеричный вид, получится 0x10. Вспомнить, что в MODBUS используются 16 разрядные регистры и записать в регистр корректировки значение 0010. Полностью строчка включающая контрольную сумму и добавляющая 1 градус к показаниям первого датчика, будет выглядеть так
01 06 00 1A 00 10 A9 C1
В случае если нужно отнять 1 градус, запись коэффициента осуществляется в дополнительном коде. -1 делим на 0.0625, получается -16. Переводим -16 в шестнадцатеричный вид, получается FFF6. Это число и записываем в регистр коррекции.
01 06 00 1A FF F6 69 BB
Пример чтения корректирующего коэффициента датчика 1.
Запрос 01 03 00 1A 00 01 A5 CD
Ответ 01 03 02 00 00 B8 44
Содержимое регистра равно 0x0000. Значит датчик работает без коррекции.
Пример установки корректирующего коэффициента датчика 1.
Устанавливаем смещение +1 градус.
Запрос 01 06 00 1A 00 10 A9 C1
Ответ 01 06 00 1A 00 10 A9 C1
Регистр 0x001D.
(Интервал опроса датчиков.)
По умолчанию интервал опроса датчиков 5 секунд.
При слишком частом опросе, у датчиков ds18b20 может проявиться эффект небольшого саморазогрева.
В проточной среде или на открытом воздухе это особого значения не имеет и эффект не заметен. Но в случае если измеряется температура газа в замкнутом объёме, интервал опроса датчиков лучше уменьшить.
Для этого и служит этот регистр. В нём задаётся интервал опроса в секундах.
Допустимые интервалы от 1 секунды до 30 секунд.
Значение по умолчанию 5 секунд.
Следует отметить, что интервал опроса устройства и интервал опроса датчиков, никак между собой не связаны.
Пример чтения значения интервала.
Запрос 01 03 00 1D 00 01 14 0C
Ответ 01 03 02 00 05 78 47
Содержимое регистра равно 0x0005. Значит установлен интервал 5 секунд.
Пример установки интервала.
Устанавливаем интервал 1 секунда.
Запрос 01 06 00 1D 00 01 D8 0C
Ответ 01 06 00 1D 00 01 D8 0C