MODBUS протокол (рус)-> Modbus RTU/ASCII (рус) -> Modbus/TCP(рус)-> Modbus проетктирование
6. Сети MODBUS
MODBUS разработан в 1979 р. фимой Modicon Gould (сейчас в составе Schneider Electric). Это один из самых первых и самых популярных протоколов промышленной сети на сегодняшний день. Омнованя причина такой популярности – это простота в реализации. Даный раздел посвящен сетям, базирующимся на протоколе прикладного уровня MODBUS. В настоящее время MODBUS поддерживает и развивает организация MODBUS-IDA, которая представляет собой группу независимых потребителей и поставщиков устройств автоматизации. Она обеспечивает открытость данного протокола и разрабатывает готовые компоненты для упрощения реализации. Будем рассматривать MODBUS таким, каким он существует в настоящее время в стандартах MODBUS-IDA. Одна из реализаций протокола - MODBUS TCP / IP вошла в стандарты МЭК IEC 61158-5-15, IEC 61158-6-15 и IEC 61784-2 как 15-й тип. Учитывая особенности реализации сетей базирующихся на MODBUS, и описания его в МЭК только на прикладном уровне, целесообразно рассматривать его в контексте модели OSI а не МЭК.
6.1. Сети MODBUS в контексте модели OSI Согласно стандартам MODBUS-IDA - MODBUS является протоколом прикладного уровня для связи типа Клиент-Сервер между прикладными Процессами устройств, которые подключены к различным типам шин или сетей. В контексте OSI-модели, эти сети имеют архитектуру, показанную на рис.6.1.
Как видно из рисунка, MODBUS в настоящее время представлен 4-мя сетями: MODBUS RTU, MODBUS ASCII, MODBUS Plus и MODBUS TCP / IP. Первые реализации MODBUS базировались на последовательных интерфейсах с двумя режимами передачи RTU и ASCII, но с развитием компьютерных сетей и их интеграции с промышленными сетями протокол MODBUS адаптировали к использованию в сетях, базирующихся на TCP / IP. MODBUS Plus в основном используется в устройствах Schneider Electric, поэтому рассматривать его не будем.
6.2. Реализация MODBUS на прикладном уровне 6.2.1. Формат MODBUS PDU MODBUS Application Protocol (MBAP MODBUS протокол прикладного уровня) базируется на модели клиент-серверного обмена сообщениями, и определяет формат сообщений MODBUS PDU (Protocol Data Unit), которые имеют вид, приведенный на рис.6.2
![]() Клиентский прикладной Процесс отправляет сообщение-запрос к серверному Процессу, в котором в поле "код функции" указывает ему на необходимое действие. Байты данных содержат информацию, необходимую для выполнения данной функции. Серверный прикладной Процесс, в случае удачного выполнения этой функции, повторяет код функции в ответе (если запрос предполагает ответ). При возникновении ошибки, код функции в ответе модифицируется (старший бит выставляется в 1), а в байтах данных передается причина ошибки. То есть, если при исполнении Процессом-Сервером клиентского сообщения-запроса с функцией 0316 (000000112) возникла ошибка, тот он отошлет Приложению-Клиенту ответ с полем функции равным 8316 (100000112). В дополнении к изменению кода функции, при ошибке, Сервер размещает в поле данных уникальный код, который указывает на тип и причину ошибки. Код функции представляет собой поле с одного байта, которое может принимать значения от 1 до 255 (коды 128-255 зарезервированы под коды сообщений-ответов при ошибочных действиях). Все коды функций в MBAP делятся на (см. рис.6.3): - Public Function Codes - это публичные коды, описанные в стандарте MODBUS-IDA; их список включает уже назначенные и используемые коды, а также коды для будущего использования; - User-Defined Function Codes (65-72, 100-110) - это коды, которые могут использоваться компаниями для собственных функций, и не описаны в спецификации; - Reserved Function Codes (9, 10, 13, 14, 41, 42, 43, 90, 91, 125, 126 и 127) - это зарезервированы коды, которые не доступны для общего использования. Ниже расписаны только те функции, которые предназначены для доступа к данным процесса. Эти данные, с точки зрения MODBUS функций делятся на: - Discrete Inputs: дискретные входы, только для чтения; - Coils: катушки, внутренние биты или дискретные выходы, чтение/запись; - Input Registers: входные 16-битные переменные, только чтение; - Holding Registers: внутренние/выходные 16-битные переменные, чтение/запись. В сообщении-запросе после поля кода функции могут следовать данные, уточняющие или дополняющие функцию вспомогательными данными. Это могут быть адреса переменных, их количество, счетчик байтов данных и сами данные для записи. Для определенных функций, поле данных может отсутствовать вообще. Максимальная длина сообщения прикладного уровня равна 253. 6.2.2. Формат основных функций Полный список кодов, а также спецификацию протокола можно найти на официальном Веб сайте MODBUS-IDA - www.MODBUS.org. В пособии детально рассмотрим только наиболее употребительные функции MODBUS – для обмена данными процесса. Номер функции дается в шестнадцатеричном формате. Сокращения в скобках Hi и Lo указывают соответственно на старший и младший байты. То есть, если для указания адреса исходной переменной необходимо двухбайтовое слово, значение старшего байта будет передаваться в поле с обозначением Hi, а младшего - соответственно Lo. 6.2.2.1. Код функции 0116 - чтение статуса Coils (дискретных выходных битов). Сообщение-запрос содержит адрес начального бита и количество битов для чтения. Биты нумеруются начиная с 0. В сообщении-ответе каждое значение переменной передается одним битом, то есть в одном байте пакуется статус 8 битов переменных. Если количество их не кратно восьми, остальные биты в байте заполняются нулями. Счетчик вмещает количество байт в поле данных. Запрос:
Ответ.
6.2.2. Код функции 0216 - чтение статуса дискретных входов. Формат данного запроса такой же как предыдущего, за исключением поля функции. 6.2.2.3. Код функции 0316 - чтение значения выходных/внутренних регистров. Сообщение-запрос содержит адрес начального исходного/внутреннего регистра (двухбайтовое слово), и количество регистров для чтения. Регистры нумеруются начиная с 0. Запрос.
Ответ.
В ответном сообщении в поле данных каждый регистр передается двумя байтами. 6.2.2.4. Код функции 0416 - чтение значения входных регистров. Формат этого типа запроса такой же, как у предыдущего, за исключением поля функции. 6.2.2.5. Код функции 0516 - запись выходного/внутреннего бита. В запросе указывается номер битовой переменной и ее значение: лог. "0" - 0000, а лог."1" - FF00, все остальные значения не меняют состояние переменной. В широковещательной передаче клиентский запрос выставляет значение данной переменной для всех Серверов.
Нормальный ответ сервера является повторением запроса клиента. 6.2.2.6. Код функции 0616 - запись выходного/внутреннего регистра. Функция аналогична предыдущей, но оперирует с регистрами (словами). В запросе указывается номер выходного/внутреннего регистра и его значение. В широковещательной передаче запрос выставляет значение данной переменной для всех серверов.
Нормальный ответ Сервера является повторением клиентского запроса. 6.2.2.7. Код функции 0F16 - запись нескольких выходных/внутренних битов. В запросе указывается начальный адрес бита, количество бит для записи, счетчик байтов и непосредственно значения. При широковещательной передаче биты записываются всем Серверам. Рассмотрим пример для установки следующих битовых выходных/внутренних переменных:
В таблице показано соответствие адреса переменной, начиная с 19-й, и значение бита. Для удобства биты размещены в том порядке, что и передаются. Во втором байте полезные только 2 первых бита, значение других не будет принято во внимание, поскольку количество битов указаны в кадре. Запрос и ответ будут иметь такой вид: Запрос.
Ответ.
6.2.2.8. Код функции 1016 − запись нескольких выходных/внутренних регистров. Запрос:
Ответ:
6.2.2.9. Сообщения об ошибках. Эти сообщения касаются всех типов MODBUS, но изначально были определены для MODBUS Serial (RTU / ASCII). При запросе Клиента к Серверу, могут иметь место следующие ситуации: - если Сервер принял запрос без коммуникационных ошибок и может нормально распознать запрос, он возвращает нормальный ответ; - если Сервер не принял запрос, ответ не возвращается. Клиент ожидает ответа в течение определенного времени ожидания; - если Ведомый (для MODBUS Serial) принял кадр, но нашел коммуникационную ошибку (паритет, ошибка контрольной суммы), то кадр-ответ не возвращается, и Ведущий ждет ответа на запрос в течение определенного тайм-аута; - если Сервер принял запрос без коммуникационной ошибки, но не может выполнить заказанную функцию (например, чтение не существующих выходов или регистров), Сервер возвращает сообщение об ошибке и ее причины. Сообщение об ошибке содержит два поля, которые отличаются от полей нормального ответа: ПОЛЕ КОДА ФУНКЦИИ: при нормальном ответе Сервер возвращает в этом поле тот номер функции, в которой нуждался Клиент. Во всех кодах функции старший бит установлен в 0. При возврате сообщений об ошибке, Сервер устанавливает этот бит в 1. ПОЛЕ ДАННЫХ: В этом поле возвращается код ошибки. Таблица 6.1 Список кодов
Пример 6.1. MODBUS. Запрос на чтение статуса выходных битов. Задача. Сформировать сообщение-запрос и сообщение-ответ на чтение выходных/внутренних битов с 20 по 39 при: обработке без ошибок; обработке с ошибкой ILLEGAL DATA ADDRESS. Решение. Формат сообщений показан на рис.6.4. Следует отметить, что 1-й бит в адресном пространстве MODBUS опрашивается под номером 0. Поэтому 20-й бит считывается под номером 19. Подробнее читайте в 6.2.3. Пример 6.2. MODBUS. Запрос на чтение значения выходных/внутренних регистров. Задача. Сформировать сообщение-запрос и сообщение-ответ на чтение выходных/внутренних регистров с 108-го по 110-й при положительной обработке запроса сервером. Решение. Формат сообщений показан на рис.6.5. Как и в предыдущем случае 108-й регистр в запросе указывается под номером 107 (6В16).
6.2.3. Адресная модель MODBUS и доступ к данным Все переменные, к которым обращается клиентский прикладной Процесс являются частью области памяти устройства. Однако физические адреса этих переменных могут не совпадать с теми, к которым он обращается по протоколу. Главное, чтобы эти переменные были отображением (mapping) действительных данных в устройстве. На рис.6.6 показан процесс обработки запросов на Сервере MODBUS. Как видно из рисунка, при обращении к определенной переменной по ее номеру, например на чтение, по сути, идет обращение к определенной области данных в прикладной программе устройства. Связь данных MODBUS модели с физическими данными называют отображением (mapping). Рис.6.6. Адресная модель MODBUS Следует отметить, что минимальный адрес элемента данных модели MODBUS равен 1 а не 0.
Такое разграничение между физической структурой данных и MODBUS моделью данных позволяет адаптировать протокол под структуру различных устройств. Например, в стандарте приводятся два популярные способы реализации MODBUS модели данных: разделение данных по блокам (рис.6.7) и использования доступа к данным одного и того же блока (рис.6.8). Как видно из рисунков модель данных с единым блоком дает доступ к одним и тем же физическим данным. То есть, области Input и Holding регистров совпадают, а области Digital Inputs и Coils тоже совпадают и находятся в области регистров. Рис.6.7. Модель данных MODBUS с разделенными блоками
Рис.6.8. Модель данных MODBUS с единым блоком
Пример 6.3. MODBUS. Модель данных для различных типов устройств. Задача. Показать отображения данных модели MODBUS на адресное пространство Momentum/Quantum (Schneider Electric), Micro/Premium/M340/Twido (Schneider Electric), Vipa CPU-21xSER1 (VIPA), Vipa IM-253NET (VIPA). Решение. Для контроллеров Schneider Electric ветви Modicon то есть Momentum и Quantum, MODBUS - это родной протокол, поэтому модель данных MODBUS абсолютно совпадает с моделью их адресного пространства. Нумерация переменных начинается с 1-й (0-ный номер в запросе обращается к 1-й переменной) Для контроллеров Micro/Premium, которые влились в Schneider Electric под брендом Telemechanique, а также M340 и Twido, доступ предоставляется только к внутренним переменным (M - Memory), поэтому разницы между входящими и выходящими битами так же как и входящими и выходящими регистрами нет, однако битная область не совпадает с регистровой. Т.е. Серверы MODBUS этих ПЛК будут одинаково реагировать скажем на функции 01 и 02, или 03 и 04. Нумерация переменных начинается с 0-й (0-ный номер в запросе обращается к 0-й переменной, т.е.%M0-бит, или %MW0 - регистр). Таким образом общая таблица отображения данных для различных ПЛК от Schneider Electric имеет следующий вид:
Для Siemens-подобных контроллеров VIPA сети MODBUS не являются наиболее употребляемыми. Тем не менее, VIPA выпускает номенклатуру модулей с поддержкой данного протокола. В частности, в процессорных модулях типа Vipa CPU-21xSER1, имеется встроенный последовательный порт с поддержкой MODBUS Serial (RTU/ASCII) как в режиме Ведущего так и ведомого. Модуль представляет сторону Сервера MODBUS в режиме Ведомого (объяснение смотри в MODBUS Serial), поэтому именно в этом режиме рассматривается отображение данных модели MODBUS. При конфигурации последовательного порта CPU-21xSER1, задается его режим (MODBUS Slave). Далее, весь обмен проходит через входные и выходные буферы (рис.6.9), которые прикладная программа должна обновлять самостоятельно. Однако буферов всего два, и следовательно битовые переменные находятся в памяти регистровых, т.е. входные – в области входных регистров, выходные – в области выходных регистров (см.рис.6.10). Следует отметить, что буферы являются внутренней памятью коммуникационного порта, а не самого ПЛК. Для отображения буферов на области памяти ПЛК, в коммуникационных функциях SEND и RECEIVE указывается необходимая область памяти (удобнее пользоваться DB-областью). Необходимо также помнить, что адресация данных в сетевых буферах проходит по словам, а со стороны программы к отображаемым данным ПЛК (например DB) - по байтам.
![]() Рис.6.9. Обмен данными MODBUS в ПЛК VIPA CPU-21xSER1
Рис.6.10. Отображение переменных у входном и выходном буферах для ПЛК VIPA Интерфейсный модуль Vipa IM-253NET (VIPA) для построения распределенных систем ввода/вывода на базе Ethernet поддерживает MODBUS TCP/IP, то есть может быть Сервером MODBUS (Клиентом быть не может). Доступ к входам и выходам системы на базе интерфейсного модуля происходит аналогично, как показано на рис.6.10. Буфер IN возобновляется модулем автоматически, а выходы ПЛК автоматически восстанавливаются данным из буфера OUT. MODBUS протокол (рус)-> Modbus RTU/ASCII (рус) -> Modbus/TCP(рус) Оставить комментарии Вы можете здесь http://pupena-san.blogspot.com |
Сети >