Карта modbus регистров – – 2 – Карта регистров прибора по протоколу MODBUS для приборов SK-712/d, SK-712/sd, SK-712/ss, SK-712/v (с версией ПО 4.9.0) Парам.

404 Not Found | 404 Страница не найдена

Санкт-Петербург, Ленинградская, Тюменская, Калужская, Смоленская, Тверская, Калининградская, Мурманская, Новгородская области; Ямало-Ненецкий АО, республика КарелияУдалова Татьяна Александровнаменеджер по продажамдоб. 131
Москва, Московская областьГавриков Андрей Юрьевичначальник отдела продаж №1доб. 111
Башкирия, Татарстан, Новосибирская, Кемеровская областиГрищенко Юрий Евгеньевичменеджер по продажамдоб. 123
Иркутская, Томская области; Алтайский край, Красноярский край, Забайкальский край; Бурятия, Хакасия, Тыва, Алтай, Камчатский край, Приморский край, Сахалинская, Амурская, Магаданская области, Хабаровский край, Якутия, Еврейская АО, Чукотский АОМаркина Екатерина Андреевнаменеджер по продажамдоб. 126
Пермский край, Казахстан, Узбекистан, Киргизия, Таджикистан, Туркмения, УдмуртияПикунов Игорь Андреевичменеджер по продажамдоб. 125
Костромская, Ростовская, Курганская, Свердловская, Астраханская, Волгоградская области, Адыгея, Дагестан, Ингушетия, Кабардино-Балкария, Калмыкия, Карачаево-Черкесия, Краснодарский край, Северная Осетия, Ставропольский край, Чечня, Крым, Грузия, Армения, АзербайджанРазгуляев Вячеслав Валерьевичменеджер по продажамдоб. 133
Нижегородская, Пензенская, Самарская, Кировская, Оренбургская, Саратовская, Ульяновская области; Чувашия, Марий Эл, Мордовия, Республика Коми.Бобырь Вера Сергеевнаменеджер по продажамдоб. 129
Брянская, Владимирская, Ивановская, Рязанская, Тульская, Ярославская, Омская, Архангельская, Вологодская, Псковская, Челябинская области, ХМАО-Югра, Ненецкий АО, УкраинаИванова Екатерина Александровнаменеджер по продажамдоб. 116

emis-kip.ru

Реле максимального тока, защита электродвигателей, концевые выключатели. НПП Бинар. Витебск.

НПП «Бинар» — специализируется на разработке и производстве электронных приборов, устройств промышленной автоматики, устройств защиты и управления электродвигателей (насосов, вентиляторов, подъемно-транспортного, холодильного, компрессорного оборудования, станочных приводов и т.п.), реле максимального тока, в том числе:

№ п/п

Модель

устройства защиты

Ориентировочная мощность защищаемого электродвигателя,  кВт

Номинальный (рабочий) ток защищаемого электродвигателя, А

Обозначение

устройства защиты

Примечание

1

СиЭЗ-6

0,2 - 500

0,4 -1000

СиЭЗ-6

*Цифровая индикация и программирование

*Работает со стандартными трансформаторами тока

*Бесконтактная входная  коммутация

2

СиЭЗ-4И

0,35 - 12

1 - 25

СиЭЗ-4И-1-25

*Цифровая индикация и программирование

*Бесконтактная входная   коммутация

3

СиЭЗ-4А

0,1 – 0,3

0,2 – 1,1

СиЭЗ-4А-0,2-1,1

*Автоматическая настройка на номинальный (рабочий) ток

*Контактная входная коммутация

0,3 – 1,1

0,8 - 3

СиЭЗ-4А-0,8-3

1,1 - 3

2 - 8

СиЭЗ-4А-2-8

4

СиЭЗ

3 - 11

8 - 25

СиЭЗ-8-25

*Не требуется источника электропитания

*Бесконтактная входная коммутация

11 - 45

20 - 80

СиЭЗ-20-80

5

СиЭЗ-1МИ

12 - 115

20 - 220

СиЭЗ-1МИ-20-230

*Цифровая индикация и программирование
*Бесконтактная входная коммутация

6

СиЭЗ-2М

6-25

5 - 50

СиЭЗ-2М-5-50

*Цифровая индикация и программирование

*Архив до 1000 событий

*Бесконтактная входная  коммутация

25 - 110

35 - 230

СиЭЗ-2М-35-230

110 - 160

180 - 320

СиЭЗ-2М-180 - 320

7

СиЭЗ-ВБТ-П

по техническому заданию заказчика

*Защита любых электрических цепей и электродвигателей постоянного тока

*Использование совместно с электродвигателем постоянного тока вместо концевых выключателей или для их дублирования

НПП «Бинар» является официальным дилером в Республике Беларусь производителя устройств мониторинга и защиты трехфазных электроустановок переменного тока (электродвигателей, насосов, трансформаторов и других ответственных агрегатов) ООО «Дион», г. Томск.

По желанию заказчика можем поставить изделия с индивидуальными характеристиками: увеличение/уменьшение длины провода до датчиков тока, изменение размеров датчиков тока и т.д.

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

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

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

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

Мы предлагаем качественно новый уровень защиты и управления электроприводных установок, основанный на бесконтактных электронных технологиях контроля параметров работы электродвигателя.

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

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

 

Доставка по Беларуси и странам Таможенного Союза

www.binar-by.com

Формирование таблицы адресов регистров Modbus

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

Для того, чтобы создать таблицу адресов регистров Modbus для конкретного устройства необходимо воспользоваться программой  «SENSOR WORK» (Сервисная работа с ZETxxx)

Есть два способа открытие программы SENSOR WORK:

  1. Через программное обеспечение ZETLAB. 
  2. Через Portable версию, которая находится на FTP сервере.

Открытие программы SENSOR WORK:

Способ №1 через ПО ZETLAB

1. Запустить программное обеспечение ZETLAB. У вас откроется верхняя панель. В верхнем, в левом углу нажать на иконку  ПО ZETLAB.

2. Далее откроется окно программного обеспечения ZETLAB. Нажмите на кнопку «Сервисная работа с ZET7xxx»

Способ №2 через PORTABLE версию

  1. Заходите на наш FTP сервер. Нажимаете на «ZETLab_service/» 

2. В открывшемся окне нажимаете на SensorWork_Portable.zip, после чего начнется автоматическое скачивание архивированного файла.

3. Файл скачивает в архиве. Для того чтобы его открыть, вам потребуется разархивировать папку. Выделите файл и нажмите правую кнопку мышки. И нажимаете извлечь файл в SensorWork_Portable

После того как файл разархивируется, откройте папку SensorWork_Portable. И откройте файл SensorWork.exe

Порядок действий по созданию таблицы адресов регистров MODBUS:

    1. 1. После запуска исполняемого файла у вас откроется программа SENSOR WORK.


При использовании стороннего преобразователя интерфейса RS-485, требуется задействовать соответствующий ему COM-порт.

При этом рекомендуется выставить размер пакета Modbus равным 32 байтам, поскольку некоторые преобразователи интерфейса RS-485 не имеют встроенной поддержки протокола Modbus RTU и могут ограничивать размер передачи.

    1. 2. При помощи правой кнопки мыши вызвать контекстное меню устройства, таблицу адресов которого следует создать. В открывшемся контекстном меню активировать команду «Сгенерировать таблицу адресов»

    1. 3. После выполнения команды «Сгенерировать таблицу адресов» откроется папка, расположенная по директории: C:/ZETLab/SensorWork/AddressTables, в которой для данного устройства будет создан файл с расширением имени «.html».

    1. 4. Данный файл содержит таблицу адресов регистров Modbus для данного устройства. Открыть файл возможно при помощи любого Веб-обозревателя (Chrome, Mozilla, IE и др.), для этого необходимо щелкнуть по нему два раза левой кнопкой мыши. В браузере откроется страничка, содержащая таблицу адресов регистров Modbus. На рисунке представлен пример такой таблицы полученный для ZET 7010, которая содержит адреса регистров Modbus.

Основной пункт в таблице адресов регистров это «Текущее значение датчика»

zetlab.com

Описание протокола Modbus

Описание протокола Modbus

Данная статья описывает основы работы с протоколом Modbus. В статье вы можете найти:

  • Описание Modbus
  • Пример применения
  • Описание программы Onitex Modbus Terminal

Основные принципы Modbus

Modbus — коммуникационный протокол, основанный на клиент-серверной архитектуре. В данной статье мы рассмотрим основы протокола и базовые принципы работы. Кроме того, вы можете ознакомиться с конкретными примерами работы протокола Modbus, изучив описания контроллеров, использующих этот протокол, к примеру, OSM-17RA, а так же скачав программу Modbus Terminal, позволяющую удобно работать с различными регистрами Modbus.

Протокол Modbus разработан для использования в программируемых логических контроллерах, таких, как управление электроприводом. В настоящее время является очень распространенным протоколом, используемых в различных промышленных системах. К примеру, данный протокол используется в контроллерах шаговых двигателей Онитекс. Широко используется для передачи данных последовательные линии связи, основанных на интерфейсах RS-485, RS-422, RS-232. В начале развития применялся интерфейс RS-232, как один из наиболее простых промышленных интерфейсов для последовательной передачи данных. В настоящее время протокол часто используется поверх интерфейса RS-485, что позволяет добиться высокой скорости передачи, больших расстояний и объединения нескольких устройств в единую сеть, тем более что протокол Modbus поддерживает адресацию. Широкая распространенность протокола Modbus, обусловленная его простотой и надежностью, позволяет легко интегрировать устройства, поддерживающие Modbus, в единую сеть.

Основной особенностью протокола является наличие в сети одного ведущего устройства - master. Только ведущее устройство может опрашивать остальные устройства сети, которые являются ведомыми (slave). Подчиненное устройство не может самостоятельно инициировать передачу данных или запрашивать какие-либо данные у других устройств, работа сети строится только по принципу "запрос-ответ". Мастер может так же выдать широковещательный запрос, адресованный всем устройствам в сети, в таком случае ответное сообщение не посылается.

Существует три типа протокола Modbus: Modbus ASCII, Modbus RTU и Modbus TCP. Устройства Onitex поддерживают протокол Modbus RTU, поэтому мы в дальнейшем будем иметь в виду прежде всего этот протокол.

Пакет данных в Modbus выглядит следующим образом:

Адрес | Код функции | Данные | Контрольная сумма.

Адрес - это поле, содержащее номер устройства, которому адресован запрос. Каждое устройство в сети должно иметь уникальный адрес. Устройство отвечает только на те запросы, которые поступают по его адресу, во избежание конфликтов. При этом, ведомое устройство в своем ответе так же посылает поле Адрес, кроме широковещательного запроса (когда ответа от ведомого быть вообще не должно).

Код функции содержит номер функции модбаса (о функциях будет сказано ниже). Функция может запрашивать данные или давать команду на определенные действия. Коды функций являются числами в диапазоне от 1 до 127. Функции с номерами от 128 до являются зарезервированными для пересылки в ответном сообщении информации об ошибках.

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

Поле Контрольная сумма является важным элементом протокола: в нем содержится информация, необходимая для проверки целостности сообщения и отсутствия ошибок передачи.

Максимальный размер пакета для сетей RS232/RS485 — 256 байт, для сетей TCP — 260 байт.

Существует три типа функций:

  1. Стандартные. Описание этих функций опубликовано и утверждено Modbus-IDA. Эта категория включает в себя как опубликованные, так и свободные в настоящее время коды.
  2. Пользовательские. Два диапазона кодов (от 65 до 72 и от 100 до 110), для которых пользователь может создать произвольную функцию. 
  3. Зарезервированные. В эту категорию входят коды функций, не являющиеся стандартными, но уже используемые в устройствах, производимых различными компаниями. К этим кодам относятся 9, 10, 13, 14, 41, 42, 90, 91, 125, 126 и 127.

Modbus RTU

При использовании режима Modbus RTU сообщение начинается с так называемого интервала тишины, равного времени передачи 3.5 символов, при заданной скорости обмена. Первым полем передается адрес устройства. Вслед за последним передаваемым символом также следует интервал тишины продолжительностью не менее 3.5 символов. Новое сообщение может начинаться после этого интервала. Фрейм сообщения передаётся непрерывно. Если интервал тишины продолжительностью 1.5 возник во время передачи фрейма, принимающее устройство должно игнорировать этот фрейм как неполный. Если новое сообщение начнется раньше интервала 3.5 символа, принимающее устройство воспримет его как продолжение предыдущего сообщения. В этом случае устанавливается ошибка CRC (несовпадение контрольной суммы).

Типы данных и стандартные функции Modbus

Типы данных протокола Modbus представлены в таблице:

  Тип данных Тип доступа
Дискретные входы (Discrete Inputs) один бит только чтение
Регистры флагов (Coils) один бит чтение и запись
Регистры ввода (Input Registers) 16-битное слово только чтение
Регистры хранения (Holding Registers) 16-битное слово чтение и запись

Для чтения значений из этих выше таблиц данных используются функции с кодами 1—4 (0x01—0x04):
1 (0x01) — чтение значений из нескольких регистров флагов (Read Coil Status)
2 (0x02) — чтение значений из нескольких дискретных входов (Read Discrete Inputs)
3 (0x03) — чтение значений из нескольких регистров хранения (Read Holding Registers)
4 (0x04) — чтение значений из нескольких регистров ввода (Read Input Registers)

Запрос состоит из адреса первого элемента таблицы, значение которого требуется прочитать, и количества считываемых элементов. Адрес и количество данных задаются 16-битными числами, старший байт каждого из них передается первым.
В ответе передаются запрошенные данные. Количество байт данных зависит от количества запрошенных элементов. Перед данными передается один байт, значение которого равно количеству байт данных.

Запись одного значения происходит при помощи следующих функций:
5 (0x05) — запись значения одного флага (Force Single Coil)
6 (0x06) — запись значения в один регистр хранения (Preset Single Register)

 Команда состоит из адреса элемента (2 байта) и устанавливаемого значения (2 байта). Если команда выполнена успешно, ведомое устройство возвращает копию запроса.

Запись нескольких значений задается функциями:
15 (0x0F) — запись значений в несколько регистров флагов (Force Multiple Coils)
16 (0x10) — запись значений в несколько регистров хранения (Preset Multiple Registers)

Команда состоит из адреса элемента, количества изменяемых элементов, количества передаваемых байт устанавливаемых значений и самих устанавливаемых значений.  В ответе ведомый передает начальный адрес и количество изменённых элементов.

Пример устройства Modbus

Рассмотрим работу протокола на примере контроллера шагового двигателя. В документации на контроллер описано назначение регистров Modbus, которые в нем использованы. Для управления двигателем необходимо задать параметры контроллера, параметры вращения и непосредственно команду. Вся работа с контроллером при использовании протокола Модбас сводится к работе с регистрами, то есть чтению и записи. Наш контроллер имеет всего один тип регистров: Holding Registers. Этот тип регистров предназначен как для чтения, так и для записи параметров. В контроллере использовано три типа регистров: 8, 16 и 32 бита. Таким образом, для работы с ним нам понадобится использование всего лишь нескольких функций: Read Holding Registers для чтения, Preset Single Register для записи регистров размерностью 8 и 16 бит, и Preset Multiple Registers для записи дначений в регистры длиной 32 бита.

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

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

Таким образом, использование протокола Modbus позволило сделать управление шаговым двигателем очень простым, качественным и надежным.

Для отладки устройств с протоколом Modbus нами разработана программа OSM Modbus Terminal. Данная программа позволяет быстро освоить основные принципы управления устройствами OSM MB по протоколу Modbus RTU, проверить корректную работу устройства и быст­рее написать собственное программное обеспечение. Скачать программу можно в разделе Программное обеспечение на нашем сайте.

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

Для начала работы с программой необходимо установить адрес порта ПК и адрес устройства, и нажать кнопку «Connect». После этого можно производить чтение и запись в требуемые регистры. При необходимости можно сохранить названия и адреса используемых регистров кнопкой «Save». Программа написана с использованием OsmModbusDriver_SDK и может служить примером использования SDK.

Все права защищены. Перепечатка материалов с сайта возможно только с разрешения администрации

onitex.ru

Modbus протокол – как он устроен

В этой статье я попытаюсь рассказать как устроен протокол Modbus, какие данные он может  хранить, в каком виде они могут храниться, как они могут быть считаны. Эта статья даст представление о том, что же такое Modbus протокол и как он может применяться.

Адресация данных в Modbus протоколе

Для хранения информации в ведомых устройствах (slave device) используются 4 таблицы (или массива). Каждая таблица хранит информацию для схожих переменных в регистрах. Каждый регистр имеет свой размер и адрес. Так же регистры могут быть только для чтения, или для чтения – записи. Давайте рассмотрим эти 4 типа данных, которые можно хранить в регистрах:

COILS

Это цифровые выходы (Digital Outputs). Каждый coil можно записать или считать. Его размер – 1 бит (т.е. 0 или 1). Исторически эти регистры связаны с реальными цифровыми выходами на сенсорах или терминальных устройствах. Цифровые выходы используются для управления, например светодиодами, реле или моторами. Т.е. записывая в такой регистр 1 мы можем включить светодиод, а записав 0 – выключить его (это условно, на самом деле 0 может включать, а 1 – выключать).

При чтении данного регистра мы можем узнать состояние выхода (т.е. включен он или выключен). Результат чтения так же 1 бит, т.е. 1 или 0.

CONTACTS

Это цифровые входы (Digital Inputs). Цифровой вход можно только читать, т.е считывая данный регистр мы узнаем состояние реального цифрового входа на сенсоре или устройстве. Цифровые входы используются для контроля состояние – например, включен свет или выключен, достигла жидкость нужного уровня или нет, включено реле или нет, и т.д.

ANALOG INPUT REGISTERS

Под этим обычно имеются в виду аналоговые входы (Analog Inputs). Аналоговые входы можно только читать, т.е их нельзя записывать, а можно только считать текущее состояние налогового входа. Обычно аналоговые входы применяются на сенсорах для измерение некоторых значений: входного тока или входного напряжения. Затем, полученное значение можно конвертировать в некоторую реальную величину, например в температуру, влажность воздуха, давление или еще что то. Для этого используются специальные формулы, которые идут вместе с сенсором. Но чаще сенсор сразу возвращает реальное значение. Например, сенсор измеряющий температуру, может возвращать измеренное значение как градусы по Цельсию умноженные на 10. Т.е. 253 означает 25.3°С. Этот прием часто используется, если нужно вернуть дробные значения через целочисленный регистр.

Эти регистры 16 битные, т.е. каждый регистр может хранить всего 2 байта.

ANALOG OUTPUT HOLDING REGISTERS

Под этим обычно имеются в виду аналоговые выходы (Analog Outputs) но так же часто просто регистры, которые хранят некоторые значения, которые можно как записывать, так и считывать. Т.е. эти регистры можно как читать, так и писать. Наиболее часто используются для записи DAC устройств (Digital to Analog Converter) или просто как регистры, хранящие некоторые значения. DAC часто используются для управления чем либо, например: яркостью свечения светодиода, или громкостью сирены, или скоростью вращения двигателя.

Эти регистры 16 битные, т.е. каждый регистр может хранить всего 2 байта.

Вот эти четыре типа регистров поддерживаются в стандартном Modbus. И используя только их, нужно строить систему. Если взглянуть с точки зрения конечного устройства (slave device), то регистры логичнее всего использовать для следующих нужд:

Coils – для управления устройствами через цифровые порты вывода или булевыми флагами типа включен/выключен, открыт / закрыт и т.д.

Contacts – для хранения значений булевых флагов или для отображения информации с цифровых входов.

Inputs –для значений, которые нужно только читать на стороне мастера, и которые могут быть представлены как 16 битные целые числа. Например, входы ADC, или какие о значения, генерируемые системой  которые нужно читать (например количество запущенных процессов или внутренняя температура устройства может быть считана через некий Input регистр)

Holding – эти регистры можно использовать для хранения конфигурации устройства, для управления DAC устройствами, для хранения некоторой служебной информации. В принципе, эти регистры можно использовать для чего угодно, на что хватит фантазии разработчика системы.

Кроме того, каждый регистр в схеме Modbus может иметь уникальный адрес, который определяется типом регистра. Посмотрите таблицу ниже:

ИмяТип ДоступаАдресаДоступно Регистров
CoilsЧтение / Запись1 – 99999999
ContactsЧтение10001 – 199999999
InputsЧтение30001 – 399999999
HoldingsЧтение / Запись40001 – 499999999

 

Как видно из таблицы, каждый тип регистров может вмещать максимум 9999 регистров. Но все они начинаются  с некоторого смещения: 0, 10000, 30000, 40000.

На самом деле, внутри команд протокола Modbus, используется не полный адрес, а только его смещение относительно базового адреса. Т.е. для всех типов регистров реальный адрес внутри команды будет 0 -9998. А команда определяет какой именно базовый адрес может быть использован.

Проще всего представить себе, что устройство хранит 4 массива элементов по 9999 элементов в каждом. Индекс внутри массива – это и есть адрес, который задается внутри команды. А команда определяет, какой массив нужно использовать.

Если внимательно посмотреть на таблицу, то видно, что при желании можно использовать больше адресов для Holding регистров: 40001 – 105537, т.е. всего 65535 регистров. То же самое для Contacts: 10001 – 29999, т.е. всего 19999. Это так называемые расширенные регистры. Они не поддерживаются стандартными Modbus устройствами. Поэтому, если вы хотите, что бы ваше устройство могло работать со стандартными клиентами, то не нужно использовать расширенные регистры.

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

Выше мы разобрались, как адресуются регистры внутри устройства. Теперь посмотрим, как адресуются сами устройства.

Адресация Modbus устройств

Для адресации устройств используется специальный идентификатор, который называется Slave Id. Это однобайтное значение, которое определяет уникальный адрес устройства на всей сети Modbus. По стандарту Modbus это может быть число от 1 до 247. Т.е. всего в сети может находиться 247 конечных устройств (slave device) с уникальными адресами.

Когда мастер посылает команду в сеть, первый байт – это Slave Id. Это позволяет устройствам уже после первого байта определить, должны они обрабатывать команду, или могут ее проигнорировать. Это справедливо для Modbus RTU. Для Modbus TCP протокола используется Unit Id значение. Хотя если разобраться, это просто другое название Slave Id. Unit Id – это так же однобайтный адрес устройства, от 1 до 247.

Это очень сильно ограничивает количество устройств, которые одновременно могут находиться в сети. Поэтому есть вариант, когда используется 2 байта для адресации устройств. В таком случае количество устройств увеличивается до 65535. Этого более чем достаточно. Но есть одно условие. Мастер и Конечное устройство должны использовать 2 байте для адресации. Т.е. они должны быть настроены, что бы использовать одинаковую схему адресации устройств: 1 или 2 байта. Так же, все устройства в сети должны использовать ту же самую схему адресации – 1 или 2 байта. Не может быть в сети устройств с разной схемой адресации.

Функции Modbus

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

Код ФункцииТип ДействияОписание
01 (01 hex)ЧтениеЧитает значение Coil регистра
02 (02 hex)ЧтениеЧитает значение Contact регистра
03 (03 hex)ЧтениеЧитает значение Holding регистра
04 (04 hex)ЧтениеЧитает значение Input регистра
05 (05 hex)Запись одного регистраЗаписывает значение в Coil регистр
06 (06 hex)Запись одного регистраЗаписывает значение в Holding регистр
15 (0F hex)Запись нескольких регистровЗаписывает значение в несколько Coil регистров
16 (10 hex)Запись нескольких регистровЗаписывает значение в несколько Holding регистров

 

Каждая функция будет рассмотрена позже, подробно и с примерами.

CRC16 как способ избежать ошибок

Каждая команда в Modbus RTU протоколе заканчивается двумя байтами, которые содержать CRC16 значение всех байт команды. Добавление CRC16 позволяет найти поврежденные запросы и игнорировать их. Так как для вычисления контрольной суммы используется каждый байт в команде, то даже изменение одного бита в любом байте вызовет расхождение в переданной контрольной сумме и вычисленной на основе полученных байт. Это достаточно надежный способ обезопасить передаваемые данные от повреждений (имеется в виду, найти поврежденные данные). Клиент, как и мастер, должны проверять CRC16 из полученной команды с CRC16 сгенерированным на основе полученных байт. Если контрольные суммы не совпадают, значит полученный запрос содержит поврежденные байты, что искажает смысл посланной команды. Такая команда должна быть проигнорирована.

Нужно заметить, CRC16 не используется в Modbus TCP протоколе. Так как TCP пакеты уже имеют свою встроенную контрольную сумму и проверяются на целостность данных, нет никакой необходимости для вычисления CRC16.

Еще в одной разновидности Modbus протокола, Modbus ASCII, используется LRC (Longitudinal Redundancy Check) вместо CRC16. LRC намного проще чем CRC16 и результатом является 1 байт. LRC менее надежно для детектирования ошибок повреждения данных, но исторически так сложилось что Modbus ASCII использует именно этот метод.

О том, как вычислять CRC16 для Modbus RTU протокола и LRC для Modbus ASCII протокола, я напишу отдельно.

Типы данных, которые хранятся в регистрах.

Поговорим о том, какие данные могут храниться в регистрах. Самый простой случай – это Coil и Contac регистры. В этих регистрах может храниться 1 бит информации – 0 или 1. Когда мастер читает эти регистры, он получает в результате 0 или 1. Для записи регистров используются специальные константы:

0xFF00 – означает логическую 1

0x0000 – означает логический 0

Если используется команда для записи нескольких регистров, то каждый регистр будет записан при помощи 1 бита: 0 или 1.

Все остальные регистры – это 16 битные данные (2 байта)

И вот тут самое интересное.

Интерпретация данных должна быть задана в описании Modbus регистров (так называемом Modbus Map документе). В этом документе нужно точно прописать, какой регистр хранит какие джанные, и какие значение для него приемлемы.

Начнём с простых случаев.

Если мы считываем 1 Input или Holding регистр, то мы получаем 16 бит данных. Например, это может быть значение 0x8D05 – два байта 0x8D и 0x05.

В самом простом случае это может быть без знаковое целое значение: 36101

Но это может быть целое число со знаком: -29435

Другой пример. Мы прочитали значение 0x4D4F

Это может быть как целое без знака, целое со знаком, так и 2 символа в кодировке ASCII:

0x4D = M

0x4F = O

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

К примеру, мы прочитали 2 регистра, и получили следующие данные: 0xAE53 0x544D

Это может быть:

32 битное целое без знака

0xAE53 0x544D = 2924696653

32 битное целое со знаком

0xAE53 0x544D = -1370270643

32 битный float – число с плавающей точкой

0xAE53 0x544D = -4.80507e-11

Или хранить 4 символа в кодировке ASCII

0xAE53 0x544D = 0xAE 0x53 0x54 0x4D = ®STM

Если продолжать, то комбинируя больше регистров, можно хранить 64 битные значения, 128 битные значения, строки и в принципе любые типы данных.

Но, комбинируя регистры, у нас встает следующий вопрос:

Порядок байт и слов

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

Например, читая регистр, мы получили значение 0xA543

В зависимости от того, в каком порядке хранились байты в исходном регистре, это могут быть два абсолютно разных значения:

Если использовался Big Endian формат (старший байт первый), то у нас будет значение 42307

Но если использовался Little Endian формат (младший байт первым), то у нас будет значение 17317

Еще интереснее, когда мы формируем 32 битное значение из двух регистров.

Вариантов комбинации байтов становится 4. К примеру 32 битное число 4014323619 (0xEF45B7A3) может быть передано 4 следующими последовательностями байтов:

0xEF45 0xB7A3

0x45EF 0x A3B7

0xB7A3 0xEF45

0x A3B7 0x45EF

На самом деле это не важно, какой порядок байт / слов реализован на конечном устройстве. Главное, мастер должен знать этот порядок, и уметь формировать правильные значения из полученных байтов. Зная точный формат данных на конечном устройстве, мастер всегда будет правильно формировать значения регистров. И именно для этого существует такое понятие как Modbus Map (Карта Modbus).

Modbus Map

Modbus Map – это документация, которая полностью описывает все возможные Modbus регистры на устройстве, их адреса, назначение, доступные значения, значения по умолчанию, способ доступа.

Некоторые устройства поставляются с фиксированным описанием регистров. Т.е. список регистров, их адресов, хранимых данных и т.д. жестко задан производителем и описан в документации.

А есть настраиваемая конфигурация. Т.е. на устройстве нет фиксированных адресов для регистров. Пользователь может сконфигурировать Modbus Map так, как ему нужно (например соединив некоторые регистры в непрерывную последовательность адресов, что бы считывать их одной командой).

Пример фиксированного Modbus Map, который имеет смысл применять для своих устройств , может выглядеть так, как в таблице ниже.

АдресОписаниеДоступЗначение по умолчаниюДоступные значения
40001Код продуктаЧтение11
40002Командный регистр, для записи командЗапись0 – сброс устройства
1 – Разблокировать uSD карту для записи
2 – Заблокировать uSD карту для записи
3 – Созранить конфигурацию на uSD карту
40003Время работы, в секундах
Младшее слово
Чтение00 .. 0xFFFF
40004Время работы, в секундах
Старшее слово
Чтение00 .. 0xFFFF
40005Системная ошибкаЧтение / Запись0Смотри приложение с кодами ошибок.
Запись 0 для сброса ошибки и выключения ERROR LED

Чего не может Modbus

Modbus очень простой протокол, поэтому он поддерживает далеко не все, что может потребоваться.

Modbus не поддерживает сообщения (events). Т.е. конечное устройство не может послать сообщение мастеру. Только мастер может опросить конечное устройство.

Modbus не поддерживает чтение исторических данных (накопленных за некоторый промежуток времени). Хотя это ограничение можно легко обойти, создав командные регистры, регистры адреса и перегружаемые регистры. Это будет обсуждаться в одной из следующих статей.

Стандартный Modbus не может хранить сложные структурированные данные (по крайней мере это не так просто реализовать).

Кроме того, Modbus не поддерживает идентификации и шифрования. Т.е вся коммуникация идет в незащищённом режиме. Хотя, при некотором желании можно реализовать некоторое подобие идентификации в Modbus TCP в большинстве случаев это сделать невозможно. Есть некоторые варианты как защитить данные от несанкционированного доступа и изменения, но они все не очень надежные (хотя и могут применятся). Я опишу их в следующих статьях.

И кажется, это все явные недостатки для этого протокола. В остальном он очень прост и отлично подходит для простых систем мониторинга, которые должны следить за некоторыми показателями системы и предоставлять доступ к ним через чтение регистров.

В следующей статье мы рассмотрим все основные функции, которые поддерживаются протоколом Modbus.

www.siv-blog.com