CANNY 7, Драйвер UART - RS232 - Modbus — различия между версиями

Материал из CANNY Wiki
Перейти к: навигация, поиск
[непроверенная версия][отпатрулированная версия]
(http://female-happiness.com)
(Общее описание)
 
(не показано 13 промежуточных версий 8 участников)
Строка 7: Строка 7:
  
 
Реализация протокола '''[https://ru.wikipedia.org/wiki/RS-232 RS-232]''' в контроллерах CANNY7, при использовании обоих каналов UART данных, позволяет организовать обмен данными с другим RS-232 устройством в дуплексном режиме, т.е. по одному каналу выполнять отправку данных, а по другому одновременно осуществлять прием данных.
 
Реализация протокола '''[https://ru.wikipedia.org/wiki/RS-232 RS-232]''' в контроллерах CANNY7, при использовании обоих каналов UART данных, позволяет организовать обмен данными с другим RS-232 устройством в дуплексном режиме, т.е. по одному каналу выполнять отправку данных, а по другому одновременно осуществлять прием данных.
 +
 +
{|
 +
|valign="top" style="padding-left:0.5em;"|''Примечание:''
 +
|valign="top" style="padding-left:0.5em;"|''Для корректной работы в режиме RS-232, в зависимости от особенностей внешнего, сопрягаемого с контроллером устройства, может потребоваться внешняя подтяжка канала TX к +12В с помощью резистора ~10кОм.''
 +
|}
  
 
Протокол '''[https://ru.wikipedia.org/wiki/Modbus Modbus]''' в контроллерах CANNY7 реализуется как поверх UART, так и поверх RS-232. В качестве ADU (Application Data Unit) используется компактный двоичный вариант - Modbus RTU. Проверка целостности данных осуществляется с помощью автоматически рассчитываемой контрольной суммы (CRC). Размер пакета ограничен 32 байтами включая CRC.
 
Протокол '''[https://ru.wikipedia.org/wiki/Modbus Modbus]''' в контроллерах CANNY7 реализуется как поверх UART, так и поверх RS-232. В качестве ADU (Application Data Unit) используется компактный двоичный вариант - Modbus RTU. Проверка целостности данных осуществляется с помощью автоматически рассчитываемой контрольной суммы (CRC). Размер пакета ограничен 32 байтами включая CRC.
Строка 22: Строка 27:
 
Драйвер UART / RS232 / Modbus в своей работе использует ресурсы каналов контроллера, но имеет более высокий приоритет чем драйвер дискретного ввода-вывода. Таким образом, при активации драйвера UART / RS232 / Modbus, для задействованных в его работе каналов, изменение значений в связанных с ними регистрах драйвера дискретного ввода-вывода будет проигнорировано контроллером.
 
Драйвер UART / RS232 / Modbus в своей работе использует ресурсы каналов контроллера, но имеет более высокий приоритет чем драйвер дискретного ввода-вывода. Таким образом, при активации драйвера UART / RS232 / Modbus, для задействованных в его работе каналов, изменение значений в связанных с ними регистрах драйвера дискретного ввода-вывода будет проигнорировано контроллером.
  
http://female-happiness.com
+
== Регистры драйвера ==
  
http://female-happiness.com
+
Ниже приведено описание допустимых и возвращаемых значений регистров управления работой драйвера.
 +
 
 +
Регистры конфигурации драйвера UART / RS-232 / Modbus.
 +
{|border="1" style="border-collapse:collapse;" align="left" width="100%"
 +
|- align="center" valign="top"
 +
!width="250px"|Регистр
 +
!Ожидаемые значения
 +
|- valign="top"
 +
|
 +
{|border="0" align="left"
 +
|- valign="top"
 +
|style="padding-left:0.5em;"|Регистр конфигурации UARTx
 +
|}
 +
|valign="top"|
 +
{|border="0" align="left"
 +
|- valign="top"
 +
|width="70px" style="padding-left:0.5em;"|1...N
 +
|style="padding-left:0.5em;"|=
 +
|style="padding-left:0.5em;"|установить конфигурацию канала драйвера UART контроллера, определяющую текущий режим и параметры его работы (задается специальной константой из справочника констант);
 +
|- valign="top"
 +
|width="70px" style="padding-left:0.5em;"|0
 +
|style="padding-left:0.5em;"|=
 +
|style="padding-left:0.5em;"|отключить канал от драйвера UART, вернуть управление каналом драйверу каналов ввода-вывода и разрешить изменения его состояния из функциональной диаграммы.
 +
|}
 +
|- valign="top"
 +
|
 +
{|border="0" align="left"
 +
|- valign="top"
 +
|style="padding-left:0.5em;"|Регистр установки таймаута приема сообщения UARTx, бит
 +
|}
 +
|
 +
{|border="0" align="left"
 +
|- valign="top"
 +
|width="70px" style="padding-left:0.5em;"|1...65535
 +
|style="padding-left:0.5em;"|=
 +
|style="padding-left:0.5em;"|прекращение приема данных, если в течении времени, за которое может быть принято указанное число бит данных, на линии не было зафиксировано ни одного изменения потенциала и линия находится в пассивном состоянии;
 +
|- valign="top"
 +
|width="70px" style="padding-left:0.5em;"|0
 +
|style="padding-left:0.5em;"|=
 +
|style="padding-left:0.5em;"|использовать значение по умолчанию (13 бит).
 +
|}
 +
|}
 +
 
 +
Конфигурация драйвера UART определяется константой, представляющей комбинацию параметров, определяющих скорость, режим, дополнительные параметры передачи данных и потенциал линии в пассивном режиме.
 +
 
 +
{|border="1" style="border-collapse:collapse;" align="left" width="100%"
 +
|- align="center" valign="top"
 +
!width="250px"|Параметр
 +
!Перечень допустимых значений
 +
|- valign="top"
 +
|Скорость передачи данных, бод
 +
|110; 150; 300; 600; 1200; 1800; 2400; 4800; 9600; 19200; 38400; 57600
 +
|- valign="top"
 +
|Режим работы
 +
|UART; RS-232
 +
|- valign="top"
 +
|Подтяжка в режиме UART
 +
|плюс; воздух
 +
|- valign="top"
 +
|Направление передачи в режиме RS-232
 +
|прием; передача
 +
|- valign="top"
 +
|Количество бит данных
 +
|8; 9
 +
|- valign="top"
 +
|Контроль четности
 +
|N (no) — нет; O (odd) — нечетный; E (even) - четный
 +
|- valign="top"
 +
|Количество стоповых бит
 +
|1; 2
 +
|}
 +
 
 +
Именованные константы, представляющие доступные пользователю комбинации параметров конфигурации UART, содержатся в разделе «Конфигурация UART / RS-232» справочника констант CannyLab, доступ к которому осуществляется через контекстное меню констант на функциональной диаграмме.
 +
 
 +
Регистры диагностики драйвера UART / RS-232 / Modbus.
 +
{|border="1" style="border-collapse:collapse;" align="left" width="100%"
 +
|- align="center" valign="top"
 +
!width="250px"|Регистр
 +
!Возвращаемые значения
 +
|- valign="top"
 +
|
 +
{|border="0" align="left"
 +
|- valign="top"
 +
|style="padding-left:0.5em;"|Регистр переполнения буфера UARTx
 +
|}
 +
|valign="top"|
 +
{|border="0" align="left"
 +
|- valign="top"
 +
|width="70px" style="padding-left:0.5em;"|1
 +
|style="padding-left:0.5em;"|=
 +
|style="padding-left:0.5em;"|буфер UART переполнен;
 +
|- valign="top"
 +
|width="70px" style="padding-left:0.5em;"|0
 +
|style="padding-left:0.5em;"|=
 +
|style="padding-left:0.5em;"|переполнения не зафиксировано.
 +
|}
 +
|- valign="top"
 +
|
 +
{|border="0" align="left"
 +
|- valign="top"
 +
|style="padding-left:0.5em;"|Регистр ошибки приема UARTx
 +
|}
 +
|
 +
{|border="0" align="left"
 +
|- valign="top"
 +
|width="70px" style="padding-left:0.5em;"|1
 +
|style="padding-left:0.5em;"|=
 +
|style="padding-left:0.5em;"|во время приема данных UART произошла ошибка;
 +
|- valign="top"
 +
|width="70px" style="padding-left:0.5em;"|0
 +
|style="padding-left:0.5em;"|=
 +
|style="padding-left:0.5em;"|драйвер работает в нормальном режиме.
 +
|}
 +
|- valign="top"
 +
|
 +
{|border="0" align="left"
 +
|- valign="top"
 +
|style="padding-left:0.5em;"|Регистр готовности буфера передачи данных UARTx
 +
|}
 +
|
 +
{|border="0" align="left"
 +
|- valign="top"
 +
|width="70px" style="padding-left:0.5em;"|1
 +
|style="padding-left:0.5em;"|=
 +
|style="padding-left:0.5em;"|буфер передачи данных драйвера UART свободен;
 +
|- valign="top"
 +
|width="70px" style="padding-left:0.5em;"|0
 +
|style="padding-left:0.5em;"|=
 +
|style="padding-left:0.5em;"|буфер передачи данных драйвера UART занят, передача данных невозможна.
 +
|}
 +
|}
 +
 
 +
Регистры приема драйвера UART / RS-232 / Modbus.
 +
{|border="1" style="border-collapse:collapse;" align="left" width="100%"
 +
|- align="center" valign="top"
 +
!width="250px"|Регистр
 +
!Возвращаемые значения
 +
|- valign="top"
 +
|
 +
{|border="0" align="left"
 +
|- valign="top"
 +
|style="padding-left:0.5em;"|Регистр наличия принятых данных UARTx
 +
|}
 +
|valign="top"|
 +
{|border="0" align="left"
 +
|- valign="top"
 +
|width="70px" style="padding-left:0.5em;"|1
 +
|style="padding-left:0.5em;"|=
 +
|style="padding-left:0.5em;"|сообщение получено и помещено в буфер приема соответствующего канала драйвера UART;
 +
|- valign="top"
 +
|width="70px" style="padding-left:0.5em;"|0
 +
|style="padding-left:0.5em;"|=
 +
|style="padding-left:0.5em;"|в буфере приема соответствующего канала драйвера UART отсутствуют актуальные данные.
 +
|}
 +
|- valign="top"
 +
|
 +
{|border="0" align="left"
 +
|- valign="top"
 +
|style="padding-left:0.5em;"|Регистр признака RTU буфера приема данных UARTx
 +
|}
 +
|
 +
{|border="0" align="left"
 +
|- valign="top"
 +
|width="70px" style="padding-left:0.5em;"|1
 +
|style="padding-left:0.5em;"|=
 +
|style="padding-left:0.5em;"|полученное по соответствующему каналу сообщение UART является корректным сообщением Modbus RTU, контрольная сумма корректна;
 +
|- valign="top"
 +
|width="70px" style="padding-left:0.5em;"|0
 +
|style="padding-left:0.5em;"|=
 +
|style="padding-left:0.5em;"|полученное по соответствующему каналу сообщение UART не является корректным сообщением Modbus RTU.
 +
|}
 +
|- valign="top"
 +
|
 +
{|border="0" align="left"
 +
|- valign="top"
 +
|style="padding-left:0.5em;"|Регистр отсутствия активности драйвера UARTx
 +
|}
 +
|
 +
{|border="0" align="left"
 +
|- valign="top"
 +
|width="70px" style="padding-left:0.5em;"|1
 +
|style="padding-left:0.5em;"|=
 +
|style="padding-left:0.5em;"|активность соответствующего канала драйвера UART отсутствует, линия находится в пассивном режиме;
 +
|- valign="top"
 +
|width="70px" style="padding-left:0.5em;"|0
 +
|style="padding-left:0.5em;"|=
 +
|style="padding-left:0.5em;"|зафиксирована активность на линии соответствующего канала драйвера UART.
 +
|}
 +
|- valign="top"
 +
|
 +
{|border="0" align="left"
 +
|- valign="top"
 +
|style="padding-left:0.5em;"|Регистр длины принятого сообщения UARTx
 +
|}
 +
|
 +
{|border="0" align="left"
 +
|- valign="top"
 +
|width="70px" style="padding-left:0.5em;"|0...32
 +
|style="padding-left:0.5em;"|=
 +
|style="padding-left:0.5em;"|значение, равное количеству байт данных, в принятом по соответствующему каналу драйвера UART пакете данных.
 +
|}
 +
|- valign="top"
 +
|
 +
{|border="0" align="left"
 +
|- valign="top"
 +
|style="padding-left:0.5em;"|Регистр принятого сообщения UARTx D1:D0
 +
|- valign="top"
 +
|style="padding-left:0.5em;"|...
 +
|- valign="top"
 +
|style="padding-left:0.5em;"|Регистр принятого сообщения UARTx D31:D30
 +
|}
 +
|
 +
{|border="0" align="left"
 +
|- valign="top"
 +
|width="70px" style="padding-left:0.5em;"|0...0xFFFF
 +
|style="padding-left:0.5em;"|=
 +
|style="padding-left:0.5em;"|значения соответствующих байт данных приемных буферов UART каждого канала, по два байта на регистр.
 +
|}
 +
|}
 +
 
 +
Регистры передачи драйвера UART / RS-232 / Modbus.
 +
{|border="1" style="border-collapse:collapse;" align="left" width="100%"
 +
|- align="center" valign="top"
 +
!width="250px"|Регистр
 +
!Ожидаемые значения
 +
|- valign="top"
 +
|
 +
{|border="0" align="left"
 +
|- valign="top"
 +
|style="padding-left:0.5em;"|Регистр начала передачи UARTx
 +
|}
 +
|valign="top"|
 +
{|border="0" align="left"
 +
|- valign="top"
 +
|width="70px" style="padding-left:0.5em;"|≥ 1
 +
|style="padding-left:0.5em;"|=
 +
|style="padding-left:0.5em;"|загрузить данные из регистров передачи в буфер передачи соответствующего канала драйвера UART;
 +
|- valign="top"
 +
|width="70px" style="padding-left:0.5em;"|0
 +
|style="padding-left:0.5em;"|=
 +
|style="padding-left:0.5em;"|не загружать данные в буфер передачи соответствующего канала драйвера UART.
 +
|}
 +
|- valign="top"
 +
|
 +
{|border="0" align="left"
 +
|- valign="top"
 +
|style="padding-left:0.5em;"|Регистр признака RTU буфера передачи данных UARTx
 +
|}
 +
|
 +
{|border="0" align="left"
 +
|- valign="top"
 +
|width="70px" style="padding-left:0.5em;"|≥ 1
 +
|style="padding-left:0.5em;"|=
 +
|style="padding-left:0.5em;"|команда драйверу дописать к сообщению в буфере передачи соответствующего канала драйвера UART контрольную сумму в формате Modbus RTU, сформировав для отправки пакет данных в соответствии с протоколом Modbus RTU;
 +
|- valign="top"
 +
|width="70px" style="padding-left:0.5em;"|0
 +
|style="padding-left:0.5em;"|=
 +
|style="padding-left:0.5em;"|передавать данные буфера передачи соответствующего канала драйвера «как есть».
 +
|}
 +
|- valign="top"
 +
|
 +
{|border="0" align="left"
 +
|- valign="top"
 +
|style="padding-left:0.5em;"|Регистр длины сообщения передачи UARTx
 +
|}
 +
|
 +
{|border="0" align="left"
 +
|- valign="top"
 +
|width="70px" style="padding-left:0.5em;"|0...32
 +
|style="padding-left:0.5em;"|=
 +
|style="padding-left:0.5em;"|количество байт данных, которое будет необходимо передать в линию, при получении команды на отправку соответствующего канала драйвера UART.
 +
|}
 +
|- valign="top"
 +
|
 +
{|border="0" align="left"
 +
|- valign="top"
 +
|style="padding-left:0.5em;"|Регистр сообщения передачи UARTx D1:D0
 +
|- valign="top"
 +
|style="padding-left:0.5em;"|...
 +
|- valign="top"
 +
|style="padding-left:0.5em;"|Регистр сообщения передачи UARTx D31:D30
 +
|}
 +
|
 +
{|border="0" align="left"
 +
|- valign="top"
 +
|width="70px" style="padding-left:0.5em;"|0...0xFFFF
 +
|style="padding-left:0.5em;"|=
 +
|style="padding-left:0.5em;"|значения соответствующих байт данных для передачи по соответствующему каналу драйвера UART, по два байта на регистр.
 +
|}
 +
|}
 +
<br clear="all">
 +
 
 +
{|
 +
|valign="top" style="padding-left:0.5em;"|''Примечание:''
 +
|valign="top" style="padding-left:0.5em;"|''При работе в режиме Modbus регистр чтения длины UARTx  содержит значение с учетом принятых байт контрольной суммы (CRC), т. е. на 2 байта больше чем длина полезной нагрузки сообщения. При отправке пакета Modbus значение регистра установки длины сообщения UARTx также должно быть увеличено на 2 байта для возможности размещения и пересылки CRC. Т.е. максимальная длина пакета, при обмене сообщениями Modbus, составляет 32 байта, включая CRC (для приема и для передачи).''
 +
|}
 +
 
 +
== Работа контроллера в режиме UART ==
 +
 
 +
Работая в режиме UART контроллер может осуществлять полудуплексный прием/передачу данных по одному проводу.
 +
 
 +
Пример функциональной диаграммы для получения данных по UART.
 +
 
 +
[[Изображение:6_8_3_1.png|700px]]
 +
 
 +
Пример функциональной диаграммы для передачи данных по UART.
 +
 
 +
[[Изображение:6_8_3_2.png|700px]]
 +
 
 +
 
 +
{|
 +
|valign="top" style="padding-left:0.5em;"|''Примечание:''
 +
|valign="top" style="padding-left:0.5em;"|''Особое внимание следует обратить на то, что для избежания коллизий, при отправке данных, необходимо строго контролировать регистр готовности буфера передачи данных канала UART: если буфер не готов, значит в данный момент драйвером выполняется прием данных — отправка данных должна быть отложена.''
 +
|}
  
 
== Работа контроллера в режиме RS-232 ==
 
== Работа контроллера в режиме RS-232 ==

Текущая версия на 17:50, 12 августа 2019

Общее описание[править]

Два из одиннадцати каналов ввода-вывода (Канал №9 и Канал №10) CANNY 7 поддерживают работу в режиме приема/передачи данных последовательных протоколов UART, RS-232 и могут быть использованы для связи контроллеров друг с другом или с внешним оборудованием поддерживающим данные протоколы связи. Каналы могут быть задействованы независимо друг от друга и иметь индивидуальные настройки скорости передачи данных, типа и конфигурации используемого протокола, подтяжки линии.

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

Реализация протокола RS-232 в контроллерах CANNY7, при использовании обоих каналов UART данных, позволяет организовать обмен данными с другим RS-232 устройством в дуплексном режиме, т.е. по одному каналу выполнять отправку данных, а по другому одновременно осуществлять прием данных.

Примечание: Для корректной работы в режиме RS-232, в зависимости от особенностей внешнего, сопрягаемого с контроллером устройства, может потребоваться внешняя подтяжка канала TX к +12В с помощью резистора ~10кОм.

Протокол Modbus в контроллерах CANNY7 реализуется как поверх UART, так и поверх RS-232. В качестве ADU (Application Data Unit) используется компактный двоичный вариант - Modbus RTU. Проверка целостности данных осуществляется с помощью автоматически рассчитываемой контрольной суммы (CRC). Размер пакета ограничен 32 байтами включая CRC.

Примечание: Для корректной работы всех протоколов на базе UART/RS-232 необходимо, чтобы контакты GND устройств, совершающих обмен данными, были приведены к единому потенциалу ("общая земля").
Примечание: В реализации UART активным уровнем линии является потенциал GND 100mA, пассивным - положительный потенциал заданный внутренней или внешней подтяжкой канала контроллера. В реализации RS-232 — потенциалы обратные.

Драйвер UART / RS232 / Modbus в своей работе использует ресурсы каналов контроллера, но имеет более высокий приоритет чем драйвер дискретного ввода-вывода. Таким образом, при активации драйвера UART / RS232 / Modbus, для задействованных в его работе каналов, изменение значений в связанных с ними регистрах драйвера дискретного ввода-вывода будет проигнорировано контроллером.

Регистры драйвера[править]

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

Регистры конфигурации драйвера UART / RS-232 / Modbus.

Регистр Ожидаемые значения
Регистр конфигурации UARTx
1...N = установить конфигурацию канала драйвера UART контроллера, определяющую текущий режим и параметры его работы (задается специальной константой из справочника констант);
0 = отключить канал от драйвера UART, вернуть управление каналом драйверу каналов ввода-вывода и разрешить изменения его состояния из функциональной диаграммы.
Регистр установки таймаута приема сообщения UARTx, бит
1...65535 = прекращение приема данных, если в течении времени, за которое может быть принято указанное число бит данных, на линии не было зафиксировано ни одного изменения потенциала и линия находится в пассивном состоянии;
0 = использовать значение по умолчанию (13 бит).

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

Параметр Перечень допустимых значений
Скорость передачи данных, бод 110; 150; 300; 600; 1200; 1800; 2400; 4800; 9600; 19200; 38400; 57600
Режим работы UART; RS-232
Подтяжка в режиме UART плюс; воздух
Направление передачи в режиме RS-232 прием; передача
Количество бит данных 8; 9
Контроль четности N (no) — нет; O (odd) — нечетный; E (even) - четный
Количество стоповых бит 1; 2

Именованные константы, представляющие доступные пользователю комбинации параметров конфигурации UART, содержатся в разделе «Конфигурация UART / RS-232» справочника констант CannyLab, доступ к которому осуществляется через контекстное меню констант на функциональной диаграмме.

Регистры диагностики драйвера UART / RS-232 / Modbus.

Регистр Возвращаемые значения
Регистр переполнения буфера UARTx
1 = буфер UART переполнен;
0 = переполнения не зафиксировано.
Регистр ошибки приема UARTx
1 = во время приема данных UART произошла ошибка;
0 = драйвер работает в нормальном режиме.
Регистр готовности буфера передачи данных UARTx
1 = буфер передачи данных драйвера UART свободен;
0 = буфер передачи данных драйвера UART занят, передача данных невозможна.

Регистры приема драйвера UART / RS-232 / Modbus.

Регистр Возвращаемые значения
Регистр наличия принятых данных UARTx
1 = сообщение получено и помещено в буфер приема соответствующего канала драйвера UART;
0 = в буфере приема соответствующего канала драйвера UART отсутствуют актуальные данные.
Регистр признака RTU буфера приема данных UARTx
1 = полученное по соответствующему каналу сообщение UART является корректным сообщением Modbus RTU, контрольная сумма корректна;
0 = полученное по соответствующему каналу сообщение UART не является корректным сообщением Modbus RTU.
Регистр отсутствия активности драйвера UARTx
1 = активность соответствующего канала драйвера UART отсутствует, линия находится в пассивном режиме;
0 = зафиксирована активность на линии соответствующего канала драйвера UART.
Регистр длины принятого сообщения UARTx
0...32 = значение, равное количеству байт данных, в принятом по соответствующему каналу драйвера UART пакете данных.
Регистр принятого сообщения UARTx D1:D0
...
Регистр принятого сообщения UARTx D31:D30
0...0xFFFF = значения соответствующих байт данных приемных буферов UART каждого канала, по два байта на регистр.

Регистры передачи драйвера UART / RS-232 / Modbus.

Регистр Ожидаемые значения
Регистр начала передачи UARTx
≥ 1 = загрузить данные из регистров передачи в буфер передачи соответствующего канала драйвера UART;
0 = не загружать данные в буфер передачи соответствующего канала драйвера UART.
Регистр признака RTU буфера передачи данных UARTx
≥ 1 = команда драйверу дописать к сообщению в буфере передачи соответствующего канала драйвера UART контрольную сумму в формате Modbus RTU, сформировав для отправки пакет данных в соответствии с протоколом Modbus RTU;
0 = передавать данные буфера передачи соответствующего канала драйвера «как есть».
Регистр длины сообщения передачи UARTx
0...32 = количество байт данных, которое будет необходимо передать в линию, при получении команды на отправку соответствующего канала драйвера UART.
Регистр сообщения передачи UARTx D1:D0
...
Регистр сообщения передачи UARTx D31:D30
0...0xFFFF = значения соответствующих байт данных для передачи по соответствующему каналу драйвера UART, по два байта на регистр.


Примечание: При работе в режиме Modbus регистр чтения длины UARTx содержит значение с учетом принятых байт контрольной суммы (CRC), т. е. на 2 байта больше чем длина полезной нагрузки сообщения. При отправке пакета Modbus значение регистра установки длины сообщения UARTx также должно быть увеличено на 2 байта для возможности размещения и пересылки CRC. Т.е. максимальная длина пакета, при обмене сообщениями Modbus, составляет 32 байта, включая CRC (для приема и для передачи).

Работа контроллера в режиме UART[править]

Работая в режиме UART контроллер может осуществлять полудуплексный прием/передачу данных по одному проводу.

Пример функциональной диаграммы для получения данных по UART.

6 8 3 1.png

Пример функциональной диаграммы для передачи данных по UART.

6 8 3 2.png


Примечание: Особое внимание следует обратить на то, что для избежания коллизий, при отправке данных, необходимо строго контролировать регистр готовности буфера передачи данных канала UART: если буфер не готов, значит в данный момент драйвером выполняется прием данных — отправка данных должна быть отложена.

Работа контроллера в режиме RS-232[править]

Работая по протоколу RS-232 контроллер может использовать каждый из своих каналов передачи данных только в симплексном (однонаправленном) режиме. При использовании сразу обоих каналов UART, которые работают независимо друг от друга, возможно организовать дуплексный режим обмена информацией по двум проводам: один канал — только прием, второй — только передача.

Пример функциональной диаграммы для работы с RS-232. Получая данные по каналу UART2, при условии, что значение полученных байтов D1:D0 равно «0хAAAA», контроллер отправляет, по каналу UART1, 2 байта данных, содержащих значение «0xBBBB».

6 8 4 1.png

Реализация Modbus RTU[править]

Драйвер UART/RS-232 включает в себя функционал автоматического формирования и проверки контрольной суммы по стандарту Modbus RTU, что упрощает включение контроллера в сеть работающую по данному протоколу. Управлять формированием контрольной суммы передаваемых сообщений и её проверкой при приёме можно через соответствующие регистры драйвера.

Примечание: При работе в режиме Modbus регистр чтения длины UARTx содержит значение с учетом принятых байт контрольной суммы (CRC), т. е. на 2 байта больше чем длина полезной нагрузки сообщения. При отправке пакета Modbus значение регистра установки длины сообщения UARTx также должно быть увеличено на 2 байта для возможности размещения и пересылки CRC. Т.е. максимальная длина пакета, при обмене сообщениями Modbus, составляет 32 байта, включая CRC (для приема и для передачи).

Пример функциональной диаграммы работы контроллера в режиме MASTER-узла Modbus поверх RS-232. Выполняя диаграмму, контроллер периодически отправляет SLAVE-узлу с адресом 0х20 запрос на получение от него значения из Modbus-регистра данных с адресом 0х0001. Получение ответа на свой запрос MASTER сопровождает коротким включением своего зеленого светодиода.

6 8 5 1.png

Строка запроса, при обмене данными между устройствами, будет выглядеть так:

-> 20 03 00 01 00 01 D3 7B

Адрес опрашиваемого устройства: 0x20 (байт D0 регистра приема сообщения UART2 D1:D0).

Функция: 0x03 - чтение значений из нескольких регистров хранения (байт D1 регистра приема сообщения UART2 D1:D0).

Номер первого запрашиваемого регистра: 0x0001 (байты D2 и D3 регистра приема сообщения UART2 D3:D2).

Число запрашиваемых регистров: 0x0001 (байты D4 и D5 регистра приема сообщения UART2 D5:D4).

Контрольная сумма: 0xD37B (байты D6 и D7 регистра приема сообщения UART2 D7:D6 — добавляются драйвером автоматически).


Пример функциональной диаграммы работы контроллера в качестве SLAVE-узла Modbus поверх RS-232. Получая от MASTERа запрос на передачу данных, контроллер в ответ передает состояние запрошенного регистра. Контроллер передает 2 байта данных (+2 байта CRC), т.к. регистры Modbus имеют разрядность 16 бит.

6 8 5 2.png

Строка ответа, при обмене данными между устройствами, будет выглядеть так:

<- 20 03 02 FA FA C6 A0

Адрес отвечающего устройства: 0x20 (байт D0 регистра сообщения передачи UART1 D1:D0).

Функция: 0x03 - результат чтения значений из нескольких регистров хранения (байт D1 регистра сообщения передачи UART1 D1:D0).

Число возвращаемых байт: 0x02 (байт D2 регистра сообщения передачи UART1 D3:D2).

Значение старшего байта запрашиваемого регистра: 0xFA (байт D3 регистра сообщения передачи UART1 D3:D2).

Значение младшего байта запрашиваемого регистра: 0xFA (байт D4 регистра сообщения передачи UART1 D5:D4).

Контрольная сумма: 0xC6A0 (байт D5 регистра приема сообщения UART1 D5:D4 и байт D6 регистра приема сообщения UART1 D7:D6 соответственно — добавляются драйвером автоматически).


Смотри также[править]

CANNY 7

CANNY 7, Драйвер LIN