MicroPython:Библиотеки/pyb/Класс CAN: различия между версиями

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Нет описания правки
Нет описания правки
 
(не показаны 3 промежуточные версии 1 участника)
Строка 9: Строка 9:
Пример использования (работает, даже если ничего не подключено):
Пример использования (работает, даже если ничего не подключено):


<syntaxhighlight lang="python" enclose="div">
<syntaxhighlight lang="python">
from pyb import CAN
from pyb import CAN
can = CAN(1, CAN.LOOPBACK)
can = CAN(1, CAN.LOOPBACK)
Строка 38: Строка 38:
* [[MicroPython:Библиотеки/pyb/Класс CAN/CAN.recv()|CAN.recv(fifo, list=None, *, timeout=5000)]]
* [[MicroPython:Библиотеки/pyb/Класс CAN/CAN.recv()|CAN.recv(fifo, list=None, *, timeout=5000)]]
* [[MicroPython:Библиотеки/pyb/Класс CAN/CAN.send()|CAN.send(data, id, *, timeout=0, rtr=False)]]
* [[MicroPython:Библиотеки/pyb/Класс CAN/CAN.send()|CAN.send(data, id, *, timeout=0, rtr=False)]]
* [[MicroPython:Библиотеки/pyb/Класс CAN/
* [[MicroPython:Библиотеки/pyb/Класс CAN/CAN.rxcallback()|CAN.rxcallback(fifo, fun)]]
* [[MicroPython:Библиотеки/pyb/Класс CAN/
* [[MicroPython:Библиотеки/pyb/Класс CAN/
* [[MicroPython:Библиотеки/pyb/Класс CAN/
* [[MicroPython:Библиотеки/pyb/Класс CAN/
* [[MicroPython:Библиотеки/pyb/Класс CAN/
* [[MicroPython:Библиотеки/pyb/Класс CAN/
 
* CAN.send(data, id, *, timeout=0, rtr=False) – отправляет сообщение на шину:
** data – данные, которые нужно отправить (целое число или буферный объект).
** id – ID отправляемого сообщения.
** timeout – таймаут в миллисекундах для ожидания отправки данных.
** rtr – это булево значение, задающее, будет ли это сообщение отправлено как запрос на удаленную передачу данных. Если задать здесь True, будет использован только размер данных data (чтобы заполнить поле DLC фрейма). Сами байты из data использованы не будут.
Если задать в timeout значение «0», сообщение будет помещено в один из трех аппаратных буферов, а метод вернет значение немедленно. Если все три буфера уже используются, будет возбуждено исключение. Если значение в timeout будет ненулевым, метод будет ждать, пока сообщение не будет отправлено. Если сообщение не будет отправлено в пределах заданного времени, будет возбуждено исключение.
Возвращаемое значение: None.
* CAN.rxcallback(fifo, fun) – регистрирует функцию, которая будет вызвана при приеме сообщения в пустой FIFO.
** fifo – FIFO, получающий сообщение.
** fun – функция, которая будет вызвана, когда FIFO перестанет быть пустым.
Функция обратного вызова принимает два аргумента. Первый – это сам объект CAN, а второй – это целое число, информирующее о причине запуска функции обратного вызова:
** «0» – сообщение принято в пустой FIFO.
** «1» – FIFO заполнен.
** «2» – сообщение было потеряно из-за полного FIFO.
Пример использования CAN.rxcallback(fifo, fun):
 
<syntaxhighlight lang="python" enclose="div">
def cb0(bus, reason):
  print('cb0')
  if reason == 0:
      print('в режиме ожидания')
  if reason == 1:
      print('полный')
  if reason == 2:
      print('переполнение')
 
can = CAN(1, CAN.LOOPBACK)
can.rxcallback(0, cb0)
</syntaxhighlight>


== Константы ==
== Константы ==


* CAN.NORMAL, CAN.LOOPBACK, CAN.SILENT, CAN.SILENT_LOOPBACK – режимы работы CAN-шины, используемые в init().
* [[MicroPython:Библиотеки/pyb/Класс CAN/CAN.NORMAL|CAN.NORMAL]]
* CAN.STOPPED, CAN.ERROR_ACTIVE, CAN.ERROR_WARNING, CAN.ERROR_PASSIVE, CAN.BUS_OFF – режимы работы CAN-контроллера, возвращаемые функцией state().
* [[MicroPython:Библиотеки/pyb/Класс CAN/CAN.LOOPBACK|CAN.LOOPBACK]]
* CAN.LIST16, CAN.MASK16, CAN.LIST32, CAN.MASK32 – режимы работы фильтра, используемые в setfilter().
* [[MicroPython:Библиотеки/pyb/Класс CAN/CAN.SILENT|CAN.SILENT]]
 
* [[MicroPython:Библиотеки/pyb/Класс CAN/CAN.SILENT_LOOPBACK|CAN.SILENT_LOOPBACK]]
 
* [[MicroPython:Библиотеки/pyb/Класс CAN/CAN.STOPPED|CAN.STOPPED]]
 
* [[MicroPython:Библиотеки/pyb/Класс CAN/CAN.ERROR_ACTIVE|CAN.ERROR_ACTIVE]]
<syntaxhighlight lang="python" enclose="div">
* [[MicroPython:Библиотеки/pyb/Класс CAN/CAN.ERROR_WARNING|CAN.ERROR_WARNING]]
* [[MicroPython:Библиотеки/pyb/Класс CAN/CAN.ERROR_PASSIVE|CAN.ERROR_PASSIVE]]
* [[MicroPython:Библиотеки/pyb/Класс CAN/CAN.BUS_OFF|CAN.BUS_OFF]]
* [[MicroPython:Библиотеки/pyb/Класс CAN/CAN.LIST16|CAN.LIST16]]
* [[MicroPython:Библиотеки/pyb/Класс CAN/CAN.MASK16|CAN.MASK16]]
* [[MicroPython:Библиотеки/pyb/Класс CAN/CAN.LIST32|CAN.LIST32]]
* [[MicroPython:Библиотеки/pyb/Класс CAN/CAN.MASK32|CAN.MASK32]]


=См.также=
=См.также=

Текущая версия от 17:31, 24 мая 2023

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Класс CAN – коммуникационная шина CAN[1]

В классе CAN реализован коммуникационный протокол CAN. На физическом уровне он состоит из 2 линий: RX и TX. Для подключения PyBoard к шине CAN нужно использовать CAN-трансивер – чтобы преобразовать сигналы CAN-логики от PyBoard в правильные уровни напряжения на шине.

Пример использования (работает, даже если ничего не подключено):

from pyb import CAN
can = CAN(1, CAN.LOOPBACK)
# задаем фильтр для получения сообщений с id 123, 124, 125 и 126:
can.setfilter(0, CAN.LIST16, 0, (123, 124, 125, 126))
can.send('message!', 123)   # отправляем сообщение с ID 123
can.recv(0)                 # получаем сообщение на FIFO 0

Конструкторы

Методы класса

Методы

Константы

См.также

Внешние ссылки