This documentation is out of date.
The new version of the documentation is here: https://cannylogic.com/docs |
Difference between revisions of "CANNY 7, UART Driver"
[unchecked revision] | [unchecked revision] |
(→Driver registers) |
(→Driver registers) |
||
Line 278: | Line 278: | ||
{|border="0" align="left" | {|border="0" align="left" | ||
|- valign="top" | |- valign="top" | ||
− | |style="padding-left:0.5em;"| | + | |style="padding-left:0.5em;"|UART1 Request To Send Register |
|- valign="top" | |- valign="top" | ||
− | |style="padding-left:0.5em;"| | + | |style="padding-left:0.5em;"|UART2 Request To Send Register |
|} | |} | ||
|valign="top"| | |valign="top"| | ||
Line 306: | Line 306: | ||
|width="70px" style="padding-left:0.5em;"|1 | |width="70px" style="padding-left:0.5em;"|1 | ||
|style="padding-left:0.5em;"|= | |style="padding-left:0.5em;"|= | ||
− | |style="padding-left:0.5em;"| | + | |style="padding-left:0.5em;"|a command to the driver, to add to the message in the appropriate channel of UART driver's transmit buffer, the checksum in the Modbus RTU format, to form a data packet, to send in accordance with Modbus RTU protocol; |
|- valign="top" | |- valign="top" | ||
|width="70px" style="padding-left:0.5em;"|0 | |width="70px" style="padding-left:0.5em;"|0 | ||
|style="padding-left:0.5em;"|= | |style="padding-left:0.5em;"|= | ||
− | |style="padding-left:0.5em;"| | + | |style="padding-left:0.5em;"|transmit data from the corresponding channel driver buffer "as is". |
|} | |} | ||
|- valign="top" | |- valign="top" | ||
Line 325: | Line 325: | ||
|width="70px" style="padding-left:0.5em;"|0...16 | |width="70px" style="padding-left:0.5em;"|0...16 | ||
|style="padding-left:0.5em;"|= | |style="padding-left:0.5em;"|= | ||
− | |style="padding-left:0.5em;"| | + | |style="padding-left:0.5em;"|the number of data bytes that will be transmitted to the line, when receiving a command to send on the corresponding channel of UART driver. |
|} | |} | ||
|- valign="top" | |- valign="top" | ||
Line 348: | Line 348: | ||
|width="70px" style="padding-left:0.5em;"|0...65535 | |width="70px" style="padding-left:0.5em;"|0...65535 | ||
|style="padding-left:0.5em;"|= | |style="padding-left:0.5em;"|= | ||
− | |style="padding-left:0.5em;"| | + | |style="padding-left:0.5em;"|values of the respective data bytes for transmission via respective UART driver channel, two bytes to the register. |
|} | |} | ||
|} | |} |
Revision as of 13:23, 11 September 2016
Contents
General description
Two of eleven IO channels (#9 and #10) CANNY 7 supports UART, RS-232 serial protocols data transmission/reception. It may be used to connect the controllers with each other or with external equipment supporting this communications protocols. The channels may be activated independently of each other and have individual data speed setting, protocol type and configuration, pull up line.
UART implementation in CANNY 7 controllers allows to organize serial data reception and transmission over a single wire in half-duplex mode. Thus CANNY7 may have two independent connections using the UART protocol. Monitoring of the data link status should be done from the functional diagram. If the channel is free, the device may start data transmitting , otherwise the device should wait for the line release.
RS-232 implementation by using both UART data channels , allows to exchange data with other RS-232 device in a duplex mode, i.e. one channel to perform data sending and on the other to simultaneously receive data.
Modbus protocol in CANNY7 controllers implemented as over UART as over RS-232. As ADU (Application Data Unit) used compact binary option Modbus RTU. Checking the data integrity carried out by automatically calculated checksum (CRC). Package size is limited to 16 bytes including the CRC.
Note: | For correct operation of all protocols based on the UART / RS-232 requires that all GND terminals of the devices committing communication, were given to a single potential ("common ground"). |
Note: | In UART implementation-active line is the potential GND 100mA, passive - positive potential of a given internal or external channel pull-up. In implementing RS-232 - the potentials inverse. |
Driver UART/RS-232/Modbus operates using controllers' channels resources, but has a higher priority than a discrete input-output driver. Thus, upon activation of UART/RS-232/Modbus driver, for channels involved in its operation, a value changes in registers associated with discrete input-output driver, will be ignored.
Driver registers
The following describes the acceptable and returnable values of the driver control operation registers.
UART / RS-232 / Modbus Driver Configuration Registers.
Address | Expected values | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
| ||||||||
|
|
UART driver configuration is determined by the constants that represent the combination of parameters that determine the speed, mode, additional date transmission parameters and line potential in the passive mode.
Parameter | Acceptable values |
---|---|
The data rate, bps | 110; 150; 300; 600; 1200; 1800; 2400; 4800; 9600; 19200; 38400; 57600 |
Mode | UART; RS-232 |
Pull-up in UART mode | plus; air |
The transfer direction in RS-232 mode | receive; transmit |
Data bits | 8; 9 |
parity | N (no) ; O (odd) ; E (even) |
Number of stop bits | 1; 2 |
Named constants that represent UART configuration parameters combination, available to the user in the "UART / RS-232 modes" CannyLab constants directory, which can be accessed via function block entry context menu having "constant" type.
UART / RS-232 / Modbus Diagnostic Registers.
Address | Return values | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
| ||||||||
|
| ||||||||
|
|
UART / RS-232 / Modbus Receive Registers.
Address | Expected values | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
|
| |||||||||
|
| |||||||||
|
| |||||||||
|
| |||||||||
|
|
UART / RS-232 / Modbus Transmit Registers.
Address | Expected values | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
|
| |||||||||
|
| |||||||||
|
| |||||||||
|
|
Работа контроллера в режиме UART
Работая в режиме UART контроллер может осуществлять полудуплексный прием/передачу данных по одному проводу.
Пример функциональной диаграммы для получения данных по UART.
Пример функциональной диаграммы для передачи данных по UART.
Примечание: | Особое внимание следует обратить на то, что для избежания коллизий, при отправке данных, необходимо строго контролировать регистр готовности буфера передачи данных канала UART: если буфер не готов, значит в данный момент драйвером выполняется прием данных — отправка данных должна быть отложена. |
Работа контроллера в режиме RS-232
Работая по протоколу RS-232 контроллер может использовать каждый их своих каналов передачи данных только в симплексном (однонаправленном) режиме. При использовании сразу обоих каналов UART, которые работают независимо друг от друга, возможно организовать дуплексный режим обмена информацией по двум проводам: один канал — только прием, второй — только передача.
Пример функциональной диаграммы для работы с RS-232. Получая данные по каналу UART2, при условии, что значение полученных байтов b1:b0 равно «0хAAAA», контроллер отправляет, по каналу UART1, 2 байта данных, содержащих значение «0xBBBB».
Реализация Modbus RTU
Драйвер UART/RS-232 включает в себя функционал автоматического формирования и проверки контрольной суммы по стандарту Modbus RTU, что упрощает включение контроллера в сеть работающую по данному протоколу. Управлять формированием контрольной суммы передаваемых сообщений и её проверкой при приёме можно через соответствующие регистры драйвера.
Примечание: | При работе в режиме Modbus регистр чтения длины UARTx содержит значение с учетом принятых байт контрольной суммы (CRC), т. е. на 2 байта больше чем длина полезной нагрузки сообщения. При отправке пакета Modbus значение регистра установки длины сообщения UARTx также должно быть увеличено на 2 байта для возможности размещения и пересылки CRC. |
Пример функциональной диаграммы работы контроллера в режиме MASTER-узла Modbus поверх RS-232. Выполняя диаграмму, контроллер периодически отправляет SLAVE-узлу с адресом 0х20 запрос на получение от него значения из Modbus-регистра данных с адресом 0х0001. Получение ответа на свой запрос MASTER сопровождает коротким включением своего зеленого светодиода.
Строка запроса, при обмене данными между устройствами, будет выглядеть так: -> 20 03 00 01 00 01 D3 7B
Адрес опрашиваемого устройства: 0x20 (байт b0 регистра приема сообщения UART2 b1:b0).
Функция: 0x03 - чтение значений из нескольких регистров хранения (байт b1 регистра приема сообщения UART2 b1:b0).
Номер первого запрашиваемого регистра: 0x0001 (байты b2 и b3 регистра приема сообщения UART2 b3:b2).
Число запрашиваемых регистров: 0x0001 (байты b4 и b5 регистра приема сообщения UART2 b5:b4).
Контрольная сумма: 0xD37B (байты b6 и b7 регистра приема сообщения UART2 b7:b6 — добавляются драйвером автоматически).
Пример функциональной диаграммы работы контроллера в качестве SLAVE-узла Modbus поверх RS-232. Получая от MASTERа запрос на передачу данных, контроллер в ответ передает состояние запрошенного регистра. Контроллер передает 2 байта данных (+2 байта CRC), т.к. регистры Modbus имеют разрядность 16 бит.
Строка ответа, при обмене данными между устройствами, будет выглядеть так:
<- 20 03 02 00 10 C6 A0
Адрес отвечающего устройства: 0x20 (байт b0 регистра сообщения передачи UART1 b1:b0).
Функция: 0x03 - результат чтения значений из нескольких регистров хранения (байт b1 регистра сообщения передачи UART1 b1:b0).
Число возвращаемых байт: 0x02 (байт b2 регистра сообщения передачи UART1 b3:b2).
Значение старшего байта запрашиваемого регистра: 0x00 (байт b3 регистра сообщения передачи UART1 b3:b2).
Значение младшего байта запрашиваемого регистра: 0x10 (байт b4 регистра сообщения передачи UART1 b5:b4).
Контрольная сумма: 0xC6A0 (байт b5 регистра приема сообщения UART1 b5:b4 и байт b6 регистра приема сообщения UART1 b7:b6 соответственно — добавляются драйвером автоматически).