Общее описание[править]
Два из шести каналов контроллера CANNY 3 tiny, каналы №1 и №2, поддерживают работу в режиме приема/передачи данных, совместимом с последовательными интерфейсами UART, RS-232 и могут быть использованы для связи контроллеров друг с другом или с внешним оборудованием поддерживающим данные виды связи. Каналы могут быть задействованы как по отдельности (только прием, либо только передача), так и совместно (прием и передача), при этом каналы могут иметь индивидуальные настройки подтяжки линии.
Реализация UART и RS-232 в контроллерах CANNY 3 tiny позволяет организовать обмен данными с другим UART / RS-232 устройством в дуплексном режиме, т.е. по одному каналу выполнять отправку данных, а по другому одновременно осуществлять прием данных.
Примечание:
|
Канал №1 контроллера предназначен для использования только в качестве канала приема данных (RX), канал №2 - только в качестве канала передачи данных (TX).
|
Объем приемного и передающего буферов данных драйвера UART / RS-232 / Modbus контроллеров CANNY 3 tiny составляет 32 байта.
Набор поддерживаемых скоростей ограничен: 300, 1200, 2400, 9600, 19200, 57600 бод; а также доступны только следующие форматы передачи данных: 8-N-1, 8-O-1, 8-E-1.
Протокол Modbus в контроллерах CANNY 3 tiny реализуется как поверх UART, так и поверх RS-232. В качестве ADU (Application Data Unit) используется компактный двоичный вариант - Modbus RTU. Проверка целостности данных осуществляется с помощью автоматически рассчитываемой контрольной суммы (CRC). Размер пакета ограничен 32 байтами включая CRC.
Примечание:
|
Для корректной работы всех всех интерфейсов UART / RS-232 необходимо, чтобы контакты GND устройств, совершающих обмен данными, были приведены к единому потенциалу ("общая земля").
|
Драйвер UART / RS-232 / Modbus в своей работе использует ресурсы каналов контроллера, но имеет более высокий приоритет чем драйвер дискретного ввода-вывода. Таким образом, при активации того или иного интерфейса UART / RS-232 / Modbus, для задействованных в его работе каналов, изменение значений в связанных с ними регистрах драйвера дискретного ввода-вывода будет проигнорировано контроллером.
Регистры драйвера[править]
Ниже приведено описание допустимых и возвращаемых значений регистров управления работой драйвера.
Регистры конфигурации драйвера UART.
Регистр
|
Ожидаемые значения
|
Регистр конфигурации UART1
|
|
1...N
|
=
|
установить конфигурацию канала драйвера UART контроллера, определяющую текущий режим и параметры его работы (задается специальной константой из справочника констант);
|
0
|
=
|
отключить канал от драйвера UART, вернуть управление каналом драйверу каналов ввода-вывода и разрешить изменения его состояния из функциональной диаграммы.
|
|
Регистр установки таймаута приема сообщения UART1, мс
|
|
1...65535
|
=
|
прекращение приема данных, если в течении указанного времени на линии не было зафиксировано ни одного изменения потенциала и линия находится в пассивном состоянии;
|
0
|
=
|
использовать значение по умолчанию (1мс).
|
|
Регистр включения внутренней подтяжки к плюсу канала UART1 RX
|
Регистр включения внутренней подтяжки к плюсу канала UART1 TX
|
|
≥ 1
|
=
|
включить внутреннюю подтяжку к плюсу канала UART1;
|
0
|
=
|
выключить внутреннюю подтяжку к плюсу канала UART1.
|
|
Конфигурация драйвера UART определяется константой, представляющей комбинацию параметров, определяющих скорость, режим, дополнительные параметры передачи данных и потенциал линии в пассивном режиме.
Параметр
|
Перечень допустимых значений
|
Скорость передачи данных, бод
|
300, 1200, 2400, 9600, 19200, 57600
|
Режим работы
|
Прием/передача, Прием, Передача
|
Количество бит данных
|
8
|
Контроль четности
|
N (no) — нет; O (odd) — нечетный; E (even) - четный
|
Количество стоповых бит
|
1
|
Полярность
|
прямая (UART); инверсная (RS-232)
|
Именованные константы, представляющие доступные пользователю комбинации параметров конфигурации UART, содержатся в разделе «Конфигурация UART / RS-232» справочника констант CannyLab, доступ к которому осуществляется через контекстное меню констант на функциональной диаграмме.
Регистры диагностики драйвера UART.
Регистр
|
Возвращаемые значения
|
Регистр переполнения буфера приема UART1
|
Регистр переполнения буфера передачи UART1
|
|
1
|
=
|
буфер UART переполнен;
|
0
|
=
|
переполнения не зафиксировано.
|
|
Регистр отсутствия активности драйвера UART1
|
|
1
|
=
|
активность соответствующего канала драйвера UART отсутствует, линия находится в пассивном режиме;
|
0
|
=
|
зафиксирована активность на линии соответствующего канала драйвера UART.
|
|
Регистр ошибки приема UART1
|
|
1
|
=
|
во время приема данных UART произошла ошибка;
|
0
|
=
|
драйвер работает в нормальном режиме.
|
|
Регистр готовности буфера передачи данных UART1
|
|
1
|
=
|
буфер передачи данных драйвера UART свободен;
|
0
|
=
|
буфер передачи данных драйвера UART занят, передача данных невозможна.
|
|
Регистры приема драйвера UART.
Регистр
|
Возвращаемые значения
|
Регистр наличия принятых данных UART1
|
|
1
|
=
|
сообщение получено и помещено в буфер приема соответствующего канала драйвера UART;
|
0
|
=
|
в буфере приема драйвера UART отсутствуют актуальные данные.
|
|
Регистр длины принятого сообщения UART1
|
|
0...32
|
=
|
значение, равное количеству байт данных, в принятом пакете данных UART.
|
|
Регистр принятого сообщения UART1 D1:D0
|
...
|
Регистр принятого сообщения UART1 D31:D30
|
|
0...0xFFFF
|
=
|
значения соответствующих байт данных приемного буфера UART, по два байта на регистр.
|
|
Регистр признака RTU буфера приема данных UART1
|
|
1
|
=
|
полученное сообщение UART1 является корректным сообщением Modbus RTU, контрольная сумма корректна;
|
0
|
=
|
полученное сообщение UART1 не является корректным сообщением Modbus RTU.
|
|
Регистры передачи драйвера UART.
Регистр
|
Ожидаемые значения
|
Регистр начала передачи UART1
|
|
≥ 1
|
=
|
загрузить данные из регистров передачи в буфер передачи драйвера UART;
|
0
|
=
|
не загружать данные в буфер передачи драйвера UART.
|
|
Регистр длины сообщения передачи UART1
|
|
0...32
|
=
|
количество байт данных, которое будет необходимо передать в линию, при получении команды на отправку.
|
|
Регистр сообщения передачи UART1 D1:D0
|
...
|
Регистр сообщения передачи UART1 D31:D30
|
|
0...0xFFFF
|
=
|
значения соответствующих байт данных для передачи, по два байта на регистр.
|
|
Регистр признака RTU буфера передачи данных UART1
|
|
≥ 1
|
=
|
команда драйверу дописать к сообщению в буфере передачи UART1 контрольную сумму в формате Modbus RTU, сформировав для отправки пакет данных в соответствии с протоколом Modbus RTU;
|
0
|
=
|
передавать данные буфера передачи UART1 «как есть».
|
|
Примечание:
|
При работе в режиме Modbus регистр чтения длины UART1 содержит значение с учетом принятых байт контрольной суммы (CRC), т. е. на 2 байта больше чем длина полезной нагрузки сообщения. При отправке пакета Modbus значение регистра установки длины сообщения UART1 также должно быть увеличено на 2 байта для возможности размещения и пересылки CRC. Т.е. максимальная длина пакета, при обмене сообщениями Modbus, составляет 32 байта, включая CRC (для приема и для передачи).
|
Работа контроллера в режиме UART[править]
Работая в режиме UART контроллер может осуществлять дуплексный прием/передачу данных.
Пример функциональной диаграммы для обмена данными по UART. Контроллер, получив сообщение длиной 2 байта по интерфейсу UART1, сохраняет их в соответствующей именованной сети для дальнейшей обработки и на следующем цикле выполнения диаграммы отправляет обратно заранее подготовленные 2 байта данных.
Реализация Modbus RTU[править]
Драйвер UART / RS-232 включает в себя функционал автоматического формирования и проверки контрольной суммы по стандарту Modbus RTU, что упрощает включение контроллера в сеть работающую по данному протоколу. Управлять формированием контрольной суммы передаваемых сообщений и её проверкой при приёме можно через соответствующие регистры драйвера.
Примечание:
|
При работе в режиме Modbus регистр чтения длины UART1 содержит значение с учетом принятых байт контрольной суммы (CRC), т. е. на 2 байта больше чем длина полезной нагрузки сообщения. При отправке пакета Modbus значение регистра установки длины сообщения UART1 также должно быть увеличено на 2 байта для возможности размещения и пересылки CRC. Т.е. максимальная длина пакета, при обмене сообщениями Modbus, составляет 32 байта, включая CRC (для приема и для передачи).
|
Пример функциональной диаграммы работы контроллера в режиме MASTER-узла Modbus поверх RS-232. Выполняя диаграмму, контроллер периодически отправляет SLAVE-узлу с адресом 0х20 запрос на получение от него значения из Modbus-регистра данных с адресом 0х0001. Получение ответа на свой запрос MASTER сопровождает коротким включением своего зеленого светодиода.
Строка запроса, при обмене данными между устройствами, будет выглядеть так:
-> 20 03 00 01 00 01 D3 7B
Адрес опрашиваемого устройства: 0x20 (байт b0 регистра приема сообщения UART1 D1:D0).
Функция: 0x03 - чтение значений из нескольких регистров хранения (байт D1 регистра приема сообщения UART1 D1:D0).
Номер первого запрашиваемого регистра: 0x0001 (байты D2 и D3 регистра приема сообщения UART1 D3:D2).
Число запрашиваемых регистров: 0x0001 (байты D4 и D5 регистра приема сообщения UART1 D5:D4).
Контрольная сумма: 0xD37B (байты D6 и D7 регистра приема сообщения UART1 D7:D6 — добавляются драйвером автоматически).
Пример функциональной диаграммы работы контроллера в качестве SLAVE-узла Modbus поверх RS-232. Получая от MASTERа запрос на передачу данных, контроллер в ответ передает состояние запрошенного регистра. Контроллер передает 2 байта данных (+2 байта CRC), т.к. регистры Modbus имеют разрядность 16 бит.
Строка ответа, при обмене данными между устройствами, будет выглядеть так:
<- 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 3 tiny
CANNY 5.2, Драйвер UART - RS232
CANNY 5 nano, Драйвер UART
CANNY 7, Драйвер UART - RS232 - Modbus