Сконфигурируйте коммуникации последовательного порта
Свойства последовательного порта используются, чтобы сконфигурировать коммуникации с помощью объекта serial
и сконфигурировать поведение записи и чтение.
Некоторые свойства могут быть установлены во время создания объекта с функцией serial
. Смотрите страницу с описанием serial
для получения информации о тех свойствах, которые включают Port
, BaudRate
, ByteOrder
, DataBits
, Parity
, StopBits
и Terminator
.
Считайте и запишите, что свойства используются, чтобы сконфигурировать факторы, вовлеченные в чтение и запись данных, такие как установка тайм-аута для завершения операции. Используйте свойства контакта управления сконфигурировать контакты уровня контроля и управление потоком данных. Используйте свойства записи настроить и управлять информацией о записи к диску.
Этот демонстрационный синтаксис для всех свойств принимает, что вы создали последовательный объект, s
. Многие свойства могут только быть установлены прежде, чем вызвать fopen
на объекте. Некоторые могут быть изменены, в то время как объект открыт.
Свойства могут быть установлены после того, как вы создадите объект serial
. Свойство только для чтения называется можно следующим образом:
s = serial('COM1'); s.TransferStatus ans = idle
Свойство, которое можно сконфигурировать, установлено можно следующим образом:
s = serial('COM1'); s.Timeout = 30;
BytesAvailable
Количество байтов, доступных во входном буфереКоличество байтов, доступных во входном буфере, заданном как двойное. Это свойство только для чтения указывает на количество байтов, в настоящее время доступных, чтобы быть считанным из входного буфера. Значение свойства постоянно обновляется, когда входной буфер заполнен, и установлен в 0
после того, как функция fopen
выпущена.
Можно использовать BytesAvailable
только при чтении данных асинхронно. Это вызвано тем, что при чтении данных синхронно, управление возвращено в командную строку MATLAB® только после того, как входной буфер будет пуст. Поэтому значение BytesAvailable
всегда 0.
Значение BytesAvailable
может колебаться от нуля до размера входного буфера. Используйте свойство InputBufferSize
задать размер входного буфера. Используйте свойство ValuesReceived
возвратить общее количество чтения значений.
Пример:
s.BytesAvailable
Типы данных: double
InputBufferSize
Размер входного буфера в байтахРазмер входного буфера в байтах, заданных как двойное. Вы конфигурируете InputBufferSize
как общее количество байтов, которые могут храниться во входном буфере во время операции чтения.
Операция чтения отключена, если объем данных, сохраненный во входном буфере, равняется значению InputBufferSize
. Можно считать текстовые данные с fgetl
, fget
или функциями fscanf
. Можно считать двоичные данные с функцией fread
.
Можно сконфигурировать InputBufferSize
только, когда объект последовательного порта отключается от устройства. Можно сконфигурировать его прежде, чем вызвать функцию fopen
. Вы отключаете объект с функцией fclose
. Разъединенный объект имеет значение свойства Status
closed
.
Если вы конфигурируете InputBufferSize
, в то время как существуют данные во входном буфере, те данные очищены.
Пример:
s.InputBufferSize = 768;
Типы данных: double
ReadAsyncMode
Задайте, является ли асинхронная операция чтения непрерывной или ручнойЗадайте, является ли асинхронная операция чтения непрерывной или ручной, задана как manual
или continuous
. Если ReadAsyncMode
является continuous
, объект последовательного порта постоянно запрашивает устройство, чтобы определить, доступны ли данные, чтобы быть считанными. Если данные доступны, они автоматически читаются и хранятся во входном буфере. Если выпущено, функция readasync
проигнорирована.
Если ReadAsyncMode
является manual
, объект не запрашивает устройство, чтобы определить, доступны ли данные, чтобы быть считанными. Вместо этого необходимо вручную выпустить функцию readasync
, чтобы выполнить асинхронную операцию чтения. Поскольку проверки readasync
на терминатор строки, эта функция может быть медленной. Чтобы увеличить скорость, сконфигурируйте ReadAsyncMode
к continuous
.
Если устройство будет готово передать данные, оно сделает так независимо от значения ReadAsyncMode
. Поэтому, если ReadAsyncMode
является manual
, и операция чтения не происходит, данные могут быть потеряны. Чтобы гарантировать, что все передаваемые данные хранятся во входном буфере, необходимо сконфигурировать ReadAsyncMode
к continuous
.
Чтобы определить объем данных, доступный во входном буфере, используйте свойство BytesAvailable
. Или для значения ReadAsyncMode
, можно принести данные в рабочее пространство MATLAB с одной из синхронных функций чтения, таких как fscanf
, fgetl
, fgets
или для fread
.
Пример:
s.ReadAsyncMode = 'manual';
Типы данных: char | string
Тайм-аут
Время ожидания, чтобы завершить операцию чтения или операцию записиВремя ожидания, чтобы завершить операцию чтения или операцию записи, заданную как двойное. Вы конфигурируете Timeout
, чтобы быть максимальным временем (в секундах), чтобы ожидать, чтобы завершить операцию чтения или операцию записи. Значение по умолчанию секунд 10
используется, если вы не задаете различное значение. Тайм-ауты округлены вверх к целым секундам.
Если тайм-аут происходит, аварийные прекращения работы операции чтения или операции записи. Кроме того, если тайм-аут происходит во время асинхронной операции чтения или операции записи, то:
Ошибочное событие сгенерировано.
Функция обратного вызова, заданная для ErrorFcn
, выполняется.
Пример:
s.Timeout = 30;
Типы данных: double
TransferStatus
Состояние асинхронной операции чтения или операции записиСостояние асинхронной операции чтения или операции записи, заданной как idle
, read
, write
или read&write
. Это свойство только для чтения указывает, происходят ли асинхронная операция чтения или операция записи. Если TransferStatus
является idle
, никакие асинхронные операции чтения или операции записи не происходят. Если это - read
, асинхронная операция чтения происходит. Если это - write
, асинхронная операция записи происходит. Если TransferStatus
является read&write
, и асинхронное чтение и асинхронная операция записи происходят.
Можно записать данные асинхронно с помощью функций fwrite
или fprintf
. Можно считать данные асинхронно с помощью функции readasync
, или путем конфигурирования свойства ReadAsyncMode
к continuous
. В то время как readasync
выполняется, TransferStatus
может указать, что данные считываются даже при том, что данные не заполняют входной буфер. Если ReadAsyncMode
является continuous
, TransferStatus
указывает, что данные только для чтения, когда данные заполняют входной буфер.
Можно выполнить асинхронное чтение и асинхронную операцию записи одновременно, потому что последовательные порты имеют отдельное чтение и контакты записи.
Сводные данные возможные значения:
| Никакие асинхронные операции не происходят. |
| Асинхронная операция чтения происходит. |
| Асинхронная операция записи происходит. |
| Асинхронные операции чтения и операции записи происходят. |
Пример:
s.TransferStatus
Типы данных: char | string
ValuesReceived
Общее количество значений считано из устройстваОбщее количество значений считано из устройства, заданного как двойное. Это - свойство только для чтения, и значение обновляется после каждой успешной операции чтения и устанавливается к 0
после того, как функция fopen
выпущена. Если терминатор строки читается из устройства, то это значение отражается ValuesReceived
.
Если вы считываете данные асинхронно, используйте свойство BytesAvailable
возвратить количество байтов, в настоящее время доступных во входном буфере.
При выполнении операции чтения полученные данные представлены значениями, а не байтами. Значение состоит из одного или нескольких байтов. Например, одно значение uint32
состоит из четырех байтов.
Например, создайте объект последовательного порта, сопоставленный с последовательным портом COM1, и откройте связь.
s = serial('COM1'); fopen(s)
Если вы пишете команду RS232?
и читаете назад ответ с помощью fscanf
, ValuesReceived
является 17
, потому что инструмент сконфигурирован, чтобы отправить терминатор строки LF
.
fprintf(s,'RS232?') out = fscanf(s) out = 9600;0;0;NONE;LF s.ValuesReceived ans = 17
Пример:
s.ValuesReceived
Типы данных: double
BytesToOutput
Количество байтов в настоящее время в буфере выводаКоличество байтов в настоящее время в буфере вывода, заданном как двойное. Это свойство только для чтения указывает на количество байтов в настоящее время в буфере вывода, ожидающем, чтобы быть записанным в устройство. Значение свойства постоянно обновляется, когда буфер вывода заполнен и освобожден и установлен в 0
после того, как функция fopen
выпущена.
Можно использовать BytesToOutput
только при записывании данные асинхронно. Это вызвано тем, что при записывании данные синхронно, управление возвращено в командную строку MATLAB только после того, как буфер вывода будет пуст. Поэтому значением BytesToOutput
всегда является 0
.
Используйте свойство ValuesSent
возвратить общее количество значений, записанных в устройство.
При попытке выписать больше данных, чем может поместиться в буфер вывода, ошибка возвращена, и BytesToOutput
является 0
. Задайте размер буфера вывода со свойством OutputBufferSize
.
Пример:
s.BytesToOutput
Типы данных: double
OutputBufferSize
Размер буфера вывода в байтахРазмер буфера вывода в байтах, заданных как двойное. Вы конфигурируете OutputBufferSize
как общее количество байтов, которые могут храниться в буфере вывода во время операции записи.
Можно сконфигурировать OutputBufferSize
только, когда объект последовательного порта отключается от устройства. Можно сконфигурировать его прежде, чем вызвать функцию fopen
. Вы отключаете объект с функцией fclose
. Разъединенный объект имеет значение свойства Status
closed
.
Ошибка происходит, если буфер вывода не может содержать все данные, которые будут записаны. Вы пишете текстовые данные с функцией fprintf
. Вы пишете двоичные данные с функцией fwrite
.
Пример:
s.OutputBufferSize = 256;
Типы данных: double
ValuesSent
Общее количество значений записано в устройствоОбщее количество значений записано в устройство, заданное как двойное. Это - свойство только для чтения, и значение обновляется после каждой успешной операции записи и устанавливается к 0
после того, как функция fopen
выпущена. Если вы пишете терминатор строки, ValuesSent
отражает это значение.
Если вы записываете данные асинхронно, используйте свойство BytesToOutput
возвратить количество байтов в настоящее время в буфере вывода.
При выполнении операции записи передаваемые данные представлены значениями, а не байтами. Значение состоит из одного или нескольких байтов. Например, одно значение uint32
состоит из четырех байтов.
Например, создайте объект последовательного порта, сопоставленный с последовательным портом COM1, и откройте связь.
s = serial('COM1'); fopen(s)
Если вы пишете команду *IDN?
с помощью функции fprintf
, ValuesSent
является 6
, потому что форматом данных по умолчанию является %s\n
, и терминатор строки был записан.
fprintf(s,'*IDN?') s.ValuesSent ans = 6
Пример:
s.ValuesSent
Типы данных: double
Состояние
Состояние подключения устройства последовательного портаСостояние подключения устройства последовательного порта, возвращенного как closed
или open
. Это свойство только для чтения указывает, соединяется ли объект последовательного порта с устройством. Если Status
является closed
, объект последовательного порта не соединяется с устройством. Если Status
является open
, объект последовательного порта соединяется с устройством.
Прежде чем можно будет записать или считать данные, необходимо соединить объект последовательного порта с устройством с функцией fopen
. Используйте функцию fclose
, чтобы отключить объект последовательного порта от устройства.
Пример:
s.Status
Типы данных: char | string
DataTerminalReady
Состояние контакта DTRСостояние контакта DTR, заданного как on
или off
. Если DataTerminalReady
является on
, контакт Data Terminal Ready (DTR) утверждается. Если DataTerminalReady
является off
, контакт DTR не утверждается.
В нормальном использовании DTR и контакты Data Set Ready (DSR) работают совместно и используются, чтобы сигнализировать, соединяются ли устройства и приводятся в действие. Однако нет ничего в стандарте RS-232, который утверждает, что контакт DTR должен использоваться в любом особенном методе. Например, DTR и DSR могут использоваться для квитирования. Необходимо обратиться к документации устройства, чтобы определить ее определенное поведение контакта.
Можно возвратить значение контакта DSR со свойством PinStatus
.
Пример:
s.DataTerminalReady = 'off';
Типы данных: char | string
FlowControl
Метод управления потока данныхМетод управления потока данных, заданный как none
, hardware
или software
. Если FlowControl
является none
, управление потоком данных (квитирование) не используется. Если FlowControl
является hardware
, аппаратное квитирование используется, чтобы управлять потоком данных. Если FlowControl
является software
, программное квитирование используется, чтобы управлять потоком данных.
Оборудование, квитирующее обычно, использует Request To Send (RTS) и контакты Clear to Send (CTS), чтобы управлять потоком данных. Программное квитирование использует управляющие символы (Xon и Xoff), чтобы управлять потоком данных.
Можно возвратить значение контакта CTS со свойством PinStatus
. Можно задать значение контакта RTS со свойством RequestToSend
. Однако, если FlowControl
является hardware
, и вы задаете значение для RequestToSend
, то значение не может соблюдаться.
Несмотря на то, что вы можете смочь сконфигурировать свое устройство и для аппаратного квитирования и для программного квитирования одновременно, MATLAB не поддерживает это поведение.
Пример:
s.FlowControl = 'hardware';
Типы данных: char | string
PinStatus
Состояние CD, CTS, DSR и контактов RIСостояние CD, CTS, DSR, и контактов RI, возвратилось как структура. Это свойство только для чтения возвращает массив структур, который содержит поля CarrierDetect
, ClearToSend
, DataSetReady
и RingIndicator
. Эти поля указывают на состояние обнаружения несущей (CD), Clear to Send (CTS), Data Set Ready (DSR) и контактов Ring Indicator (RI), соответственно.
PinStatus
может быть on
или off
для любого из этих полей. Значение on
указывает, что связанный контакт утверждается. Значение off
указывает, что связанный контакт не утверждается. Событие изменения состояния контакта происходит, когда любой из этих контактов изменяет его состояние. Событие изменения состояния контакта выполняется, вызов назад функционируют заданные PinStatusFcn
.
В нормальном использовании работают совместно Data Terminal Ready (DTR) и контакты DSR, в то время как Request To Send (RTS) и контакты CTS работают совместно. Можно задать состояние контакта DTR со свойством DataTerminalReady
. Можно задать состояние контакта RTS со свойством RequestToSend
.
Пример:
s.PinStatus
Типы данных: struct
RequestToSend
Состояние контакта RTSСостояние контакта RTS, заданного как on
или off
. Если RequestToSend
является on
, контакт Request To Send (RTS) утверждается. Если RequestToSend
является off
, контакт RTS не утверждается.
В нормальном использовании RTS и контакты Clear to Send (CTS) работают совместно и используются в качестве стандартных контактов квитирования для передачи данных. В этом случае RTS и CTS автоматически управляемы DTE и DCE. Однако нет ничего в стандарте RS-232, который требует, чтобы контакт RTS использовался в любом особенном методе. Поэтому, если вы вручную конфигурируете значение RequestToSend
, это, вероятно, для нестандартных операций.
Если ваше устройство не использует аппаратное квитирование стандартным способом, и необходимо вручную сконфигурировать RequestToSend
, сконфигурировать свойство FlowControl
к none
. В противном случае значение RequestToSend
, которое вы задаете, не может соблюдаться. Обратитесь к своей документации устройства, чтобы определить ее определенное поведение контакта.
Можно возвратить значение контакта CTS со свойством PinStatus
.
Пример:
s.RequestToSend = 'off';
Типы данных: char | string
RecordDetail
Уровень детализации информации, сохраненной в файл записиУровень детализации информации, сохраненной в файл записи, заданный как compact
или verbose
. Если RecordDetail
является compact
, количество значений, записанных в устройство, количество значений, считанных из устройства, типа данных значений, и информация о событии сохранена в файл записи. Если RecordDetail
является verbose
, данные, записанные в устройство и данные, считанные из устройства, также сохранены в файл записи.
Сводные данные возможных значений:
| Количество значений, записанных в устройство, количество значений, считанных из устройства, типа данных значений и информации о событии, сохранено в файл записи. |
| Данные, записанные в устройство и данные, считанные из устройства, также сохранены в файл записи. |
Пример:
s.RecordDetail = 'verbose';
Типы данных: char | string
RecordMode
Метод для того, чтобы сохранить данные и информацию о событии в файлах записиМетод для того, чтобы сохранить данные и информацию о событии в файлах записи, заданных как overwrite
, append
или index
. Если RecordMode
является overwrite
, файл записи перезаписывается, каждая запись времени инициируется. Если RecordMode
является append
, данные добавлены к файлу записи, каждая запись времени инициируется. Если RecordMode
является index
, различный файл записи создается, каждая запись времени инициируется, каждый с индексируемым именем файла.
Можно сконфигурировать RecordMode
только, когда объект не записывает. Вы отключаете запись с функцией record
. Объект, который не записывает, имеет значение свойства RecordStatus
off
.
Вы задаете имя файла записи со свойством RecordName
. Индексируемое имя файла следует за предписанным рядом правил.
Сводные данные возможных значений:
| Файл записи перезаписывается. |
| Данные добавлены к существующему файлу записи. |
| Различный файл записи создается, каждый с индексируемым именем файла. |
Например, запишите последовательные данные с помощью свойств записи. Создайте объект последовательного порта и откройте связь.
s = serial('COM1'); fopen(s)
Задайте имя файла записи со свойством RecordName
, сконфигурируйте RecordMode
к index
и инициируйте запись.
s.RecordName = 'MyRecord.txt'; s.RecordMode = 'index'; record(s)
Имя файла записи автоматически обновляется с индексируемым именем файла после того, как запись будет выключена.
record(s,'off') s.RecordName ans = MyRecord01.txt
Отключите s
от периферийного устройства, удалите s
из памяти и удалите s
из рабочего пространства MATLAB.
fclose(s) delete(s) clear s
Пример:
s.RecordMode = 'index';
Типы данных: char | string
RecordName
Имя файла записиИмя файла записи, заданного как строка. Можно задать любое значение для RecordName
- включая путь к каталогу - если имя файла поддерживается операционной системой.
Именем файла записи по умолчанию является record.txt
, который используется, если вы записываете файл данных и не задаете другое имя.
MATLAB поддерживает любое имя файла, поддержанное вашей операционной системой. Можно получить доступ к файлу с помощью функции type
. Например, если вы называете файл записи MyRecord.txt
, чтобы ввести этот файл в командной строке MATLAB, введите:
type('MyRecord.txt')
Можно задать, сохранены ли данные и информация о событии в один дисковый файл или в несколько дисковых файлов со свойством RecordMode
. Если RecordMode
является index
, имя файла следует за предписанным рядом правил.
Можно сконфигурировать RecordName
только, когда объект не записывает. Вы отключаете запись с функцией record
. Объект, который не записывает, имеет значение свойства RecordStatus
off
.
Пример:
s.RecordName = 'MonthlyDataFile_April';
Типы данных: char | string
RecordStatus
Состояние записи последовательных данных и информации о событииСостояние записи последовательных данных и информации о событии, возвращенной как on
или off
. Это свойство только для чтения указывает, ли включена запись или прочь, которым управляет функция record
. Если RecordStatus
является off
, то данные и информация о событии не сохранены в файл записи. Если RecordStatus
является on
, то данные и информация о событии сохранены в файл записи, заданный RecordName
.
Используйте функцию record
, чтобы инициировать или завершить запись. RecordStatus
автоматически сконфигурирован, чтобы отразить состояние записи.
Пример:
s.RecordStatus
Типы данных: char | string
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.