Как описано в Сигналах Последовательного порта и Назначениях контактов, 9-контактные последовательные порты включают шесть контактов управления. Следующая таблица показывает свойства, сопоставленные с контактами управления последовательным портом.
Управляйте свойствами контакта
PropertyName | Описание |
---|---|
Состояние контакта DTR | |
Метод управления потока данных, чтобы использовать | |
Состояние CD, CTS, DSR и контактов RI | |
Состояние контакта RTS |
DTEs и DCEs часто используют CD, DSR, RI и контакты DTR, чтобы указать, устанавливается ли связь между устройствами последовательного порта. Если связь устанавливается, можно начать писать или считывать данные.
Чтобы контролировать состояние CD, DSR и контакты RI, используют PinStatus
свойство. Чтобы задать или контролировать состояние контакта DTR, используйте DataTerminalReady
свойство.
Следующий пример иллюстрирует, как эти контакты используются, когда два модема соединяются друг с другом.
Этот пример соединяет два модема друг с другом через тот же компьютер и иллюстрирует, как контролировать коммуникационное состояние для компьютерных модемных соединений, и для соединения модем-модем. Первый модем соединяется с COM1, в то время как второй модем соединяется с COM2.
Создайте объекты последовательного порта — После того, как модемы будут включены, объект последовательного порта s1
создается для первого модема и объекта последовательного порта s2
создается для второго модема.
s1 = serial('COM1'); s2 = serial('COM2');
Свяжите с устройствами — s1
и s2
соединяются с модемами. Поскольку значение по умолчанию для ReadAsyncMode
свойством является continuous
, данные асинхронно возвращены во входные буферы, как только это доступно от модемов.
fopen(s1) fopen(s2)
Поскольку DataTerminalReady
по умолчанию значением свойства является
on
, компьютер (терминал) теперь готов обмениваться данными с модемами. Чтобы проверить, что модемы (наборы данных) могут связаться с компьютером, исследуйте значение контакта Data Set Ready с помощью PinStatus
свойство.
s1.Pinstatus ans = CarrierDetect: 'off' ClearToSend: 'on' DataSetReady: 'on' RingIndicator: 'off'
Значение DataSetReady
полем является on
потому что оба модема были включены, прежде чем они были соединены с объектами.
Сконфигурируйте свойства — Оба модема сконфигурированы для скорости в бодах 2 400 бит в секунду и терминатора строки возврата каретки (CR).
s1.BaudRate = 2400; s1.Terminator = 'CR'; s2.BaudRate = 2400; s2.Terminator = 'CR';
Запишите и считайте данные — Запись atd
команда к первому модему. Эта команда помещает модем “от рычага”, который эквивалентен ручному подъему телефонного получателя.
fprintf(s1,'atd')
Запишите ata
команда к второму модему. Эта команда помещает модем в “режим ответа”, который обеспечивает его, чтобы связать с первым модемом.
fprintf(s2,'ata')
После того, как эти два модема согласовывают свою связь, проверяют состояние связи путем исследования значения контакта обнаружения несущей с помощью PinStatus
свойство.
s1.PinStatus ans = CarrierDetect: 'on' ClearToSend: 'on' DataSetReady: 'on' RingIndicator: 'off'
Проверьте соединение модем-модем путем чтения описательного сообщения, возвращенного вторым модемом.
s2.BytesAvailable ans = 25 out = fread(s2,25); char(out)' ans = ata CONNECT 2400/NONE
Теперь повредите связь между этими двумя модемами путем конфигурирования DataTerminalReady
свойство к off
. Чтобы проверить модемы отключаются, исследуют значение контакта обнаружения несущей.
s1.DataTerminalReady = 'off'; s1.PinStatus ans = CarrierDetect: 'off' ClearToSend: 'on' DataSetReady: 'on' RingIndicator: 'off'
Разъединитесь и вымойтесь — Разъединение объекты от модемов и удалите объекты из памяти и из рабочей области MATLAB®.
fclose([s1 s2]) delete([s1 s2]) clear s1 s2
Управление потоком данных или handshaking являются методом, используемым в передаче между DCE и DTE, чтобы предотвратить потерю данных во время передачи. Например, предположите, что ваш компьютер может получить только ограниченный объем данных, прежде чем это должно будет быть обработано. Когда этот предел достигнут, сигнал квитирования передается к DCE, чтобы прекратить отправлять данные. Когда компьютер может принять больше данных, другой сигнал квитирования передается к DCE, чтобы продолжить отправлять данные.
Если поддержано вашим устройством, можно управлять потоком данных с помощью одного из этих методов:
Несмотря на то, что вы можете смочь сконфигурировать свое устройство и для аппаратного квитирования и для программного квитирования одновременно, MATLAB не поддерживает это поведение.
Чтобы задать метод управления потока данных, используйте FlowControl
свойство. Если FlowControl
hardware
, аппаратное квитирование используется, чтобы управлять потоком данных. Если FlowControl
software
, программное квитирование используется, чтобы управлять потоком данных. Если FlowControl
none
, никакое квитирование не используется.
Аппаратное квитирование использует определенные контакты последовательного порта, чтобы управлять потоком данных. В большинстве случаев это РТС и CTS контакты. Аппаратное квитирование с помощью этих контактов описано в РТС и CTS контактах.
Если FlowControl
hardware
, РТС и CTS контакты автоматически управляемы DTE и DCE. Чтобы возвратить значение контакта CTS, используйте PinStatus
свойство. Сконфигурируйте или возвратите значение контакта RTS с RequestToSend
свойство.
Некоторые устройства также используют DTR и DSR контакты в квитировании. Однако эти контакты обычно используются, чтобы указать, что система готова к коммуникации и не используется, чтобы управлять передачей данных. В MATLAB оборудование, квитирующее всегда, использует РТС и CTS контакты.
Если ваше устройство не использует аппаратное квитирование стандартным способом, то вы можете должны быть вручную сконфигурировать RequestToSend
свойство. В этом случае необходимо сконфигурировать FlowControl
к none
. Если FlowControl
hardware
, затем RequestToSend
значение, которое вы задаете, не может соблюдаться. Обратитесь к документации устройства, чтобы определить ее определенное поведение контакта.
Программное квитирование использует определенные символы ASCII, чтобы управлять потоком данных. Эти символы, известные как Xon и Xoff (или XON и XOFF), описаны в следующей таблице.
Символы программного квитирования
Символ | Целочисленное значение | Описание |
---|---|---|
Xon | 17 | Возобновите передачу данных |
Xoff | 19 | Приостановите передачу данных |
При использовании программного квитирования управляющие символы отправляются по линии электропередачи тот же путь как регулярные данные. Поэтому только TD, RD и контакты GND необходимы.
Основной недостаток программного квитирования - то, что Xon или символы Xoff не перезаписываемы, в то время как числовые данные пишутся в устройство. Это вызвано тем, что числовые данные могут содержать 17 или 19, который лишает возможности различать управляющие символы и данные. Однако можно записать Xon или Xoff, в то время как данные асинхронно считываются из устройства, потому что вы используете и TD и контакты RD.
Предположим, что вы хотите использовать программное управление потоком с примером, описанным в Примере — Считывающий Двоичные Данные. Для этого необходимо сконфигурировать осциллограф и объект последовательного порта для программного управления потоком.
fprintf(s,'RS232:SOFTF ON') s.FlowControl = 'software';
Чтобы приостановить передачу данных, запишите численному значению 19
к устройству.
fwrite(s,19)
Чтобы возобновить передачу данных, запишите численному значению 17
к устройству.
fwrite(s,17)