События и обратные вызовы

Event Types and Callback Properties

Типы событий и сопоставленные свойства коллбэка, поддержанные объектами последовательного порта, описаны ниже.

Типы событий последовательного порта и свойства коллбэка

Тип события

Связанные свойства

Повредите прерывание

BreakInterruptFcn

BytesAvailable

BytesAvailableFcn

BytesAvailableFcnCount

BytesAvailableFcnMode

Ошибка

ErrorFcn

Выведите пустой

OutputEmptyFcn

PinStatus

PinStatusFcn

Таймер

TimerFcn

TimerPeriod

Прерывание пропуска и события изменения состояния контакта описаны ниже. Для описания других типов событий обратитесь к Event Types and Callback Properties.

Примечание

Вы не можете использовать значения ASCII, больше, чем 127 символов с fgetl, fgets или BytesAvailableFnc. Функции ограничиваются 127 бинарными символами.

Событие прерывания пропуска

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

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

Прикрепление события изменения состояния

Событие изменения состояния контакта сразу сгенерировано после состояния (значение контакта) изменения для CD, CTS, DSR или контактов RI. Обратитесь к Сигналам Последовательного порта и Назначениям контактов для описания этих контактов.

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

Ответ на информацию о событии

Можно ответить на информацию о событии в функции обратного вызова или в файле записи. Информация о событии, сохраненная в функции обратного вызова, использует два поля: Type и Data. Поле Type содержит тип события, в то время как поле Data содержит привязанную к конкретному событию информацию. Как описано в Создании и Выполнении Функций обратного вызова, эти два поля сопоставлены со структурой, которую вы задаете в заголовке функции обратного вызова. Обратитесь к Отладке: Запись информации к Диску, чтобы узнать о хранении информации о событии в файле записи.

Типы событий и значения для полей Type и Data приведены ниже.

Информация о событии последовательного порта

Тип события

Поле

Значение поля

Повредите прерывание

Type

BreakInterrupt

Data.AbsTime

дневной год месяца hour:minute:second

BytesAvailable

Type

BytesAvailable

Data.AbsTime

дневной год месяца hour:minute:second

Ошибка

Type

Error

Data.AbsTime

дневной год месяца hour:minute:second

Data.Message

Строка ошибки

Выведите пустой

Type

OutputEmpty

Data.AbsTime

дневной год месяца hour:minute:second

PinStatus

Type

PinStatus

Data.AbsTime

дневной год месяца hour:minute:second

Data.Pin

CarrierDetect, ClearToSend, DataSetReady или RingIndicator

Data.PinValue

on или off

Таймер

Type

Timer

Data.AbsTime

дневной год месяца hour:minute:second

Значения полей Data следующие.

Имя поляЗначение
AbsTime

AbsTime задан для всех событий и указывает абсолютное время, которое имело место событие. Абсолютное время возвращено с помощью формата MATLAB® Command Windowclock.

Pin

Pin используется событием изменения состояния контакта, чтобы указать если CD, CTS, DSR или контакты RI измененное состояние. Обратитесь к Сигналам Последовательного порта и Назначениям контактов для описания этих контактов.

PinValue

PinValue используется событием изменения состояния контакта, чтобы указать на состояние CD, CTS, DSR или контактов RI. Возможными значениями является on или off.

Message

Message используется ошибочным событием, чтобы хранить описательное сообщение, которое сгенерировано, когда ошибка происходит.

Используя События и коллбэки

Этот пример использует функцию обратного вызова instrcallback, чтобы отобразить событийную информацию к командной строке, когда доступное байтам событие или пустое от вывода событие происходят:

Примечание

Этим примером является конкретный Windows®.

  1. Создайте инструментальный объект — Создают объект последовательного порта s, сопоставленный с последовательным портом COM1.

    s = serial('COM1');
  2. Сконфигурируйте свойства — Конфигурируют s, чтобы выполнить функцию обратного вызова instrcallback, когда доступное байтам событие или пустое от вывода событие происходят.

    s.BytesAvailableFcnMode = 'terminator';
    s.BytesAvailableFcn = @instrcallback;
    s.OutputEmptyFcn = @instrcallback;
  3. Соединитесь с инструментом — Подключение s к осциллографу Tektronix® TDS 210. Поскольку значением по умолчанию для свойства ReadAsyncMode является continuous, данные асинхронно возвращены во входной буфер, как только это доступно от инструмента.

    fopen(s)
  4. Запишите и считайте данные — Запись команда RS232? асинхронно к осциллографу. Эта команда запрашивает настройки RS-232 и возвращает скорость в бодах, установку программного управления потоком, установку аппаратного управления потоками, тип контроля четности и терминатор строки.

    fprintf(s,'RS232?','async')

    instrcallback называется после того, как команда RS232? отправляется, и когда терминатор строки читается. Получившиеся отображения показывают ниже.

    OutputEmpty event occurred at 17:37:21 for the object: 
    Serial-COM1.
    
    BytesAvailable event occurred at 17:37:21 for the object: 
    Serial-COM1.
  5. Считайте данные из входного буфера.

    out = fscanf(s)
    
    out =
    9600;0;0;NONE;LF
  6. Разъединитесь и вымойтесь — Когда вам больше не нужен s, необходимо отключить его от инструмента и удалить его из памяти и из рабочего пространства MATLAB.

    fclose(s)
    delete(s)
    clear s

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

Примечание

Вы не можете использовать значения ASCII, больше, чем 127 символов с fgetl, fgets или BytesAvailableFnc. Функции ограничиваются 127 бинарными символами.