Что такое Modbus?
Modbus – это протокол последовательной передачи данных, разработанный компанией Modicon®, опубликованный в 1979 году, для использования в программируемых логических контроллерах (ПЛК). Проще говоря, это метод передачи информации по последовательным линиям между электронными устройствами. Устройство, запрашивающее информацию, называется Modbus Client, а устройства, передающие информацию, – Modbus Servers. В стандартной сети Modbus имеется один клиент и до 247 серверов, каждый из которых имеет уникальный адрес сервера от 1 до 247. Клиент также может записывать информацию на серверы.
Официальную спецификацию Modbus можно найти на сайте http://www.modbus.org/.
Для чего он используется?
Modbus – это открытый протокол, что означает, что производители могут свободно встраивать его в свое оборудование, не выплачивая роялти. Он стал стандартным протоколом связи в промышленности и в настоящее время является наиболее распространенным средством подключения промышленных электронных устройств. Он широко используется многими производителями во многих отраслях промышленности. Modbus обычно используется для передачи сигналов от приборов и устройств управления обратно к главному контроллеру или системе сбора данных, например, системе, которая измеряет температуру и влажность и передает результаты на компьютер. Modbus часто используется для соединения контролирующего компьютера с удаленным терминальным устройством (RTU) в системах диспетчерского управления и сбора данных (SCADA). Существуют версии протокола Modbus для последовательных линий (Modbus RTU и Modbus ASCII) и для Ethernet (Modbus TCP).
Как он работает?
Modbus передается по последовательным линиям между устройствами. В самом простом варианте один последовательный кабель соединяет последовательные порты двух устройств – клиента и сервера.
Данные передаются в виде серии единиц и нулей, называемых битами. Каждый бит передается в виде напряжения. Нули передаются как положительное напряжение, а единицы – как отрицательное. Биты передаются очень быстро. Типичная скорость передачи данных – 9600 бод (бит в секунду).
Что такое шестнадцатеричная система?
При устранении неполадок бывает полезно увидеть фактические передаваемые данные. Длинные строки из единиц и нулей трудно читать, поэтому биты объединяются и отображаются в шестнадцатеричном виде. Каждый блок из 4 битов представлен одним из шестнадцати символов от 0 до F.
Как хранятся данные в стандартном Modbus?
Информация хранится в устройстве Server в четырех различных таблицах. В двух таблицах хранятся дискретные значения включения/выключения (катушки), а в двух – числовые значения (регистры). Катушки и регистры имеют по таблице только для чтения и для записи. В каждой таблице 9999 значений. Каждая катушка или контакт – это 1 бит, которому присвоен адрес данных от 0000 до 270E. Каждый регистр представляет собой 1 слово = 16 бит = 2 байта и также имеет адрес данных в диапазоне от 0000 до 270E.
Номера катушек/регистров можно рассматривать как имена местоположений, поскольку они не отображаются в фактических сообщениях. В сообщениях используются адреса данных. Например, первый регистр холдинга, номер 40001, имеет адрес данных 0000. Разница между этими двумя значениями – это смещение. Каждая таблица имеет свое смещение. 1, 10001, 30001 и 40001.
Что такое идентификатор(ID) сервера?
Каждому серверу в сети присваивается уникальный адрес устройства от 1 до 247. Когда клиент запрашивает данные, первым байтом, который он отправляет, является адрес сервера. Таким образом, после первого байта каждый сервер знает, игнорировать сообщение или нет.
Что такое код функции?
Второй байт, отправленный клиентом, – это код функции. Это число сообщает серверу, к какой таблице обращаться и читать ли из нее или записывать в нее.
Что такое CRC?
CRC расшифровывается как Cyclic Redundancy Check. Это два байта, добавляемые в конец каждого сообщения modbus для обнаружения ошибок. Каждый байт сообщения используется для вычисления CRC. Принимающее устройство также вычисляет CRC и сравнивает его с CRC от отправляющего устройства. Если хотя бы один бит в сообщении будет получен неправильно, CRC будут отличаться, что приведет к ошибке. .
Каковы форматы команд и ответов Modbus?
Что такое типы данных?
Пример для FC03 показывает, что регистр 40108 содержит AE41, который преобразуется в 16 бит 1010 1110 0100 0001 Отлично! Но что это значит? Ну, это может означать несколько вещей. Регистр 40108 может быть определен как любой из этих 16-битных типов данных:
16-битное беззнаковое целое число (целое число от 0 до 65535) в регистре 40108 содержит AE41 = 44,609 (шестнадцатеричное преобразование в десятичное)
16-битное знаковое целое число (целое число от -32768 до 32767) AE41 = -20,927 (преобразование шестнадцатеричного числа в десятичное, если оно больше 32767, то вычитаем 65536)
Двухсимвольная строка ASCII (2 печатные буквы) AE41 = ® A
Дискретное значение включения/выключения (это работает так же, как 16-битные целые числа со значением 0 или 1. Шестнадцатеричные данные будут 0000 или 0001) Регистр 40108 также может быть объединен с регистром
40109, чтобы сформировать любой из этих 32-битных типов данных:
32-битное беззнаковое целое число (число от 0 до 4 294 967 295) 40108,40109 = AE41 5652 = 2 923 517 522
32-битное знаковое целое число (число от -2,147,483,648 до 2,147,483,647) AE41 5652 = -1,371,449,774
32-битное число двойной точности IEEE с плавающей точкой. Это математическая формула, которая позволяет любое вещественное число (число с десятичными точками) представить 32 битами с точностью до семи цифр. AE41 5652 = -4.395978 E-11 Вот таблица калькулятора IEEE с плавающей точкой для ввода 4 байт или 2 слов. Чтобы загрузить копию, щелкните правой кнопкой мыши и выберите Save Target As…
Четырехсимвольная строка ASCII (4 печатные буквы) AE41 5652 = ® A V R Для формирования более длинных строк ASCII можно объединить больше регистров. Каждый регистр используется для хранения двух символов ASCII (два байта).
Что такое порядок следования байтов и слов?
Спецификация Modbus не определяет, как именно данные хранятся в регистрах. Поэтому некоторые производители реализовали в своем оборудовании Modbus так, что сначала хранится и передается старший байт, а затем младший. (AE перед 41). Другие же хранят и передают сначала младший байт (41 перед AE). Аналогично, когда регистры объединяются для представления 32-битных типов данных, некоторые устройства хранят старшие 16 бит (старшее слово) в первом регистре, а оставшееся младшее слово – во втором (AE41 перед 5652), а другие делают наоборот (5652 перед AE41) Не имеет значения, в каком порядке передаются байты или слова, если принимающее устройство знает, в каком направлении их ожидать. Например, если число 29,235,175,522 должно быть отправлено как 32-битное беззнаковое целое, оно может быть оформлено одним из этих четырех способов.
AE41 5652 старший байт первый старший байт первое слово
5652 AE41 старший байт первый младший слово первый
41AE 5256 младший байт первый старший слово первый
5256 41AE младший байт первый младший слово первый
Что такое карта Modbus адресов?
Карта modbus – это просто список для отдельного серверного устройства, который определяет – что это за данные (например, показания давления или температуры)
- где хранятся данные (какие таблицы и адреса данных)
- как хранятся данные (типы данных, порядок следования байтов и слов)
Некоторые устройства имеют фиксированную карту, заданную производителем. Другие устройства позволяют оператору настроить или запрограммировать индивидуальную карту в соответствии со своими потребностями.
В чем разница между Modbus ASCII и Modbus RTU?
Modbus RTU и Modbus ASCII используют один и тот же протокол. Единственное различие заключается в том, что байты, передаваемые по проводам, представляются в двоичном виде в RTU и в виде читаемого ASCII в Modbus RTU. Важно отметить, что в RTU-сообщениях отсутствует индикация Start_of_text. Принимающая сторона использует время “молчания”, чтобы определить начало нового сообщения. В ASCII есть признак начала текста. Двоичные сообщения короче, чем ASCII, и поэтому теоретически быстрее передаются/принимаются. Возможно, вас устроит скорость обновления около 100 мс в вашей HMI/SCADA, и вы можете выбрать любой из вариантов передачи данных.
Вывод:
- использовать RTU возможно
- используйте ASCII в случае, если RTU дает проблемы с тайм-аутом на WinNT или при использовании медленных средств связи, таких как 300 бит/с или dialup-модемы Большинство OPC-серверов для Modbus поддерживают ASCII, а также RTU-коммуникации.
Что такое расширенные адреса регистров?
Поскольку диапазон регистров удержания аналогового выхода составляет от 40001 до 49999, это означает, что регистров не может быть больше 9999. Хотя этого обычно достаточно для большинства приложений, есть случаи, когда большее количество регистров было бы полезно. Регистры с 40001 по 49999 соответствуют адресам данных с 0000 по 270E. Если использовать оставшиеся адреса данных от 270F до FFFF, то можно получить в шесть раз больше регистров, всего 65536. Это соответствует номерам регистров от 40001 до 105536. Многие программные драйверы modbus (для клиентских ПК) были написаны с учетом ограничений от 40001 до 49999 и не могут получить доступ к расширенным регистрам в серверных устройствах. А многие серверные устройства не поддерживают карты, использующие расширенные регистры. Но, с другой стороны, некоторые серверные устройства поддерживают эти регистры, и некоторые клиентские программы могут получить к ним доступ, особенно если написано пользовательское программное обеспечение.
Как работает 2-байтовая адресация сервера?
Поскольку для определения адреса сервера обычно используется один байт, а каждый сервер в сети требует уникального адреса, количество серверов в сети ограничено 256. Предел, определенный в спецификации modbus, еще ниже – 247. Чтобы выйти за пределы этого ограничения, можно внести изменения в протокол и использовать два байта для адреса. Клиент и серверы должны будут поддерживать эту модификацию. Двухбайтовая адресация расширяет ограничение на количество серверов в сети до 65535. По умолчанию программное обеспечение Simply Modbus использует 1-байтовую адресацию. При вводе адреса, превышающего 255, программа автоматически переключается на 2-байтовую адресацию и остается в этом режиме для всех адресов, пока 2-байтовая адресация не будет отключена вручную.